diff --git a/docs/Disaggregated/notes/perf-p15/HANDOFF.md b/docs/Disaggregated/notes/perf-p15/HANDOFF.md index ae30a88b..412199ac 100644 --- a/docs/Disaggregated/notes/perf-p15/HANDOFF.md +++ b/docs/Disaggregated/notes/perf-p15/HANDOFF.md @@ -30,7 +30,19 @@ The plan and its measurements are in [PLAN-P15.md](PLAN-P15.md); the audit is in - ca0a3b74, a cherry-pick of the coordinator's LTO commit 190580f2 on `build-opt`. The coordinator pushes 190580f2, so drop ca0a3b74 when rebasing. - a0015bad, Magma 2a + 2b. Its message carries the m2ab result, or says it is pending. -- `wip/espryt-depthcopy` (eb7572ff, on p15impl): the two Espryt BSL GPU items. +- `wip/espryt-depthcopy-measured` (the two Espryt BSL GPU items rebased onto origin 9f610167, with the + device numbers in its message; the old `wip/espryt-depthcopy` eb7572ff is the unmeasured original). + **Measured 2026-10-09 on device, NOT landed: no gain on BSL.** x = with both items, b = without, both + LTO builds of origin 9f610167; gpuhunt, 3 VALID reps each, one arm per cooldown: + - BSL: x 51.4 fps (0.921 of MobileGlues 55.8), b 51.9 (0.930); GPU 100 % busy in all runs, GPU + 19.45 vs 19.29 ms/frame (MobileGlues 17.88). The target of 0.95 is not reached; the items are neutral. + - Vanilla cpuhunt check (Espryt monolith): x 248.5 fps / 2.87 ms GL CPU, b 254.0 / 2.83 (-2.2 % fps, + within noise; no CPU regression worth the name, but no gain). + - Engaged: the simpleperf profile of the BSL render thread shows `BlitDepthTexture2D` 0.100 ms/frame in + b and gone in x; `FramebufferImpl::SyncToBackendByHandle` 0.178 -> 0.162. The saved CPU is hidden by the + GPU-bound frame, and the GPU time per frame did not move, so the Espryt BSL gap is not in these + items. See SCOREBOARD (ebbsl). + Original description: - (1) Depth glCopyImageSubData goes to the driver (ES 3.2 / EXT/OES_copy_image), with the scratch-FBO depth blit as fallback. Knob MOBILEGL_ESPRYT_NATIVE_DEPTH_COPY. - (2) A per-point attachment shadow on the Espryt FBO twin skips an attach call for a point that already @@ -40,9 +52,8 @@ The plan and its measurements are in [PLAN-P15.md](PLAN-P15.md); the audit is in the split arms. Red-once: a shifted native copy fails all DepthCopyImage cases on DirectGLES; dropping Level from the shadow key fails the level case; keying on the driver id alone fails the recycled-name case. - - Host suites are at baseline. **Not measured on device.** - - Next step: run `scratchpad/p15/espg_job.sh.next` (Espryt BSL, one arm per cooldown, e/b - interleaved). Target: Espryt BSL ≥ 0.95 of MobileGlues (now about 0.92). + - Host suites: 1672 DirectGLES ctest entries (monolith + Split) pass serially in WSL (362 skipped by + design), including DepthCopyImage, AttachmentReattach, PassOrder and every blit case. - `wip/api29-switch` (42922d21, on p15impl): `-Pmobilegl.androidApi=29` in build.gradle and the plugin's build.gradle.kts. - It sets minSdk 29 and therefore ANDROID_PLATFORM android-29; the plugin gets the `.api29` id suffix @@ -108,13 +119,17 @@ The plan and its measurements are in [PLAN-P15.md](PLAN-P15.md); the audit is in - Linux/anland; - the Windows WGL drop-in; - build options, user-facing knobs and troubleshooting. -3. Espryt BSL GPU items (`wip/espryt-depthcopy`): device A/B, then commit to p15impl with numbers. +3. DONE 2026-10-09: Espryt BSL GPU items (`wip/espryt-depthcopy-measured`): device A/B measured, no gain, + not landed (see above and SCOREBOARD ebbsl). The Espryt BSL gap to MobileGlues (0.92) is still open; + the next lead is the GPU side (render-stage trace of Espryt vs MobileGlues passes), not driver calls. 4. Small CPU batch: ValidateForVerb residue, Tracker::Update (0.018, mostly inherent), EmitGlobalConstants (0.026). Expected ≤0.03 ms in total. 5. API 29 build plus its A/B (`wip/api29-switch`). 6. Smaller follow-ups: - - `bench_session.sh stop` (via devjob2) restores the services and caps but leaves the clocks - pinned. It should also run `pin_clocks.sh restore`. + - DONE 2026-10-09: `bench_session.sh stop` now runs `pin_clocks.sh restore` first (verified over a + 17-session run: max clocks back to stock after every session, daemons running, no session file). + The scratchpad `devjob2.sh` / `fcl_bench.sh` hard-code the p15 worktree's copy of the harness; + point them at a tree that has this commit. - The `Fatal{UnmigratedSurface, "AndroidNativeWindow@P12"}` text and the tests asserting on it still point at P12. The rule is permanent: a client window cannot cross processes, so windowed spawn uses `MOBILEGL_IPC_SURFACE=server`. Reword the message to say that. diff --git a/docs/Disaggregated/notes/perf-p15/SCOREBOARD.md b/docs/Disaggregated/notes/perf-p15/SCOREBOARD.md index 682839f6..ac69ba3c 100644 --- a/docs/Disaggregated/notes/perf-p15/SCOREBOARD.md +++ b/docs/Disaggregated/notes/perf-p15/SCOREBOARD.md @@ -124,6 +124,20 @@ H2 sessions: the 578 MHz pin. - A window-scoped validity check (freqcheck over the measure_raw.txt span) would admit them. That is a harness change, not yet made. +- **ebbsl (gpuhunt, Iris + BSL, Espryt monolith, 3 reps, one arm per cooldown, all VALID):** the two parked + Espryt GPU items (native depth glCopyImageSubData, attachment shadow) do not help. Builds: x = origin + 9f610167 + the items, b = origin 9f610167, both LTO; MobileGlues is the plugin. + - fps r1 / r2 / r3: x 51.4 / 51.3 / 51.5 (mean 51.4), b 52.7 / 51.8 / 51.0 (51.9), MobileGlues 56.5 / 55.6 / 55.3 (55.8). + Ratio to MobileGlues: x 0.921, b 0.930 (x vs b -1.0 %, noise). Target 0.95 not reached. + - GPU: busy 100 % in every run; union of kgsl cmdbatch intervals per frame (x / b / MobileGlues) + 19.45 / 19.29 / 17.88 ms, 1.04 cmdbatches per frame in all three. + - Device state: gpuhunt (CPU 2380/1689 MHz, GPU 578 MHz; in-window min = max for every policy), tpl=6 + thr=0, peak CPU 75.5-79.4 C, GPU 63.2-65.9 C, skin 42.4-44.5 C, daemons stopped(5), swap=false, anland off. + - Engagement (one simpleperf run each, render thread): `BlitDepthTexture2D` 0.100 ms/frame in b, gone in x; + Espryt `CopyImageSubData` 0.115 -> 0.072; `SyncToBackendByHandle` 0.178 -> 0.162. + - Vanilla cpuhunt (1500/1250/903 MHz, 3 reps, all VALID, peak CPU 58 C): Espryt monolith GL CPU x 2.87, + b 2.83 ms/frame; fps x 249.9 / 251.4 / 244.2 (248.5), b 250.1 / 256.5 / 255.2 (254.0), GPU busy 17 %. + - Not landed: wip/espryt-depthcopy-measured. The BSL frame is GPU-bound and its GPU time did not move. - **fbm:** the first memo is within noise on both backends (CPU 2.65 / 2.65 Magma, 3.04 / 3.04 Espryt). - It engaged only partly: Magma BuildFramebufferState 0.058 -> 0.032 ms/frame, and Espryt kept missing. - The build only runs on a binding switch, so one entry per target misses on every A/B/A switch.