acdream/tests/AcDream.App.Tests/Streaming
Erik 11106c70e7 perf #418: publish landblocks under the meter, not one per streaming tick
Phase-1 measurement (new [publish-timing]/[stream-tick] probe surfaces,
ACDREAM_PROBE_REVEAL_TIMING=1) refuted the ~31 ms-per-admission
hypothesis: the hold runs at ~64 fps with the streaming tick at ~32 Hz,
the whole 625-block window costs only ~500 ms of publication CPU (far
blocks ~0.17 ms, near 2-43 ms), and steady state showed ZERO meter
yields with ~0.22 ms of the 2 ms budget used - yet exactly one block
published per tick against a ~400-deep completion queue.

The real limiter: Runtime's collision-generation activation is a
deliberate two-poll transaction (the first
TryAcquireCollisionPrefixMutationPermission poll parks residents and
refuses by design), and LandblockPresentationPipeline.Advance's metered
arm returned Completed=false on ANY nonterminal commit, which
DrainAndApply treats as end-of-frame. One landblock per 32 Hz tick =
the flat 32/s, with the authored budget ~90% idle.

Fix: the metered arm now uses the same Runtime-owned gate the unmetered
arm and the synchronous CompletePublication API always used
(CanContinueMutationSynchronously). The second poll runs in the same
frame under the same meter, so the unchanged 2 ms elapsed-time ceiling
is now genuinely the authoritative per-frame bound; with any real debt
(live residents parked mid-game, pending withdrawals, dispatch backlog)
publication defers to the next frame exactly as before. No budget
values change, no reveal-gate/readiness change, and the streamed result
is byte-identical - only the frame scheduling of identical operations.

Measured A/B (this binary, two runs): totalMs 12689 / 12734 vs baseline
26728/27395/27503; loaded slope 32/s -> bursts of 100-360/s, 625/625 in
~6-7 s vs ~23 s. The remaining ~12.7 s floor is fully attributed in
docs/ISSUES.md: ~8 s of real budgeted readiness work plus retail's
authored tunnel exit (TunnelContinue 2-5 s + two 1 s fades, golden
constants), so the <12 s acceptance needs a lead decision on the
hold-time budget, not another hidden limiter.

New regression pin:
MeteredLoaded_NonterminalCommitWithoutDebt_CompletesInOneMeteredAdvance.
Gates: Release build 0 errors; App tests 5576/3 skips/0 failed;
Runtime tests 1756/0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:11:35 +02:00
..
GpuWorldStateActivatorTests.cs refactor(streaming): compose landblock presentation transaction 2026-07-21 21:45:16 +02:00
GpuWorldStateAnimatedIndexTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
GpuWorldStateCollisionResidencyTests.cs refactor(physics): remove parsed collision graphs 2026-07-25 18:21:19 +02:00
GpuWorldStateRenderTraversalTests.cs test(app): put every strict-zero site on the probe (#250) 2026-07-29 03:49:13 +02:00
GpuWorldStateVisibilityTests.cs fix(streaming): stop replaying committed recenter retirements 2026-08-02 20:53:11 +02:00
GraphicalRemotePlacementServiceWindowTests.cs feat(physics): C4 route 4b-1 — remote placement infrastructure (dormant) 2026-08-04 04:08:19 +02:00
LandblockBuildFactoryTests.cs refactor(physics): remove parsed collision graphs 2026-07-25 18:21:19 +02:00
LandblockBuildOriginTests.cs perf #418: parallelize landblock builds across a striped worker pool 2026-08-17 19:34:20 +02:00
LandblockConcretePresentationPipelineTests.cs perf #418: publish landblocks under the meter, not one per streaming tick 2026-08-17 20:11:35 +02:00
LandblockPhysicsPublisherTests.cs fix(physics): S2 — static publication emits authored Spheres as Spheres (AP-155 narrowed) 2026-08-07 08:07:02 +02:00
LandblockPresentationPipelineTests.cs fix(streaming): stop replaying committed recenter retirements 2026-08-02 20:53:11 +02:00
LandblockRenderPublisherTests.cs perf(streaming): cursor publication across frame budgets 2026-07-24 19:10:18 +02:00
LandblockRetirementCoordinatorTests.cs fix(streaming): stop replaying committed recenter retirements 2026-08-02 20:53:11 +02:00
LandblockStaticPresentationPublisherTests.cs refactor(runtime): own per-session physics simulation 2026-07-26 13:39:57 +02:00
LandblockStreamerPoolTests.cs perf #418: parallelize landblock builds across a striped worker pool 2026-08-17 19:34:20 +02:00
LocalPlayerTeleportControllerTests.cs feat(session): the in-world logoff — LogOut animation, reverse wormhole, live return to character select 2026-08-17 14:02:40 +02:00
RuntimeTeleportDestinationAdapterTests.cs refactor(runtime): own teleport destination correlation 2026-07-26 17:52:34 +02:00
StreamingCompletionQueueTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
StreamingControllerReadinessTests.cs fix(test): cover the atlas-tier seam the D-1 fix depends on; correct AP-150's citation 2026-08-06 07:54:03 +02:00
StreamingFrameControllerTests.cs refactor(physics): delete legacy PhysicsEngine.Resolve/ResolvePlacement/HasCellSurface (C5a, AP-1/AD-1) 2026-08-05 14:11:31 +02:00
StreamingWorkBudgetTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
TeleportLandblockTransitionTests.cs fix(world): remove non-retail portal exit fade 2026-07-15 23:20:52 +02:00
WorldGenerationQuiescenceTests.cs refactor(runtime): acknowledge exact world host projections 2026-07-26 18:27:41 +02:00
WorldRevealCoordinatorTests.cs fix(streaming): derive the portal reveal window from the live streaming radii (#280) 2026-08-05 23:54:59 +02:00
WorldRevealDerivedWindowIntegrationTests.cs fix(streaming): make a demoted landblock render-ready like a published one (#280 D-1) 2026-08-06 07:27:28 +02:00
WorldRevealReadinessBarrierTests.cs fix(streaming): make a demoted landblock render-ready like a published one (#280 D-1) 2026-08-06 07:27:28 +02:00