Files
marfrit d1285ca2b2 Phase 0: drmprobe findings + A1 corrigendum + worklist update
The drm_info-during-playback probe under Wayland confirmed
KWin IS GL-compositing per frame: Plane 39 rotates triple-
buffered ABGR8888 framebuffers (FB IDs 60/61/66) during
playback. The earlier "0% kwin CPU = direct-scanout" reading
in a1_summary.md was a CPU-blind-spot artifact — Panfrost
shader work isn't visible to top or perf-on-userspace.

Corrigendum added to a1_summary.md preserving the original
text as the on-the-day record.

Worklist: A1 entry updated to point at both summaries.

The probe itself was invasive (drm_info every 3s perturbed
KWin's atomic-commit fast-path, kwin %CPU jumped 0->18 median
and 6 drops appeared) — usable diagnostically but cannot be
embedded in measurement reps.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 18:46:21 +00:00

161 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Work items — x11-session-research
## Governing rule (every phase)
**Campaign-contained data acquisition.** Every measurement
this campaign relies on is acquired in this campaign's
session. Predecessor numbers are reference history, never
imported as binding cells, comparison targets, or success
thresholds. The A1 baseline below is not optional — it is
the in-session Wayland anchor against which X11 cells are
compared. See `phase0_findings.md` § "Campaign-contained data
discipline" and `README.md` § "Campaign-contained data
discipline" for the full rule and the predecessor lesson
that motivated it.
## Phase 0 — substrate + research question + inventory
**Status: IN PROGRESS.** Motivation LOCKED 2026-05-03 in
`phase0_findings.md` § "Research question". Pre-Phase-1
inventory and baseline-anchor work below.
- [x] Predecessor close-out summarised. Substrate doc lists
what transfers from `kwin_overlay_subsurface` and what's
Wayland-specific (KWin source-reads don't transfer to X11
path).
- [x] **Research question locked.** "Does cutting out the
KWin compositor enable faster video display of Brave,
chromium-fourier, and Firefox — for full SW decoding, and
for libva decoding (where possible) — on PineTab2 RK3568?"
- [x] **Mechanism captured.** Operator-supplied insight
2026-05-03: hantro emits NV12, rockchip-drm overlay plane
doesn't accept NV12, so KWin must own the only NV12-capable
plane (Primary, Plane 39) and forces GL-composite of every
NV12 buffer. X11 + non-compositing WM can give the video
region directly to Plane 39 and put rest of desktop on
Plane 45 (RGB AFBC) — hardware-blended, no GL-composite.
- [x] **Experimental matrix drafted.** 3 browsers × 2 decode
paths × 2 sessions = 12 cells (some N/A where libva isn't
supported). See `phase0_findings.md` § "Experimental matrix".
- [x] State snapshot of ohm under current Plasma Wayland.
Captured 2026-05-03 in
`phase0_evidence/wayland_baseline_2026-05-03/01_live_session.txt`
+ `02_predecessor_assets.txt`. Confirmed kwin_wayland 6.6.4 +
qt6-base-fourier 6.11.0-3 + kwin-fourier 6.6.4-3 carry-overs
intact, governor=performance, all three browsers + mpv
installed, predecessor's `run_browser_nodebug.sh` +
parsers + `brave_drops_test.html` test page reusable.
- [x] Inventory of available X11 paths on ohm. Captured
2026-05-03 in `phase0_evidence/x11_inventory_2026-05-03/`
(raw `02_x11_paths.txt` + summary `inventory.md` § "Deliverable 2").
Verdict: xorg-server 21.1.22 + Mesa 26.0.5 / Panfrost healthy,
modesetting (in-server) is sole DDX, only `kwin_x11` WM
installed today, six WM candidates available in extra,
Plasma X11 + Plasma Wayland + Weston are the SDDM-advertised
sessions. Operator action: `pacman -S` a non-compositing WM
(recommend openbox) and create/switch to its SDDM session
before without-KWin cells can run.
- [x] **Browser X11-overlay-path inventory.** Captured
2026-05-03 in
`phase0_evidence/browser_overlay_inventory_2026-05-03.md`
+ acquired-source subtree
`phase0_evidence/chromium_ozone_x11_2026-05-03/` (Chromium
147 from `chromium-builder` LXD CT on boltzmann via the
his subagent). **Decisive verdict at the source level:**
Chromium ozone-x11 instantiates `StubOverlayManager`
(`ozone_platform_x11.cc:262`) — no overlay candidates ever
promoted; Brave 147 + chromium-fourier 149 inherit this
unchanged (their patches don't touch Ozone). Firefox 150
`WindowSurfaceX11{,Image,SHM}` are RGB-only (zero NV12 /
dmabuf / DRI3 / XPresent references in any X11-surface
file). **No browser in the matrix has a code path to
hand NV12 to the X server for plane scanout.** Only mpv
`--vo=xv` does; mpv `--vo=gpu --gpu-context=x11` is the
same GL-composite shape as the browsers. Implication:
campaign's load-bearing hypothesis is structurally
weakened — the X11-vs-Wayland delta the matrix will
measure for browsers is "browser-side GL composite +
X-scanout-of-RGB" vs "browser-side GL composite +
KWin-RGB-recomposite + scanout". mpv-xv becomes the
matrix's only direct test of the original mechanism.
Runtime-engagement probe deferred to Phase 1 first rep
(design sketched in the inventory doc).
- [x] **mpv added as 4th matrix client** 2026-05-03. Two cells
(full SW, libva/v4l2request) × 2 sessions × 2 VOs (`--vo=xv`
and `--vo=gpu --gpu-context=x11`) = 8 reference data points.
README + `phase0_findings.md` § "Experimental matrix"
updated; matrix grew from 12 → 16 cells (+8 mpv VO sub-points).
mpv 0.41.0 already installed via predecessor (see
`phase0_evidence/x11_inventory_2026-05-03/02_x11_paths.txt`).
- [x] Inventory of X11-side measurement instruments. Captured
2026-05-03 in `phase0_evidence/x11_inventory_2026-05-03/`
(raw `04_measurement_instruments.txt` + summary `inventory.md`
§ "Deliverable 4"). Live X server supports all 7 needed
extensions (Composite, DAMAGE, DRI3, Present, RANDR, SYNC,
XVideo). Tools installed: xprop, xdpyinfo, xset, glxinfo,
drm_info, perf, mpv, libxcb-present. Tools missing-but-in-extra:
xrandr CLI, xev, xinput, xwininfo, xkill, sysprof — one
`pacman -S` away. AUR-only: X-protocol `xtrace` (the
`/usr/bin/xtrace` from glibc is a syscall tracer, unrelated);
optional, matrix doesn't strictly need protocol traces.
perf_event_paranoid=2 — set to 1 once for unattended runs.
- [x] **A1 baseline: in-session Wayland-with-KWin anchor.**
Captured 2026-05-03 14:2314:31 CEST in
`phase0_evidence/wayland_baseline_2026-05-03/a1_rep[1-3]/`
+ original verdict in `a1_summary.md` + **corrected
verdict in `drmprobe_findings.md`** (the A1 verdict's
"0 % kwin = direct-scanout, hypothesis weakened" claim was
wrong — see corrigendum at top of `a1_summary.md`).
3 reps tight cluster: drops_total=0, drops_post_warmup=0,
frames_total=1685 (median), kwin %CPU median=0.00. The
drm_info-during-playback probe revealed Plane 39 rotates
triple-buffered ABGR8888 framebuffers — KWin IS GL-
compositing per frame, but the work is GPU-side
(Panfrost) and invisible to top / perf-on-userspace.
**Campaign mechanism is intact.** Phase 1 binding cells
need GPU-aware metrics (panfrost devfreq load, frame
latency via wp_presentation_feedback / XPresent, power
draw) — CPU-only instrumentation will miss the
campaign's mechanism every time.
## Phase 1 — binding cells + measurement protocol
**Pending Phase 0 inventory + A1 baseline anchor.** Phase 1
lock will produce `phase1_lock.md` with:
- Binding cells per matrix cell (effective_fps, drops_total,
drops_post_warmup, end-to-end-latency-if-testable,
compositor+browser CPU at steady state).
- The clear-pass / clear-fail thresholds: what "X11 is faster"
means quantitatively. Thresholds are drawn from the A1
Wayland baseline acquired in *this* campaign — not from
predecessor numbers. Provisional shape (numbers TBD from
A1): a matrix cell counts as "X11 faster" if its effective
fps exceeds the campaign's same-cell Wayland median by a
margin larger than the campaign's same-cell Wayland IQR,
and its drops_post_warmup is materially below the same
cell's Wayland median.
- The measurement protocol per matrix cell, including how the
X11 sessions are entered and how the browser is launched
with libva forced on/off. Mirrors the structure of
`kwin_overlay_subsurface/phase3_protocol.md`.
## Phase 2-onwards
Pending.
## Discipline carry-overs from `kwin_overlay_subsurface`
- *Campaign-contained data acquisition* — see governing rule
at the top of this file. The strongest version of the
predecessor's "replicate the baseline first" lesson:
**don't import predecessor data at all**, acquire it fresh.
- *Phase discipline* — no patches before source-read is
documented. Re-scoping must be honest about deferral target.
- *Non-upstreaming default* — bug reports + MRs are explicit
operator-tasked decisions.
- *Memory persistence rule* — when this campaign reaches its
diagnostic terminal state (success or honest closure), update
`project_campaign_overview.md` and add any new feedback
memory worth carrying forward to the next campaign.