wip(assembler): round S11 -- bounded spawn apply budget: in-game full set 7.1 s -> 6.0 s

Startup apply mode on by default (12 meshes / 14 ms per frame, ends when the
initial set and walkable ring are ready, 30 s cap); normal play keeps the
authored budget. Backlog peak 252 -> 10, LOD8 apply wait 1.1 s -> 4 ms.
Ring 0.49 s, LOD0 1.40 s, 40 m/s ring 75/75. Remaining floor: frame-paced
admission (~8.3 submits/frame, 8 running workers max). No geometry change.
Report: Standalone/Research/WorldAssemblerM3/Round15.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-19 13:03:44 +02:00
1 parent b90d63d0f7
commit dd9bfd3217
6 files changed
+240 -7

No files matched your search

+21 -2
View File
@@ -267,11 +267,11 @@ namespace
GVoxelForgeStep1MaxMeshApplies,
TEXT("Step 1 measurement override: 0 uses the asset MaxMeshAppliesPerFrame, otherwise caps visible applies per frame."));
int32 GVoxelForgeStreamingStartupApplyBoost = 0;
int32 GVoxelForgeStreamingStartupApplyBoost = 1;
FAutoConsoleVariableRef CVarVoxelForgeStreamingStartupApplyBoost(
TEXT("voxel.StreamingStartupApplyBoost"),
GVoxelForgeStreamingStartupApplyBoost,
TEXT("Opt-in cold-view upload experiment (default off): 1 allows a 14 ms / 12-mesh budget until the initial desired set and walkable ring are ready; 0 uses the authored per-frame budget."));
TEXT("Bounded cold-view upload budget (default on): 1 allows a 14 ms / 12-mesh budget until the initial desired set and walkable ring are ready; 0 uses the authored per-frame budget."));
constexpr int32 StreamingStartupMaxMeshApplies = 12;
constexpr float StreamingStartupApplyBudgetMilliseconds = 14.0f;
constexpr double StreamingStartupApplyMaxSeconds = 30.0;
@@ -9259,6 +9259,25 @@ void AVoxelWorld::ProcessPendingChunks()
// Budget limits how many VISIBLE mesh applies we do per frame (GPU upload cost).
// Empty meshes and stale results are free to drain — don't count them.
const bool bProfileApply = GVoxelForgeProfileTileGeneration != 0;
if (!bStartupApplyConfigTraced)
{
bStartupApplyConfigTraced = true;
if (VoxelForgeStartupTrace::IsActive())
{
VoxelForgeStartupTrace::RecordEvent(TEXT("startup_apply_config"), FString::Printf(
TEXT("\"startup_apply_boost_cvar\":%d,\"step1_max_applies\":%d,"
"\"asset_max_applies\":%d,\"asset_budget_ms\":%.3f,"
"\"boost_max_applies\":%d,\"boost_budget_ms\":%.3f,"
"\"boost_max_duration_s\":%.3f"),
GVoxelForgeStreamingStartupApplyBoost,
GVoxelForgeStep1MaxMeshApplies,
Settings ? Settings->MaxMeshAppliesPerFrame : 4,
Settings ? FMath::Max(Settings->MaxMeshApplyMilliseconds, 0.0f) : 2.0f,
StreamingStartupMaxMeshApplies,
StreamingStartupApplyBudgetMilliseconds,
StreamingStartupApplyMaxSeconds));
}
}
const uint64 ApplyFrameStartCycles = FPlatformTime::Cycles64();
const double FrameSeconds = LastApplyFrameCycles != 0
&& ApplyFrameStartCycles >= LastApplyFrameCycles
+2
View File
@@ -1225,6 +1225,8 @@ public:
bool bSampleStacksStarted = false;
bool bStartupApplyBoostStarted = false;
bool bStartupApplyBoostEnded = false;
// Trace the resolved startup budget once per world. / Tracer une fois le budget de demarrage resolu par monde.
bool bStartupApplyConfigTraced = false;
uint64 LastApplyFrameCycles = 0;
float StartupTraceSpeedCmPerSecond = 0.0f;
TArray<FVoxelTileKey> DesiredSorted; // critical floor prefix, then true-pawn distance-first