diff --git a/src/AcDream.App/Streaming/StreamingController.cs b/src/AcDream.App/Streaming/StreamingController.cs index 79f1740a..2e1f8682 100644 --- a/src/AcDream.App/Streaming/StreamingController.cs +++ b/src/AcDream.App/Streaming/StreamingController.cs @@ -122,6 +122,16 @@ public sealed class StreamingController /// public int PriorityRadius { get; set; } + // [FRAME-DIAG] (read by GameWindow's ACDREAM_WB_DIAG rollup): the standing + // deferred-LOAD backlog. A non-zero value during/after a teleport is the + // GPU-upload tail draining at MaxCompletionsPerFrame. Removable probe surface. + public int DeferredApplyBacklog => _deferredApply.Count; + + // [FRAME-DIAG]: how many times ForceReloadWindow has fired (each one drops + + // re-uploads the WHOLE window) and the landblock count it dropped last time. + public int ForceReloadCount { get; private set; } + public int LastForceReloadDropCount { get; private set; } + // Completions that were drained past a priority item get buffered here // so they still apply over subsequent frames without loss. private readonly List _deferredApply = new(); @@ -361,6 +371,8 @@ public sealed class StreamingController _collapsed = false; // Snapshot — RemoveLandblock mutates the loaded set we're iterating. var ids = new List(_state.LoadedLandblockIds); + ForceReloadCount++; // [FRAME-DIAG] churn counter + LastForceReloadDropCount = ids.Count; // = upcoming re-upload volume foreach (var id in ids) { _state.RemoveLandblock(id);