perf(streaming): quiesce retired generations and budget teardown

Publish the retail blocking-for-cells edge before deferred recenter work, freeze old-world presentation/simulation/audio, and advance full-window retirement from exact metered entity and owner cursors. This removes synchronous portal teardown without allowing retained owners to remain observable.
This commit is contained in:
Erik 2026-07-24 18:29:52 +02:00
parent b8f6317fe1
commit bb16f74fd4
38 changed files with 1691 additions and 170 deletions

View file

@ -543,7 +543,8 @@ public class StreamingControllerPriorityApplyTests
ctrl.ForceReloadWindow();
loads.Clear();
ctrl.Tick(11, 10); // overlap remains desired in the replacement window.
for (int i = 0; i < 32 && !loads.Any(load => load.Id == overlap); i++)
ctrl.Tick(11, 10);
ulong newGeneration = loads.Single(load => load.Id == overlap).Generation;
Assert.NotEqual(oldGeneration, newGeneration);
@ -551,7 +552,8 @@ public class StreamingControllerPriorityApplyTests
outbox.Enqueue(LoadedOf(overlap, newGeneration));
outbox.Enqueue(new LandblockStreamResult.Unloaded(overlap, oldGeneration));
ctrl.Tick(11, 10);
for (int i = 0; i < 8 && applied.Count == 0; i++)
ctrl.Tick(11, 10);
Assert.Equal(new[] { overlap }, applied);
Assert.True(state.IsLoaded(overlap));
@ -559,7 +561,7 @@ public class StreamingControllerPriorityApplyTests
}
[Fact]
public void HardRecenter_DropsStaleOutboxBeforeDeferredApplyBudget()
public void HardRecenter_DropsStaleOutboxThroughBoundedAdmissionBeforeCurrentResult()
{
uint current = StreamingRegion.EncodeLandblockIdForTest(11, 10);
var outbox = new Queue<LandblockStreamResult>();
@ -584,7 +586,8 @@ public class StreamingControllerPriorityApplyTests
ulong oldGeneration = loads[0].Generation;
ctrl.ForceReloadWindow();
loads.Clear();
ctrl.Tick(11, 10);
for (int i = 0; i < 32 && !loads.Any(load => load.Id == current); i++)
ctrl.Tick(11, 10);
ulong newGeneration = loads.Single(load => load.Id == current).Generation;
for (int i = 0; i < 12; i++)
@ -593,7 +596,8 @@ public class StreamingControllerPriorityApplyTests
oldGeneration));
outbox.Enqueue(LoadedOf(current, newGeneration));
ctrl.Tick(11, 10);
for (int i = 0; i < 32 && !applied.Contains(current); i++)
ctrl.Tick(11, 10);
Assert.Equal(new[] { current }, applied);
Assert.Equal(0, ctrl.DeferredApplyBacklog);