Follow-up to #306 and #316, surfaced by two live MCP perf-diagnosis sessions (2026-07-02,
Sponza CSM/atrium, Dist build) run against the real-GPU-timings tooling from #517. Tracks
the remaining perf-diagnostics gaps that are neither scriptable-repro-setup (#316 Part 5)
nor part of #306's now-complete write-consent epic.
New tool wanted
Accuracy bugs in the #517 GPU-timing tooling (diagnosed, not fixed)
Root-caused during a heavy-GPU-load session (frame >250 ms, Sponza atrium, Dist, maximized
viewport) — surfaced in the #316 comment thread (2026-07-02/07-03 live perf sessions):
Missing debug view
Smaller findings
Status — updated 2026-07-07
olo_perf_cpu_scopes (#537), the overdraw debug view (#558), and all three GPU-timing
accuracy bugs (#571) have shipped. The feature/mcp-perf-scenepass-tooling branch
referenced in earlier updates landed through those same PRs and no longer exists as a
separate branch. Remaining scope is just the two "Smaller findings" above (boot
inconsistency, first-write-after-load not taking effect) — everything else in this issue
is done.
Refs: #306, #316, #517.
Score
capability: 3
craft: 1
stability: 2
decay: 1
effort: 2
confidence: 0.8
learning: 3
fun: 3
kano: table-stakes
blocked_by: []
blocks: []
Rated per issue-scoring · score = confidence × (capability + craft + stability + decay) / effort, derived by the picker.
Follow-up to #306 and #316, surfaced by two live MCP perf-diagnosis sessions (2026-07-02,
Sponza CSM/atrium, Dist build) run against the real-GPU-timings tooling from #517. Tracks
the remaining perf-diagnostics gaps that are neither scriptable-repro-setup (#316 Part 5)
nor part of #306's now-complete write-consent epic.
New tool wanted
olo_perf_cpu_scopes— exposePerformanceProfilerper-scope CPU timings (everysystem in
Scene.cppis wrapped inOLO_PERF_SCOPE) over MCP, read-only. Today thisdata only reaches the editor Statistics panel, and
OLO_PERF_SCOPEis compiled outentirely in Dist, so a Dist session has zero CPU-scope visibility (frame totals only).
Shipped in Add olo_perf_cpu_scopes MCP tool for per-scope CPU timings (#519, first slice) #537.
Accuracy bugs in the #517 GPU-timing tooling (diagnosed, not fixed)
Root-caused during a heavy-GPU-load session (frame >250 ms, Sponza atrium, Dist, maximized
viewport) — surfaced in the #316 comment thread (2026-07-02/07-03 live perf sessions):
cpuMsexceedsframeTimeMsat saturation (e.g. cpu 905 ms vs frame 519 ms).Root cause:
RendererProfilermeasuresm_FrameTimeatBeginFrame(previousframe-boundary delta) but
m_CPUTimeatEndFrame(current bracket), and the MCPsnapshot reads
m_CurrentFramemid-frame — the two numbers describe differentframes whenever frame times swing.
gpuWaitMsreads 0.00 even when the GPU is the bottleneck by ~100x. Only theFrameResourceManager::BeginFramefence wait is attributed; under deep GPU backlogsthe real stall lands in
SwapBuffers, outside the profiler bracket entirely (and theeditor's over-budget render throttle further suppresses fence waits).
native vs 0.59 ms at 1080p vs 4.3 ms at 4K with a fixed camera — shadow cost cannot
depend on viewport resolution).
GPUPassTimerPoolhas a 4-slot timestamp ring; whenthe GPU falls more than 3 frames behind, slots are dropped rather than awaited and
published results go stale.
gpuResultsAgeFrames(already in the payload) is thehonesty signal to check before trusting numbers on very long frames — worth
surfacing more prominently (e.g. a warning flag) rather than requiring the caller to
know to check it.
Missing debug view
olo_render_set_debug_view(only ssao/gtao/ssr/ssgiexist today). An overdraw heatmap mode (per-fragment counting target + heatmap
composite) would make "how many layers deep is this frame" measurable directly
instead of inferred from A/B toggling passes. Deliberately scoped out of the
overdraw work's own PR to keep it reviewable — it's a real renderer feature, not
a tooling patch.
Smaller findings
on, becauseForwardPlusAutoSwitchdefaults true) disagrees with the live boot state (off) —ApplyRendererSettingsnever runs at startup, so settingdepthprepass=autoimmediately after boot changes the state instead of no-oping.
(repeatable A/B afterwards) — likely an editor-settle/render-throttle transient;
worth a beat of settle time after load before trusting the first A/B reading.
Status — updated 2026-07-07
olo_perf_cpu_scopes(#537), the overdraw debug view (#558), and all three GPU-timingaccuracy bugs (#571) have shipped. The
feature/mcp-perf-scenepass-toolingbranchreferenced in earlier updates landed through those same PRs and no longer exists as a
separate branch. Remaining scope is just the two "Smaller findings" above (boot
inconsistency, first-write-after-load not taking effect) — everything else in this issue
is done.
Refs: #306, #316, #517.
Score
Rated per issue-scoring · score = confidence × (capability + craft + stability + decay) / effort, derived by the picker.