Table of Contents
Phase 1 — goal lock
Locked 2026-05-02. Do not move the goalposts on this row.
One-line goal
On PineTab2 RK3568 + Mali-G52 panfrost + KDE Plasma 6.6.4 Wayland, with one wp_subsurface presenting a NV12 dmabuf at 1080p30 and the parent surface being the Brave UI, KWin's per-frame compositor cost reaches parity with the cage single-surface case.
Binding cells
Reproduced verbatim into metrics.csv row phase1_goal_target for this campaign.
| Cell | Target | Provenance |
|---|---|---|
drops_post_warmup | 0 | Same as ohm_gl_fix Phase 1r — deliberate carry-forward. Brave video element getVideoPlaybackQuality().droppedVideoFrames over 60 s window after 10 s warmup. |
drops_total | ⇐ 10 | Sanity cap. Same source, full 70 s window. |
kwin_wayland_cpu_steady_state | ⇐ cage_baseline + 5pp absolute | NEW for this campaign. Locks intent that the patch must actually move work, not just hide it. Measure via top -b -n 10 -d 1 per ohm_gl_fix A2 methodology. |
route_engaged | Y | Patched KWin still uses the wp_subsurface protocol. No fallback to “treat as regular surface” cheat unless explicit and documented. Verifiable via chrome trace WaylandBufferManagerHost::CommitOverlays count > 80 % of SkiaRenderer::SwapBuffers count over the steady-state window. |
Reference floor (cage baseline)
| Metric | Value | Source |
|---|---|---|
| drops_total | 7 | ohm_gl_fix/phase3_remeasure_2026-05-02/A2_brave_drops_under_cage_2026-05-02T1642Z.log |
| drops_post_warmup | 0 | same |
| kwin_wayland_cage_baseline | TBD | not yet captured — first Phase 3 measurement of this campaign |
The cage measurement above is the reference floor — the locked target against which the patched-KWin numbers are compared. Do NOT import the ohm_gl_fix log directly as this campaign's metric row; re-record under this campaign's measurement protocol (below) to avoid the “AI slop” cross-campaign-sloppiness pattern.
Measurement protocol
For each metric measurement, capture all four cells over ONE 70 s playback session of bbb_1080p30_h264.mp4 autoplay-loop in Brave on the test page (brave_drops_test.html). Per-second getVideoPlaybackQuality() poll yields the per-second drop trajectory; top -b -n 10 -d 1 sampled separately during the steady-state window (t > 30 s) gives kwin_wayland_cpu. Then inspect the chrome trace JSON for CommitOverlays / SwapBuffers ratio to verify route_engaged.
Same protocol for cage baseline + KWin-with-patch.
What changes if we hit the goal
metrics.csv row phase1_goal_actual populated with measured numbers, all four cells passing. Phase 7 verification = an independent reviewer reads the row + the patch + says “yes, this is what was claimed.”
What changes if we don't
Same row populated with measured numbers, at least one cell failing. Phase 7 = honest characterisation of what was achieved and what's left, plus any architecture-level finding that points at “this hardware can't do better with current Mesa/KWin” or “the patch site we picked was wrong, here's the real one.”
Either outcome is acceptable. What is NOT acceptable: moving the cells in this row to make a partial result look like a pass. That's exactly the failure mode this lock guards against.
