User Tools

Site Tools


kwin_overlay_subsurface:phase1_lock

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.

kwin_overlay_subsurface/phase1_lock.txt · Last modified: by markus_fritsche