d35823a4a9
Roll-forward of today-slices 6fd1d9c onto the slice-8 base, two-loop hunk dropped. Release counter (per-build GUID read as noise; +1 per commit from git rev-list, baseline 241 -> #13, generated by GenerateBuildStamp; GUID demotes to startup.log). Tests pinned to Label/#N >= 13; wordmark display test asserts the Label. Flash fix (take 14 finding): consumer holds must never outlive depth x source period — 4 slots at high refresh lap ~27ms vs a <=50ms compositor read, so a recycled slot flashed its new frame over the lagged old one. All shared rings 4->8 (OBS/overlay precedent for ring discipline). Camera producer now rotates an 8-deep ring + Epoch instead of a fresh ~3.7MB array per device frame (110-220MB/s LOH churn); WebView2 capture reuses a canvas scratch + 8-deep output ring + a reused WriteableBitmap instead of two fresh arrays + a fresh bitmap per 10Hz tick. Paste cache stays identity-keyed (Epoch).
52 lines
1.7 KiB
C#
52 lines
1.7 KiB
C#
using System.Windows;
|
|
using System.Windows.Threading;
|
|
using Velopack;
|
|
using ytLive.Helpers;
|
|
|
|
namespace ytLive;
|
|
|
|
/// <summary>
|
|
/// Interaction logic for App.xaml
|
|
/// </summary>
|
|
public partial class App : Application
|
|
{
|
|
public App()
|
|
{
|
|
AppLog.Write("App ctor");
|
|
}
|
|
|
|
protected override void OnStartup(StartupEventArgs e)
|
|
{
|
|
AppDomain.CurrentDomain.UnhandledException += (_, args) =>
|
|
AppLog.Write(args.ExceptionObject is Exception ex
|
|
? "AppDomain unhandled exception: " + ex
|
|
: "AppDomain unhandled exception object: " + args.ExceptionObject);
|
|
|
|
DispatcherUnhandledException += (_, args) =>
|
|
AppLog.Write(args.Exception, "Dispatcher unhandled exception");
|
|
|
|
AppLog.Write("App OnStartup begin");
|
|
// Attribution (2026-09-04): every take must be traceable to the exact binary
|
|
// that produced it — the wordmark shows the release counter (BuildStamp.Release);
|
|
// the per-build GUID is forensic only and lands here.
|
|
AppLog.Write($"Build {ytLive.Helpers.BuildStamp.Id} (compiled {ytLive.Helpers.BuildStamp.BuiltLocal})");
|
|
|
|
// Velopack auto-update bootstrap — checks for updates on startup and
|
|
// applies them (the app restarts automatically if an update is found).
|
|
// Update URL is configured per-deployment (self-hosted on DO droplet);
|
|
// when no URL is set, the check is a no-op.
|
|
try
|
|
{
|
|
VelopackApp.Build()
|
|
.Run();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AppLog.Write($"Velopack bootstrap failed (non-fatal): {ex.Message}");
|
|
}
|
|
|
|
base.OnStartup(e);
|
|
AppLog.Write("App OnStartup end");
|
|
}
|
|
}
|