probe: ACDREAM_PROBE_REVEAL_TIMING — wall-clock attribution of the login/portal hold
[reveal-timing] lines from the reveal coordinator: per-dimension first-ready edges (render neighborhood, composite textures, collision, gate, materialization), 1 Hz progress with the resident-landblock count (new GpuWorldState.LoadedLandblockCount), and one SUMMARY line at the viewport reveal. Measurement-first groundwork for the login-load speedup: the readiness barrier observes its dimensions serially, so the edges give each dimension's observed tail while the progress lines expose the pacing shape (a budget-paced linear drip reads directly off the counts). Probe-gated in StreamingDiagnostics per Code Structure Rules §5; no behavior change, one branch per Evaluate poll when unset. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
0bb47f2711
commit
695a27b48a
5 changed files with 190 additions and 2 deletions
|
|
@ -68,6 +68,7 @@ internal sealed class WorldRevealCoordinator
|
|||
private readonly IWorldRevealStreamingScheduler? _streaming;
|
||||
private readonly IWorldRevealRenderResourceScheduler? _renderResources;
|
||||
private readonly List<HostProjection> _hostProjections = [];
|
||||
private readonly RevealTimingProbe? _timing;
|
||||
private bool _hostRetryActive;
|
||||
private bool _hostRetryRequested;
|
||||
|
||||
|
|
@ -83,7 +84,8 @@ internal sealed class WorldRevealCoordinator
|
|||
Func<uint, bool> isSpawnClaimUnhydratable,
|
||||
WorldGenerationQuiescence? quiescence = null,
|
||||
IWorldRevealStreamingScheduler? streaming = null,
|
||||
IWorldRevealRenderResourceScheduler? renderResources = null)
|
||||
IWorldRevealRenderResourceScheduler? renderResources = null,
|
||||
Func<int>? loadedLandblockCount = null)
|
||||
{
|
||||
_transit = transit ?? throw new ArgumentNullException(nameof(transit));
|
||||
_readiness = new WorldRevealReadinessBarrier(
|
||||
|
|
@ -98,6 +100,8 @@ internal sealed class WorldRevealCoordinator
|
|||
_quiescence = quiescence;
|
||||
_streaming = streaming;
|
||||
_renderResources = renderResources;
|
||||
if (StreamingDiagnostics.ProbeRevealTiming)
|
||||
_timing = new RevealTimingProbe(loadedLandblockCount);
|
||||
}
|
||||
|
||||
public RuntimePortalSnapshot Snapshot => _transit.Snapshot;
|
||||
|
|
@ -117,6 +121,11 @@ internal sealed class WorldRevealCoordinator
|
|||
_quiescence?.CaptureBegin() ?? default;
|
||||
_readiness.Begin();
|
||||
long generation = _transit.BeginLoginReveal(destinationCell);
|
||||
_timing?.Begin(
|
||||
"login",
|
||||
generation,
|
||||
destinationCell,
|
||||
_readiness.RequiredWindow(destinationCell));
|
||||
BeginHostLifetime(
|
||||
generation,
|
||||
destinationCell,
|
||||
|
|
@ -151,6 +160,11 @@ internal sealed class WorldRevealCoordinator
|
|||
}
|
||||
|
||||
_readiness.Begin();
|
||||
_timing?.Begin(
|
||||
"portal",
|
||||
generation,
|
||||
destinationCell,
|
||||
_readiness.RequiredWindow(destinationCell));
|
||||
BeginHostLifetime(
|
||||
generation,
|
||||
destinationCell,
|
||||
|
|
@ -195,6 +209,7 @@ internal sealed class WorldRevealCoordinator
|
|||
WorldRevealReadinessSnapshot snapshot = _readiness.Evaluate(destinationCell);
|
||||
ReconcileDestinationReservationRadius(snapshot);
|
||||
RuntimePortalSnapshot portal = _transit.Snapshot;
|
||||
_timing?.Observe(snapshot, portal);
|
||||
if (portal.Generation != 0)
|
||||
{
|
||||
_transit.AcknowledgeDestinationReadiness(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue