perf(collision): cook stages measured, no standing on dug-out ground; review F/H/E measured
1. Collision cook breakdown (request -> ready), critical support tile: spawn (0,0,-1): generate 107 ms, apply < 1 ms, RMC submit->body 479 ms, total 587 ms; deep floor (0,0,-7): generate 82 ms, RMC 1,441 ms, total 1,548 ms. Almost all of the wait is inside RMC (end-of-frame update + async pool + Chaos cook + body install, not separable from our side). Critical priority does not shorten it. Collision is async, complex-as-simple, fast-cook off; skirts are ~16-18% of collision triangles. No cook change made. Startup outlier: first support tile waited 2.09 s for its game-thread apply. Underfoot dig: a carving brush that intersects the pawn's capsule and support tile now disables the old body and withdraws readiness on the carve frame: 0 frames standing on removed ground (replacement 91.8 ms later). 8 neighbouring digs: 0 gate frames. Gap audit 0. 2. Stack sampler, 49.4 s game path: top resolved leaf was the profiler's own VoxelDensityProfile::BucketFromName (4.86%). Linear label scan -> CRC-keyed lookup with exact compare: 59.26 -> 57.87 ms/tile (-2.35%), 980/980 tile hashes identical. 3. Measured only: F (classifier mode 1, no exact check) +48% worker CPU, 0/980 tiles differ -> not worth it. H (handoff component scans) p95 0.07 ms/frame -> not worth it. E (FullResClipLevels=1): worker CPU 56.7 -> 35.7 s, settle 9.6 -> 7.0 s, crossing samples -30%; changes the look, owner's decision. 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
ce6812dbeb
commit
bf22f0ffe0
7 files changed
+356
-36
No files matched your search
@@ -1,6 +1,6 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[ValidateSet('canonical', 'owner', 'probe', 'perf', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'parity', 'horizon', 'horizon-render', 'determinism')]
|
||||
[ValidateSet('canonical', 'owner', 'probe', 'perf', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'parity', 'horizon', 'horizon-render', 'determinism', 'symbolize-stacks')]
|
||||
[string]$Scenario = 'canonical',
|
||||
[switch]$Build,
|
||||
[ValidateSet('owner', 'default')]
|
||||
@@ -9,6 +9,7 @@ param(
|
||||
[string]$TestFilter,
|
||||
[string]$Out,
|
||||
[string]$Label,
|
||||
[string]$StackSamplesPath,
|
||||
[ValidateRange(0, 8)]
|
||||
[int]$HorizonLevel = 5,
|
||||
[ValidateRange(1, 100000)]
|
||||
@@ -1302,7 +1303,7 @@ try {
|
||||
$buildStdout = Join-Path $RunRoot 'Logs\build.stdout.log'
|
||||
$buildError = Join-Path $RunRoot 'Logs\build.err.log'
|
||||
$buildArgs = @(('"{0}"' -f $UbtDll), 'UnrealEditor', 'Win64', 'Development', ('-Project="{0}"' -f $HostProject),
|
||||
'-WaitMutex', '-FromMsBuild', '-architecture=x64', '-NoUBA', '-MaxParallelActions=4',
|
||||
'-WaitMutex', '-FromMsBuild', '-architecture=x64', '-NoUBA', '-ForceHeaderGeneration', '-MaxParallelActions=4',
|
||||
('-Log="{0}"' -f $buildLog))
|
||||
$BuildRecord = Invoke-BuildProcess $buildArgs $buildLog $buildError $buildStdout
|
||||
if ($BuildRecord.status -ne 'passed') { Add-Failure "staged build $($BuildRecord.status)" }
|
||||
@@ -1375,6 +1376,30 @@ try {
|
||||
(Join-Path $RunRoot 'Logs\probe.log') (Join-Path $RunRoot 'Logs\probe.stdout.log') (Join-Path $RunRoot 'Logs\probe.stderr.log')
|
||||
$CommandletMetrics = Get-CommandletMetrics $commandletOut 'owner probe'
|
||||
}
|
||||
'symbolize-stacks' {
|
||||
if (([string]::IsNullOrWhiteSpace($StackSamplesPath)) -or -not (Test-Path -LiteralPath $StackSamplesPath -PathType Leaf)) {
|
||||
throw "-StackSamplesPath must name an existing raw sampler CSV."
|
||||
}
|
||||
$symbolizedOutput = Join-Path $RunRoot 'VoxelStackResolved.tsv'
|
||||
$symbolizeCvars = [ordered]@{
|
||||
symbolizestacks = [IO.Path]::GetFullPath($StackSamplesPath)
|
||||
symbolizedout = $symbolizedOutput
|
||||
}
|
||||
$symbolizeLog = Join-Path $RunRoot 'Logs\symbolize-stacks.log'
|
||||
$args = New-CommonArguments 'commandlet' $symbolizeLog (Merge-Cvars $symbolizeCvars)
|
||||
$commandletLedger = Invoke-UnrealLaunch 'offline-stack-symbolizer' $args `
|
||||
$symbolizeLog (Join-Path $RunRoot 'Logs\symbolize-stacks.stdout.log') `
|
||||
(Join-Path $RunRoot 'Logs\symbolize-stacks.stderr.log')
|
||||
$CommandletMetrics = [ordered]@{
|
||||
status = if (($commandletLedger.status -eq 'passed') -and (Test-Path -LiteralPath $symbolizedOutput -PathType Leaf)) { 'ok' } else { 'missing' }
|
||||
raw_samples = [IO.Path]::GetFullPath($StackSamplesPath)
|
||||
resolved_stacks = $symbolizedOutput
|
||||
log = $symbolizeLog
|
||||
}
|
||||
if ($CommandletMetrics.status -ne 'ok') {
|
||||
Add-Failure 'offline stack symbolizer did not produce the resolved stack table'
|
||||
}
|
||||
}
|
||||
'horizon' {
|
||||
$tracePath = Join-Path $RunRoot 'horizon_trace.jsonl'
|
||||
$baseCvars['voxel.TestRenderDistanceChunks'] = $HorizonRenderDistanceChunks
|
||||
|
||||
Reference in new issue
Block a user