wip(streaming): LOD rings tile exactly once, cache race, reconcile 104x -- gate stress FAILS 3/4
- Clipmap: finer rings snap to child-pair boundaries, so no two desired tiles of different levels overlap. Owner config 635 overlapping pairs -> 0; LOD0 ring 343 -> 512 tiles. New test sweeps 6,174 cases; fails on7486c29as intended, passes here. - Shared room-graph cache: Entry->Cache read/written only under the mutex (race fix). - ReconcileReadyTransitionVisibility indexed: moving p95 32.0 ms -> 0.31 ms. - Block-vs-scalar density equivalence test: 5.1M samples bit-identical; catches an injected optimistic EffectOverBox (5,612 mismatches). UNVALIDATED for merge: collision-gate stress passed 1 of 4 runs on this code (fails at 4.56 m, support collision unready at start); it passed on7486c29. No control run yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
1 parent
7486c299d4
commit
85a803b873
6 files changed
+1300
-51
No files matched your search
@@ -560,6 +560,7 @@ private:
|
||||
void MaybeFinishHeadlessStreamingTest();
|
||||
void UpdateVisualStalenessAudit();
|
||||
void LogVisualStalenessAudit();
|
||||
void LogReadyTransitionVisibilityMeasure();
|
||||
void RecordTileHash(const FVoxelTileKey& Tile, const FIntVector& OriginVoxels,
|
||||
int32 Step, int32 Cells, int32 BandChunkLo, int32 BandChunkHi,
|
||||
bool bSheetTile, const FVoxelMeshData& MeshData);
|
||||
@@ -989,10 +990,30 @@ public:
|
||||
bool bSampleStacksStarted = false;
|
||||
TArray<FVoxelTileKey> DesiredSorted; // critical floor prefix, then true-pawn distance-first
|
||||
TArray<FVoxelTileKey> CriticalDesiredTiles; // occupied/support tile, then heading tile
|
||||
// Ancestor -> desired descendants, rebuilt with DesiredSorted. Reconciliation uses this
|
||||
// index to test transition coverage without rescanning the full desired set per old tile.
|
||||
TMap<FVoxelTileKey, TArray<FVoxelTileKey>> DesiredTransitionDescendants;
|
||||
int32 DesiredTransitionMaxLevel = 0;
|
||||
uint32 DesiredEpoch = 0; // increments whenever DesiredStamped is rebuilt
|
||||
int32 ObsoleteTileAbortCount = 0; // cumulative per-world moving-session cancellation count
|
||||
float PeakObservedPawnSpeedCmPerSecond = 0.0f;
|
||||
|
||||
struct FReadyTransitionVisibilitySample
|
||||
{
|
||||
uint64 Cycles = 0;
|
||||
int32 TileComponentCount = 0;
|
||||
int32 DesiredTileCount = 0;
|
||||
};
|
||||
struct FFarFieldSubmitSample
|
||||
{
|
||||
uint64 Cycles = 0;
|
||||
int32 DesiredTileCount = 0;
|
||||
int32 MaxDesiredLevel = 0;
|
||||
};
|
||||
bool bMeasureReadyTransitionVisibility = false;
|
||||
TArray<FReadyTransitionVisibilitySample> ReadyTransitionVisibilitySamples;
|
||||
TArray<FFarFieldSubmitSample> FarFieldSubmitSamples;
|
||||
|
||||
// Clean performance accounting. LOD 0..8 covers every marching-cubes clip level; sheet tiles
|
||||
// above the configured MC range never enter the outer classifier.
|
||||
static constexpr int32 TrackedClassifierLODCount = 9;
|
||||
|
||||
Reference in new issue
Block a user