====== 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 [[kwin_overlay_subsurface:metrics|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 ===== [[kwin_overlay_subsurface:metrics|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.