Phase 0: campaign skeleton, research question pending
Spun off 2026-05-03 from the closed-without-patch kwin_overlay_subsurface campaign (its phase8_handover.md is the predecessor). The candidate research question is whether running an X11 session on PineTab2 reproduces, eliminates, or transforms the drop-inversion phenomenon that motivated the predecessor — but the framing is provisional and awaits operator confirmation before Phase 1 lock. phase0_findings.md is the substrate doc: - Predecessor close-out summary (three reasons no patch landed; replicate-baseline-first lesson). - What stays valid from the predecessor (Phase 1 scanout archaeology, Phase 2-prime KWin Wayland source-read which does NOT transfer to X11, Δ_present-46ms reproducible side-finding which is directly testable under X11, measurement infrastructure with WAYLAND_DEBUG-specific parts that don't transfer). - Current ohm state (carry-over predecessor tooling, governor pin, baloo disabled, kwin-fourier still installed). - Provisional research question with three plausible outcomes (α/β/γ) and four alternate framings the operator may have in mind that this question doesn't cover. - Working-assumption out-of-scope list (no patches, no MRs, no Δ_present chase yet). - Four pre-question Phase 0 deliverables that are unblocked regardless of framing: ohm state snapshot, X11-path inventory, X11 measurement-tool inventory, A1 Wayland-baseline rep on this campaign's session for future comparison anchor. worklist.md tracks Phase 0 only. Phase 1 lock awaits the research question. Discipline carry-overs from kwin_overlay_subsurface listed (replicate baseline first; phase discipline; non-upstreaming default; memory persistence at close). README.md status banner: Phase 0 in progress, research question pending operator confirmation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
upstream/
|
||||||
|
phase*_evidence/**/perf.data
|
||||||
|
phase*_evidence/**/wayland_debug.log
|
||||||
|
phase*_evidence/**/x11_trace.log
|
||||||
|
phase*_evidence/**/top_full.txt
|
||||||
|
phase*_evidence/**/stderr.log
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# x11-session-research
|
||||||
|
|
||||||
|
> **Status: PHASE 0 — research question pending operator
|
||||||
|
> confirmation.** See [`phase0_findings.md`](phase0_findings.md)
|
||||||
|
> § "Research question (provisional)" for the candidate framing
|
||||||
|
> drafted from the predecessor campaign's close-out. Phase 1
|
||||||
|
> lock will not happen before the operator confirms or
|
||||||
|
> redirects.
|
||||||
|
|
||||||
|
Campaign to investigate X11 session behaviour on PineTab2
|
||||||
|
RK3568, in the context of the just-closed
|
||||||
|
[`kwin_overlay_subsurface`](../kwin_overlay_subsurface/)
|
||||||
|
campaign. Whether running an X11 (Xorg) session on the same
|
||||||
|
hardware would (a) reproduce the drop-inversion phenomenon
|
||||||
|
that motivated the predecessor, (b) bypass it entirely, or
|
||||||
|
(c) introduce a different set of constraints, is the most
|
||||||
|
likely campaign question — but this is a working assumption,
|
||||||
|
not a locked goal. See `phase0_findings.md`.
|
||||||
|
|
||||||
|
## Predecessor
|
||||||
|
|
||||||
|
This campaign exists because
|
||||||
|
[`../kwin_overlay_subsurface/`](../kwin_overlay_subsurface/)
|
||||||
|
closed 2026-05-03 without patch (`phase8_handover.md`). Its
|
||||||
|
diagnostic loop terminated at "Phase 0 cage = 0 post-warmup
|
||||||
|
drops floor not reproducible at N=3." The natural next move
|
||||||
|
across the design surface is to vary the display server (X11
|
||||||
|
instead of Wayland) on the same hardware and the same client
|
||||||
|
binary, but the operator has not yet confirmed that as the
|
||||||
|
campaign's specific question.
|
||||||
|
|
||||||
|
## Hardware target (provisional, same as predecessor)
|
||||||
|
|
||||||
|
ohm — PineTab2, Rockchip RK3568 (4× Cortex-A55, Mali-G52 MP2,
|
||||||
|
hantro G1/G2 VPU). Kernel `6.19.10-danctnix1-1-pinetab2`.
|
||||||
|
Mesa 26.0.5. Currently runs KDE Plasma 6.6.4 Wayland.
|
||||||
|
|
||||||
|
For an X11-session campaign, ohm needs an Xorg + Plasma X11 (or
|
||||||
|
similar X11 desktop) install path verified. As of 2026-05-03,
|
||||||
|
the only confirmed display path on ohm is
|
||||||
|
`startplasma-wayland`. **Whether Plasma X11, an alternate X11
|
||||||
|
desktop (XFCE, openbox, lightweight WM), or Plasma running
|
||||||
|
under a Wayland-Xorg shim is in scope is part of the research
|
||||||
|
question to be locked.**
|
||||||
|
|
||||||
|
## Carry-overs from predecessor (still active on ohm)
|
||||||
|
|
||||||
|
Per `kwin_overlay_subsurface/phase1_evidence/ohm_tooling_revert_log.md`:
|
||||||
|
|
||||||
|
- `qt6-base-fourier 1:6.11.0-3` installed.
|
||||||
|
- `kwin-fourier 1:6.6.4-3` installed.
|
||||||
|
- CPU governor pinned to `performance` (was `conservative`).
|
||||||
|
- Baloo permanently disabled
|
||||||
|
(`Indexing-Enabled=false` in `~/.config/baloofilerc`).
|
||||||
|
- `drm-info 2.9.0-1` installed.
|
||||||
|
|
||||||
|
These were not reverted at the predecessor's close-out. This
|
||||||
|
campaign inherits them unless an explicit revert is part of
|
||||||
|
the design.
|
||||||
|
|
||||||
|
## Non-upstreaming default
|
||||||
|
|
||||||
|
Inherited from the predecessor and from `ohm_gl_fix`. Bug
|
||||||
|
reports + MRs are explicit operator-tasked decisions, not
|
||||||
|
background process steps.
|
||||||
|
|
||||||
|
## File map (will grow)
|
||||||
|
|
||||||
|
| File | What it is |
|
||||||
|
|---|---|
|
||||||
|
| `README.md` | This file. |
|
||||||
|
| `phase0_findings.md` | Substrate from the predecessor + the candidate research question. **Awaits operator confirmation/redirect on the question itself.** |
|
||||||
|
| `worklist.md` | Phase-by-phase task list. Phase 0 only as of campaign start. |
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
# Phase 0 — substrate and provisional research question
|
||||||
|
|
||||||
|
This is the campaign's Phase 0 substrate doc: what we already
|
||||||
|
know from the predecessor `kwin_overlay_subsurface` close-out,
|
||||||
|
what's open, and what the candidate research question looks
|
||||||
|
like. **The research question is provisional and awaits
|
||||||
|
operator confirmation before Phase 1 lock.**
|
||||||
|
|
||||||
|
## Predecessor close-out summary
|
||||||
|
|
||||||
|
[`../kwin_overlay_subsurface/phase8_handover.md`](../kwin_overlay_subsurface/phase8_handover.md)
|
||||||
|
(closed 2026-05-03 without patch). Three independent reasons
|
||||||
|
no patch landed:
|
||||||
|
|
||||||
|
1. The campaign's locked Phase 1 reference floor
|
||||||
|
(`drops_post_warmup == 0` from cage) is unreachable at N=3
|
||||||
|
today. Today's median is 26 post-warmup with the same
|
||||||
|
chromium-fourier binary, same hardware, same kernel, same
|
||||||
|
Mesa, same kwin-fourier — KWin direct reproduces Phase 0's
|
||||||
|
29 post-warmup, but cage now also drops ~22-56 post-warmup
|
||||||
|
instead of Phase 0's 0.
|
||||||
|
2. The campaign's surface-of-investigation
|
||||||
|
(`wp_subsurface` overlay route) is not engaged by
|
||||||
|
`brave_drops_test.html`. Chromium-fourier renders the video
|
||||||
|
element via internal compositing into its main browser
|
||||||
|
window surface — a single-surface case.
|
||||||
|
3. The Phase 2 hot-path hypothesis
|
||||||
|
(`glEGLImageTargetTexture2DOES` dominates `kwin_wayland`'s
|
||||||
|
per-frame cost) was rejected by Phase 3 perf measurement
|
||||||
|
with 100×-margin on the wrong side of the threshold.
|
||||||
|
|
||||||
|
The diagnostic loop terminated at "the campaign's premise was
|
||||||
|
N=1 to begin with, and the N=3 in-session re-measurement
|
||||||
|
doesn't replicate it." This is filed as a feedback memory:
|
||||||
|
*replicate the N=1 baseline at N=3 in the same session BEFORE
|
||||||
|
building multi-phase infrastructure around it*.
|
||||||
|
|
||||||
|
## What stays valid from the predecessor
|
||||||
|
|
||||||
|
Durable substrate listed in
|
||||||
|
`kwin_overlay_subsurface/phase8_handover.md` § "What's left
|
||||||
|
for a future session to pick up":
|
||||||
|
|
||||||
|
- **Phase 1 scanout-promotion archaeology** (rockchip-drm
|
||||||
|
RK3568 plane format/modifier table, KWin v6.6.4 promotion
|
||||||
|
predicate). Plane 39 (Primary, NV12 LINEAR) is the GL
|
||||||
|
framebuffer; Plane 45 (Overlay) does not advertise NV12 in
|
||||||
|
any modifier. Both KWin scanout-promotion paths are
|
||||||
|
structurally rejected for windowed Brave on this DRM driver.
|
||||||
|
This holds regardless of display server.
|
||||||
|
- **Phase 2 H1 file:line** in
|
||||||
|
`kwin_overlay_subsurface/phase2_source_findings.md`. Cold
|
||||||
|
per Phase 3 measurement; informational only.
|
||||||
|
- **Phase 2-prime Shape C source-read** of
|
||||||
|
`Display::dispatchEvents` and `TransactionFence` in KWin's
|
||||||
|
`src/wayland/`. Specific to the Wayland path; **not relevant
|
||||||
|
to an X11-session campaign**. The X11 path uses different
|
||||||
|
KWin surface plumbing (`kwin_x11`) and a different per-frame
|
||||||
|
protocol (X11 Composite extension + Damage + XPresent), not
|
||||||
|
Wayland protocol dispatch.
|
||||||
|
- **Δ_present-46 ms reproducible side-finding** under Plasma
|
||||||
|
Wayland. Across all measured conditions (chromium-fourier on
|
||||||
|
KWin, chromium-fourier in cage, stock Brave on KWin), median
|
||||||
|
Δ_present was 41-46 ms on a 60 Hz panel — a stable
|
||||||
|
~2.7-vsync queue depth. This finding is independent of the
|
||||||
|
cage breakdown and **directly testable under X11** as a
|
||||||
|
comparison point.
|
||||||
|
- **Measurement infrastructure**:
|
||||||
|
`kwin_overlay_subsurface/scripts/wayland_debug_to_csv.py`
|
||||||
|
(libwayland 1.21+ format, 17 unit tests passing) +
|
||||||
|
`phase3_prime_runs/run_browser.sh` orchestrator on ohm
|
||||||
|
(handles `WAYLAND_DEBUG=1` capture, perf record, top
|
||||||
|
sampling, drops trajectory extraction, kill-cleanly). **The
|
||||||
|
WAYLAND_DEBUG portion does not apply under X11**; an X11
|
||||||
|
equivalent would be different tooling (`xtrace`, `xev`, or
|
||||||
|
XCB-debug instrumentation if the client emits any). The
|
||||||
|
perf+top+drops capture portion remains usable under X11
|
||||||
|
unchanged.
|
||||||
|
|
||||||
|
## Current ohm state (carry-over from predecessor)
|
||||||
|
|
||||||
|
Per `kwin_overlay_subsurface/phase1_evidence/ohm_tooling_revert_log.md`,
|
||||||
|
not reverted at predecessor close-out:
|
||||||
|
|
||||||
|
- `qt6-base-fourier 1:6.11.0-3`
|
||||||
|
- `kwin-fourier 1:6.6.4-3` (Wayland-side compositor; not in
|
||||||
|
the hot path under an X11 session)
|
||||||
|
- `mesa 1:26.0.5-1`
|
||||||
|
- CPU governor pinned to `performance`
|
||||||
|
- Baloo permanently disabled
|
||||||
|
- `drm-info 2.9.0-1`
|
||||||
|
- Active session: `startplasma-wayland` on tty2,
|
||||||
|
`kwin_wayland` PID 3927 (as of 2026-05-03 03:05 UTC).
|
||||||
|
- Browser binaries available: `/tmp/chromium-ohm-gl-fix-step2/chrome`
|
||||||
|
(chromium-fourier, Step 1 + Step 2 patches, 149.0.7812.0),
|
||||||
|
`/usr/bin/brave` (`brave-bin 1:1.89.145-1`).
|
||||||
|
|
||||||
|
If this campaign needs to switch ohm to an X11 session, that
|
||||||
|
is a session-level operator action (logout, switch via SDDM,
|
||||||
|
log back in). It cannot be done unattended.
|
||||||
|
|
||||||
|
## Research question (provisional — awaits operator confirmation)
|
||||||
|
|
||||||
|
**Candidate framing**, not locked:
|
||||||
|
|
||||||
|
> *"On PineTab2 RK3568 with the same chromium-fourier binary,
|
||||||
|
> the same `bbb_1080p30_h264.mp4` 30 fps source clip, and the
|
||||||
|
> same `brave_drops_test.html` instrumented page, does running
|
||||||
|
> an X11-session display server (Plasma X11, or an alternative
|
||||||
|
> X11 desktop) reproduce the drop-inversion phenomenon that
|
||||||
|
> motivated `kwin_overlay_subsurface`, eliminate it, or
|
||||||
|
> introduce a different drop characteristic?"*
|
||||||
|
|
||||||
|
This is the most narrowly relevant question given the
|
||||||
|
predecessor's close-out. Three plausible outcomes:
|
||||||
|
|
||||||
|
- **(α)** X11 reproduces low post-warmup drops (matches Phase 0
|
||||||
|
cage = 0 floor): isolates the dropped-frames mechanism to
|
||||||
|
the Wayland compositor stack on this hardware. The original
|
||||||
|
campaign's framing was correct in spirit but the cage
|
||||||
|
comparison was confounded; X11 becomes the better
|
||||||
|
comparator.
|
||||||
|
- **(β)** X11 has comparable or higher post-warmup drops: the
|
||||||
|
drop phenomenon is hardware/kernel/Mesa-bound and does not
|
||||||
|
localise to the display-server stack at all. Predecessor's
|
||||||
|
Phase 8 closure stands; the X11 measurement is the
|
||||||
|
decisive cross-check.
|
||||||
|
- **(γ)** X11 has a different failure mode entirely (different
|
||||||
|
drop pattern, different perf hot symbols, different effective
|
||||||
|
fps): each finding is its own characterisation; the
|
||||||
|
campaign becomes "what does running X11 on this hardware
|
||||||
|
look like end-to-end."
|
||||||
|
|
||||||
|
**Alternate framings** the operator may have in mind that
|
||||||
|
this provisional question doesn't cover:
|
||||||
|
|
||||||
|
- *Daily-driver fitness*: "Can I use X11 instead of Wayland on
|
||||||
|
this device for everyday browser/video/desktop work, and
|
||||||
|
what works/breaks?" — different scope; less measurement-heavy,
|
||||||
|
more workflow-oriented.
|
||||||
|
- *Specific X11-only feature investigation*: composite
|
||||||
|
redirection, XRender, GLAMOR, Xinerama on a single-display
|
||||||
|
device, etc.
|
||||||
|
- *XWayland behaviour*: many Linux desktops run X11 clients
|
||||||
|
under Wayland via XWayland. If an "X11 session" really means
|
||||||
|
"test under XWayland to compare with native Wayland", the
|
||||||
|
measurement is fundamentally different.
|
||||||
|
- *Power consumption / thermal*: X11 vs Wayland on a passively
|
||||||
|
cooled tablet may differ in idle CPU and thermal envelope.
|
||||||
|
Different metric set.
|
||||||
|
|
||||||
|
**Operator decision needed before Phase 1**:
|
||||||
|
|
||||||
|
1. Which question is in scope? (drop phenomenon, daily-driver,
|
||||||
|
feature-specific, XWayland-vs-native, power, or something
|
||||||
|
else).
|
||||||
|
2. What "X11 session" means specifically: native Xorg + Plasma
|
||||||
|
X11; native Xorg + lightweight WM (e.g. openbox / i3 / xfwm);
|
||||||
|
XWayland under the existing Plasma Wayland session; or
|
||||||
|
another configuration.
|
||||||
|
3. What the success/failure criteria look like (binding cells,
|
||||||
|
`metrics.csv` shape).
|
||||||
|
|
||||||
|
Until those are answered, Phase 0 documents the question space
|
||||||
|
and Phase 1 does not lock.
|
||||||
|
|
||||||
|
## What's NOT in scope (working assumption)
|
||||||
|
|
||||||
|
Until the research question is confirmed, the following are
|
||||||
|
treated as out of scope so they don't slip into Phase 1
|
||||||
|
prematurely:
|
||||||
|
|
||||||
|
- Patches to KWin, Xorg, kwin-fourier, qt6-base-fourier, or any
|
||||||
|
other component on ohm. This is **research**, not
|
||||||
|
patch-development. Per non-upstreaming default, MR/bug-report
|
||||||
|
filing is explicitly tasked and not scheduled here.
|
||||||
|
- The Δ_present-46 ms finding's investigation. It's a known
|
||||||
|
hook from the predecessor; whether this campaign chases it
|
||||||
|
depends on the locked research question.
|
||||||
|
- Reverting predecessor tooling state. Governor, baloo,
|
||||||
|
`qt6-base-fourier`, `kwin-fourier` stay as-is unless the
|
||||||
|
operator decides otherwise.
|
||||||
|
- File a bug for any of the predecessor's three documented
|
||||||
|
candidate findings. Same non-upstreaming default applies.
|
||||||
|
|
||||||
|
## What Phase 0 will deliver, regardless of framing
|
||||||
|
|
||||||
|
Even before the research question is locked, the following are
|
||||||
|
useful Phase 0 deliverables that don't depend on the specific
|
||||||
|
question:
|
||||||
|
|
||||||
|
1. **State snapshot of ohm under current Plasma Wayland**
|
||||||
|
captured at campaign start. This is the *before* photo for
|
||||||
|
any future X11 vs Wayland comparison. Unattended-tractable
|
||||||
|
(just scripted SSH).
|
||||||
|
2. **Inventory of available X11 paths on ohm**: what packages
|
||||||
|
are installed, what session candidates SDDM advertises,
|
||||||
|
what would need to be installed to enable a Plasma X11
|
||||||
|
session, what alternate WMs are available. Read-only,
|
||||||
|
unattended-tractable.
|
||||||
|
3. **Inventory of measurement instruments that work under
|
||||||
|
X11**: `xtrace`, `xprop`, `xrandr --verbose --query`, perf
|
||||||
|
on `Xorg` PID, frame-timing extraction options. Read-only.
|
||||||
|
4. **A1 baseline** under current Plasma Wayland: re-run a
|
||||||
|
single rep of the predecessor's `kwin_timing_nodebug`
|
||||||
|
condition immediately at the start of this campaign, so
|
||||||
|
the comparison Wayland-vs-X11 has a same-session anchor.
|
||||||
|
This is the "set the baseline before instrument changes"
|
||||||
|
discipline from `feedback_replicate_baseline_first.md`.
|
||||||
|
|
||||||
|
These steps are unblocked. They don't commit to a specific
|
||||||
|
research question and they produce evidence that's useful
|
||||||
|
under any of the candidate framings.
|
||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
# Work items — x11-session-research
|
||||||
|
|
||||||
|
## Phase 0 — substrate + research question framing
|
||||||
|
|
||||||
|
**Status: IN PROGRESS.** Substrate doc landed
|
||||||
|
(`phase0_findings.md`). Research question is provisional,
|
||||||
|
awaits operator confirmation. Pre-question Phase 0 deliverables
|
||||||
|
listed below are unblocked.
|
||||||
|
|
||||||
|
- [x] Predecessor close-out summarised. Substrate doc
|
||||||
|
(`phase0_findings.md`) lists what stays valid from
|
||||||
|
`kwin_overlay_subsurface`, what's specific to Wayland and
|
||||||
|
doesn't transfer, and three plausible outcome shapes (α/β/γ)
|
||||||
|
for the candidate research question.
|
||||||
|
- [ ] **Operator confirms the research question.** Three
|
||||||
|
candidate framings + four alternates are listed in
|
||||||
|
`phase0_findings.md` § "Research question (provisional)".
|
||||||
|
Pick one (or correct the framing) before Phase 1.
|
||||||
|
- [ ] State snapshot of ohm under current Plasma Wayland —
|
||||||
|
the campaign-start *before* photo. Unattended-tractable.
|
||||||
|
- [ ] Inventory of available X11 paths on ohm: installed
|
||||||
|
packages, SDDM-advertised sessions, alternate WMs,
|
||||||
|
XWayland availability. Read-only.
|
||||||
|
- [ ] Inventory of measurement instruments that work under
|
||||||
|
X11. `xtrace`, frame-timing tooling, perf on Xorg PID, etc.
|
||||||
|
Read-only.
|
||||||
|
- [ ] A1 baseline: 1× `kwin_timing_nodebug`-equivalent run
|
||||||
|
on current Plasma Wayland session, captured into
|
||||||
|
`phase0_evidence/wayland_baseline_rep1/`. Same-session
|
||||||
|
anchor for any future X11 comparison.
|
||||||
|
|
||||||
|
## Phase 1 — locked research question + binding cells
|
||||||
|
|
||||||
|
**Pending operator confirmation of the Phase 0 question.**
|
||||||
|
Phase 1 lock will produce `phase1_lock.md` with binding cells
|
||||||
|
specific to whichever framing is locked.
|
||||||
|
|
||||||
|
## Phase 2-onwards
|
||||||
|
|
||||||
|
Pending.
|
||||||
|
|
||||||
|
## Discipline carry-overs from `kwin_overlay_subsurface`
|
||||||
|
|
||||||
|
- *Replicate the baseline first* — per
|
||||||
|
`feedback_replicate_baseline_first.md`. Phase 0 task "A1
|
||||||
|
baseline" exists specifically because of this lesson; do not
|
||||||
|
skip it.
|
||||||
|
- *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.
|
||||||
Reference in New Issue
Block a user