diff options
| author | Adam Malczewski <[email protected]> | 2026-06-15 05:40:30 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-15 05:40:30 +0900 |
| commit | 7a3786a598236a638facf1755fcfcef791131938 (patch) | |
| tree | 56d131099fc3cf47dcfa583e9c5349b830a265ff /packages/ext-layer-shell/src/ext_layer_shell.cpp | |
| parent | e41dbe376820ccbe120b9e27429cccd4345293d0 (diff) | |
| download | unbox-7a3786a598236a638facf1755fcfcef791131938.tar.gz unbox-7a3786a598236a638facf1755fcfcef791131938.zip | |
spike(kernel): Stage-0 perf instrumentation (per-phase split + GPU timer)
Closes out Phase 0 with the measurement that explains the ~30fps: a per-frame
budget breakdown and a non-blocking GPU timer query.
- GlBridge: load EXT_disjoint_timer_query (glGenQueriesEXT/Begin/End/
GetQueryObject*), gated by the GL extension string; report gpu_timer in the
bring-up line. Absent -> graceful 'n/a'.
- PresentTarget::render(ctx, RenderTimings*): time clear/update/render-submit/
present (CPU wall-clock) and bracket ctx->Render() with a 2-deep timer-query
ring read back a frame late, so the REAL GPU fill time is measured without a
glFinish stall. delete_queries in teardown.
- composite_frame: time the import+layout loop; accumulate all phases; emit a
[perf-split] line (per-rendered-frame averages) alongside [perf].
Result (headless 1080p, Haswell+crocus == CF-AX3 GPU class): CPU work ~2ms
(import 0.7 / update 0.7 / render-submit 0.8), GPU fill (ctx->Render) ~10-15ms,
present dominated by the blocking fence wait. -> fill-bound; the whole-output
composite is the wall. Damage limiting is the lever, to be built properly in
the Phase 1 compositor (not hacked into this throwaway). --verify ALL PASS,
kernel suite green.
Diffstat (limited to 'packages/ext-layer-shell/src/ext_layer_shell.cpp')
0 files changed, 0 insertions, 0 deletions
