perf #418: widen the destination-lane budget only while the reveal hold is active

While a destination reservation hides the world behind the authored
tunnel, the streaming frame meter now runs a hold-widened profile
(StreamingWorkBudget.WidenForDestinationHold): the time ceiling rises
from the authored 2 ms to an absolute 8 ms default
(ACDREAM_STREAM_WORK_HOLD_DEST_MS is a measurement-only override), every
count/byte dimension scales by the same factor so elapsed time stays the
authoritative guard (the measured binder is Time at both ceilings), and
the reserve fraction is re-derived (0.75 -> 0.9375) so the
NON-destination lane's absolute per-frame caps are unchanged. The
widening keys off the existing BeginDestinationReservation/
EndDestinationReservation bracket only, is derived per-Tick from the
CURRENT budget (mid-hold quality swaps compose), and a frame with no
reservation uses the authored budget verbatim (test-pinned). Portal
holds ride the same bracket as login holds by construction - intended,
and pinned by a kind-parity test through the real coordinator plus a
live @telepoi portal hold (kind=portal gate-ready 3589 ms).

Why: issue #418's next-hypothesis (1). Measured result: the ~5 s
publication drip collapsed to ~2 s (loaded 625/625 at ~3.0 s, tunnel at
64-66 fps), the portal-hold gate-ready fell to ~3.6 s - and login
gate-ready/total stayed at 8.4-8.8 s / 12.6-12.7 s, exposing the real
remaining pacer: the login-cold render-thread upload/registration
barrier behind GpuWorldState.IsRenderReady, which ran concurrently under
the old drip. Full attribution appended to docs/ISSUES.md #418; no
divergence-register row (the streamed result and reveal gate are
byte-identical; only the scheduling rate during a hidden hold changed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-17 20:55:43 +02:00
parent e94e8e0c61
commit a1d15a82dd
5 changed files with 420 additions and 7 deletions

View file

@ -665,9 +665,21 @@ public sealed class StreamingController
throw new InvalidOperationException(
"StreamingController.Tick cannot be reentered.");
// #418: while the destination reservation hides the world behind the
// authored tunnel, the frame runs on the hold-widened profile so the
// reveal-critical drip is not paced by the authored mid-game budget.
// Keyed off the existing reservation bracket only, derived from the
// CURRENT budget every frame (so a mid-hold quality swap composes),
// and reverting the moment EndDestinationReservation clears the
// reservation. A frame with no reservation uses _workBudget verbatim.
bool destinationHold = _destinationReservation is not null;
var meter = new StreamingWorkMeter(
_workBudget,
destinationReservationActive: _destinationReservation is not null);
destinationHold
? _workBudget.WidenForDestinationHold(
_configuredWorkBudgetOptions
.HoldDestinationCeilingMilliseconds)
: _workBudget,
destinationReservationActive: destinationHold);
_activeWorkMeter = meter;
try
{