Docs (P15): Espryt BSL depth-copy and attachment-shadow items measured on device, no gain (x 51.4 vs b 51.9 fps, MobileGlues 55.8); not landed.

This commit is contained in:
2026-10-09 18:26:42 -04:00
parent cee9178e22
commit e9201891f5
2 changed files with 36 additions and 7 deletions
+22 -7
View File
@@ -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.
@@ -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.