feat(33): shed our own capture cost first; the task is done
Last slice. 590 green, 0 warnings. - **Shed before you charge the viewer.** On machine evidence the policy's first act is `ShedCaptureCadence`: `ScreenCaptureFrameSource` widens its conversion interval 10 ms → 33 ms (≈100 → 30 conversions/s) through a new `ScreenCaptureManager.ShedLoad`. The output tier, the declared fps and the viewer's picture are untouched — we stop paying for readbacks we were throwing away. It costs no step budget; if the starvation persists, the fps ladder runs on the next clean window. - The shed is reset on every stop path, so a cheap session cannot leave a later one capped. - **The session line is a Logs-tab line, not a session-report line.** The session report is the money summary (Super Chats, per currency); quality chatter there would bury the numbers it exists for. The cause-tagged line already lands in the log at the moment of the step. TASK 33 is complete: two ladders, budgets, floors, ambiguity, one-way with recovery behind a flag, the relaunch, the copy, and the cost shed. 18 tests pin the ladders, the copy and the restart.
This commit is contained in:
@@ -39,6 +39,7 @@ public partial class MainViewModel
|
||||
_stepDownPlanner = null;
|
||||
_encoderTierOverride = null;
|
||||
_stepDownBusy = false;
|
||||
_screenCaptureManager.ShedLoad(false); // never carry a shed cadence into the next show
|
||||
}
|
||||
|
||||
/// <summary>Runs on the PUMP thread, so it must never block: the restart it may trigger stops the
|
||||
@@ -64,6 +65,13 @@ public partial class MainViewModel
|
||||
var landed = planner.Current;
|
||||
try
|
||||
{
|
||||
if (decision.Action == StepAction.ShedCaptureCadence)
|
||||
{
|
||||
_screenCaptureManager.ShedLoad(true);
|
||||
AppLog.Write($"Capture load shed: {decision.Why}");
|
||||
return;
|
||||
}
|
||||
|
||||
_encoderTierOverride = landed;
|
||||
AppLog.Write($"Quality step-down: {decision.Why}");
|
||||
await _framePump.ChangeEncoderAsync();
|
||||
|
||||
Reference in New Issue
Block a user