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:
1 parent
b90d63d0f7
commit
dd9bfd3217
6 files changed
+240
-7
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user