Doc: correct frame-timing tooling — gfxinfo unusable (SurfaceView), use in-app frame deltas

This commit is contained in:
Greg Pomerantz 2026-08-16 13:31:10 -04:00
parent d3d11b5d20
commit 5271092c21

View File

@ -55,7 +55,8 @@ swipe/autocorrect sign-off (the emulator's AOSP/Gboard keyboard is a proxy).
4. **No headless test window** in v0.9 or v0.10 — widget-level Go tests are 4. **No headless test window** in v0.9 or v0.10 — widget-level Go tests are
impossible; on-device e2e is required (§9). impossible; on-device e2e is required (§9).
5. **The dev agent has no vision** (verified) — the emulator debug loop is 5. **The dev agent has no vision** (verified) — the emulator debug loop is
data-based (state dumps, logcat, gfxinfo, PIL/OCR), not screenshot-judgment data-based (state dumps, logcat, in-app frame-delta logs, PIL/OCR), not
screenshot-judgment
(§9.3). (§9.3).
## 3. Current state of the live repo (post housekeeping, 2026-08-16) ## 3. Current state of the live repo (post housekeeping, 2026-08-16)
@ -301,14 +302,20 @@ logging PASS/FAIL to a file the host `adb pull`s and asserts.
Gio renders into one GL surface, so Android's view hierarchy exposes nothing about Gio renders into one GL surface, so Android's view hierarchy exposes nothing about
our UI. The debug loop is data-based — *more* precise than pixels for this codebase. our UI. The debug loop is data-based — *more* precise than pixels for this codebase.
Vision is now enabled and verified in-session (screenshots can be read), but it is Vision is now enabled and verified in-session (screenshots can be read), but it is
only an **auxiliary** check: state dumps, logcat, gfxinfo, and file diffs remain only an **auxiliary** check: state dumps, logcat, in-app frame-delta logs, and
the authoritative correctness signals. file diffs remain the authoritative correctness signals.
1. **State-dump debug flag** (add in Phase 1): debug builds write `app.State` 1. **State-dump debug flag** (add in Phase 1): debug builds write `app.State`
(browser entries, editor text length, cursor px, scroll, dirty, row geometry) (browser entries, editor text length, cursor px, scroll, dirty, row geometry)
as JSON to the app data dir on a magic tap or 2 s interval; host `adb pull`s as JSON to the app data dir on a magic tap or 2 s interval; host `adb pull`s
and asserts. Primary "eyes." and asserts. Primary "eyes."
2. **logcat** — Go panics + our logs. 2. **logcat** — Go panics + our logs.
3. **`dumpsys gfxinfo <pkg>`** — per-frame timing/jank for the 60 fps claims. 3. **Frame timing for the 60 fps claims — `dumpsys gfxinfo` DOES NOT WORK
here (verified 2026-08-16): it reported 0 frames while the app was visibly
rendering, because Pad draws into a `SurfaceView` and gfxinfo only measures
the View-layer pipeline. Use temporary in-app instrumentation instead:
timestamp each frame in the main loop, log deltas, report p50/p90/p99/max.
`screenrecord` is a human artifact, not an agent metric (it captures ~22
fps with encoder-confounded timestamps).
4. **Screenshot → PIL color histogram / tesseract OCR** — coarse on-screen checks. 4. **Screenshot → PIL color histogram / tesseract OCR** — coarse on-screen checks.
5. **File diffs** via `adb pull` — autosave/restore correctness. 5. **File diffs** via `adb pull` — autosave/restore correctness.
6. **Driving**`input tap/swipe/keyevent/text`, `am start/force-stop`, 6. **Driving**`input tap/swipe/keyevent/text`, `am start/force-stop`,