User Tools

Site Tools


fourier:attribution_2026-05-03

This is an old revision of the document!


Table of Contents

fourier_attribution — Phase 5 review (2026-05-03)

Single-question matrix campaign. Operator: mfritsche. Reviewer: handover to fresh model instance per 8(+1)-phase loop Phase 5. Local artifacts: /home/mfritsche/src/fourier_attribution/ on noether.

Predecessors (substrate, NOT data): ohm_gl_fix (closed 2026-05-02), kwin_overlay_subsurface (closed 2026-05-03 without patch), x11-session-research (closed 2026-05-03 negative on both axes). This campaign acts on the replicate-baseline-first lesson — every binding cell number from in-session reps.

README (campaign overview, uncurated)

fourier_attribution

Single-question campaign on PineTab2 RK3568: for each of qt6-fourier, kwin-fourier, and chromium-fourier, is there a measurable, replicable benefit on bbb 1080p first-60s playback when that package is toggled off, vs the all-on baseline?

Spun off 2026-05-03 from the fourier umbrella, with strict scope discipline. The earlier fourier work (now dormant at ~/src/fourier/) digressed into fix-this-fix-that across browsers, mpv, libva, libplacebo, KWin, qt6, and kernel; this campaign separates wheat from chaff by attribution measurement under controlled package toggling.

In-scope

  • Hardware: ohm (PineTab2 — RK3568, Mali-G52 MP2, hantro G1/G2 VPU)
  • Workload: `bbb_1080p30_h264.mp4` first 70 seconds via `brave_drops_test.html`
  • Three Arch packages: `qt6-base-fourier`, `kwin-fourier`, `chromium-fourier`

(chromium-fourier in this campaign = the binary at /tmp/chromium-ohm-gl-fix-step2/chrome — ohm_gl_fix Step 1 + Step 2 patches)

  • Single Wayland session — Plasma 6.6.4 with KWin compositor

Out-of-scope (would have qualified before, scope-policed now)

  • Any other fourier-flavoured patches (firefox-fourier, kernel-vb2-dma-resv, libva-v4l2-request port)
  • Any patch authoring or upstream activity
  • X11 sessions / non-compositing WMs (closed in `x11-session-research`)
  • Δ_present-46ms side-finding (predecessor's hook; not the question here)
  • mpv, gst-launch, or any non-browser client
  • Other clips, other resolutions, other codecs

Predecessors (substrate, NOT data)

This is the fourth campaign in a chain on the same hardware target:

  1. [`../ohm_gl_fix/`](../ohm_gl_fix/) — closed 2026-05-02. Diagnosed Step 1 (libva-v4l2-request port) and Step 2 (Chromium WaylandConnection overlay-route) issues; produced the `/tmp/chromium-ohm-gl-fix-step2/chrome` binary used here.
  2. [`../kwin_overlay_subsurface/`](../kwin_overlay_subsurface/) — closed 2026-05-03 *without patch*. Premise (cage = 0 floor at N=1) didn't replicate at N=3. Lesson now codified in `feedback_replicate_baseline_first.md`.
  3. [`../x11-session-research/`](../x11-session-research/) — closed 2026-05-03 *with negative result on both axes*. X11 + non-compositing WM is *worse* than Plasma Wayland on this hardware/workload; X server doesn't program Plane 39 with NV12 regardless of client.
  4. This campaign (`fourier_attribution`) — opened 2026-05-03.

Per feedback_replicate_baseline_first.md: predecessor *measurement numbers* (drop counts, CPU%, freq) are reference history only. Every binding cell in this campaign anchors to in-session-acquired data.

Process

8(+1)-phase loop per ~/.claude/projects/-home-mfritsche-src/memory/feedback_dev_process.md. Phase 0 substrate captured 2026-05-03 across phase0_evidence/:

  • `state_2026-05-03.md` — package state matches predecessor carry-over claim; revert paths clean (same-upstream-version stock packages cached)
  • `test_rig_audit_2026-05-03.md` — predecessor test rig is intact; instrumentation reports per-second drops trajectory (sufficient for `drops_5s` / `drops_60s`); no Step 2 feature-flag opt-in needed (compiled in)
  • `devfreq_probe_2026-05-03.md` — panfrost devfreq at `/sys/class/devfreq/fde60000.gpu/`; trans_stat + cur_freq parseable; governor `simple_ondemand` (dynamic — workload-sensitive signal)

Phase 1 binding cells locked at:

  • `drops_5s` — drops in first 5s (warmup phase, file load + cache fill; reported but excluded from pass/fail)
  • `drops_60s` — drops over the 60s steady-state window (5s–65s)
  • `effective_fps` over 60s
  • `browser_cpu_pct` — top sampling 5s–65s
  • `kwin_cpu_pct` — same window
  • `panfrost_mean_freq_mhz` — trans_stat-diff weighted mean over 5s–65s
  • `panfrost_peak_freq_pct` — % of 60s spent at 800 MHz (Mali max)

Pass/fail threshold for “P delivers measurable benefit”: P-off cell increases drops_60s beyond all-on N=3 IQR, or any of {browser_cpu_pct, kwin_cpu_pct, panfrost_mean_freq_mhz} increases beyond its all-on N=3 IQR.

Note: this campaign uses 5s warmup boundary per operator instruction. The predecessor's phase3_prime_runs/post_process.sh uses 10s. The boundary divergence makes our drop counts not numerically comparable to predecessor numbers; that's intentional under campaign-contained data discipline.

Matrix

Cell qt6-fourier kwin-fourier chromium-fourier Browser Notes
A on on on chromium-fourier binary baseline; no revert
B on on off brave-bin 1.89 no package revert; binary swap only
C off on on chromium-fourier binary revert qt6-base, logout+login
D on off on chromium-fourier binary revert kwin, logout+login

N=3 reps per cell. 12 reps total. 70s window per rep, 60s steady-state at 5s–65s.

Repository

Local only for now (private working tree). Push to gitea later if the campaign reaches a useful conclusion worth publishing.

phase0_findings.md (uncurated)

Phase 0 — fourier_attribution

This file is the umbrella reference for Phase 0 work. Detail evidence files in phase0_evidence/:

  • `state_2026-05-03.md` — package + kernel + governor + session state on ohm
  • `test_rig_audit_2026-05-03.md` — predecessor test rig (`brave_drops_test.html`, `run_browser_nodebug.sh`, `post_process.sh`) audit, Cell B Brave invocation finalised, Step 2 feature-flag question resolved
  • `devfreq_probe_2026-05-03.md` — panfrost devfreq instrument verification

Research question (LOCKED 2026-05-03)

*“For each of qt6-fourier, kwin-fourier, and chromium-fourier on PineTab2 RK3568, is there a measurable, replicable delta on bbb 1080p first-60s playback when that package is toggled off (replaced by stock equivalent), versus the all-on baseline?”*

Mechanism the question targets

Each fourier package alters a different layer of the playback stack:

  • `chromium-fourier` ships Step 1 (libva-v4l2-request hantro multi-planar / chromium-149 era port) and Step 2 (Chromium WaylandConnection patch — overlay-route engages on KWin). Predecessor evidence (`ohm_gl_fix/phase3_remeasure_2026-05-02/task23_per_frame_route.md`) shows Step 2 engages with the chromium-fourier binary; whether engagement translates to measurable benefit is what this campaign tests.
  • `qt6-base-fourier` patches `qt6-base` for the `GL_ALPHA` stall. KWin links libQt6Gui; if KWin is the GL-composite step (per `wayland_baseline_2026-05-03/drmprobe_findings.md`, Plane 39 rotates ABGR8888 framebuffers under all reps), the qt6-fourier patch could affect KWin's per-frame work.
  • `kwin-fourier` patches KWin for the `watchDmaBuf` fence-wait issue. Direct effect on KWin's compositor scheduling.

The campaign does not commit to any of these mechanisms. It only measures whether toggling each off shifts the binding cells.

Predecessor close-out summary (context, not data)

  • `ohm_gl_fix` closed 2026-05-02 with the Step 2 WaylandConnection patch landed but Phase 1r `drops_post_warmup == 0` met *only* under cage. Spun off the residual cost into `kwin_overlay_subsurface`.
  • `kwin_overlay_subsurface` closed 2026-05-03 *without patch*. Premise was “cage = 0 floor at N=1 from Phase 0” — at N=3 in the closing session, the floor was missing (post-warmup median 26).
  • `x11-session-research` closed 2026-05-03 *with negative result on both axes*. X11 + xfwm4-no-comp produces *more* drops than Plasma Wayland with KWin compositing. X server doesn't program Plane 39 with NV12 regardless of client (mpv-xv, mpv-gpu — neither route engages).

The lesson from kwin_overlay_subsurface: don't anchor a campaign on N=1 historical numbers. This campaign acts on that lesson — every binding cell number comes from in-session reps acquired in this campaign's session.

Open questions before Phase 1 lock — resolved in Phase 0

  1. Chromium-fourier off → Brave or stock Chromium 149? Resolved: Brave (operator sign-off 2026-05-03). Two-major-version delta (Brave 147 vs chromium-fourier 149) documented as known confound.
  2. Reversibility on ohm — cell C/D revert path. Resolved: pacman cache has stock kwin-6.6.4-1 and qt6-base-6.11.0-2 at the *same upstream version* as the fourier-patched ones. Logout + auto-login per cell (operator instruction).
  3. 5s vs 10s warmup boundary. Resolved: 5s (operator instruction). Diverges from predecessor's 10s in `phase3_prime_runs/post_process.sh`.
  4. Step 2 feature-flag opt-in name. Resolved: there is no flag. Step 2 patch is compiled-in and engages by default.
  5. Window-size pin. Resolved: do not pin (mirror predecessor invocation; the video element is fixed at 800×450 in the .html anyway).
  6. Where does the orchestrator live? Resolved: new `~/fourier-attribution/` dir on ohm, separate from predecessor's `phase3_prime_runs/`. Carries `run_browser_attribution.sh` (devfreq capture added) and `post_process_attribution.sh` (5s warmup boundary; mean-freq + peak-freq% derived from trans_stat diff).

What Phase 0 has produced

  • Locked research question + mechanism + experimental matrix (4 cells × N=3)
  • Predecessor test rig audit + Cell B Brave invocation
  • Panfrost devfreq instrument verification
  • Phase 0 in-session baseline anchor of cell A — *to be acquired in task #54*

Once #54 lands, Phase 1 binding cells lock with cell-A IQR widths in evidence, and the pass/fail thresholds are concrete.

phase0_evidence/baseline_a_2026-05-03.md (uncurated)

Phase 0 — cell A in-session baseline N=3 — 2026-05-03

Cell A = all three fourier packages on (qt6-base-fourier 1:6.11.0-3, kwin-fourier 1:6.6.4-3, chromium-fourier 149.0.7812.0 binary), Plasma Wayland, KWin compositor.

Ambient conditions during reps (per `start.txt`)

  • Kernel: `6.19.10-danctnix1-1-pinetab2`
  • Active session: tty2 Plasma Wayland (kwin_wayland PID 53655)
  • Operator's daily Brave (PID 58105 etc.) running in background, ~13% CPU idle. Documented as stable ambient confound across all three reps.
  • Reps run consecutively, each ~95s wall, with ~10s settle gap between
  • Reps timestamps: a_rep1 22:51 CEST, a_rep2 22:55 CEST, a_rep3 22:58 CEST

Per-rep summary (raw evidence in `baseline_a_2026-05-03/*_summary.txt`)

metric a_rep1 a_rep2 a_rep3 min max range
drops_5s 10 11 7 7 11 4
drops_60s 20 15 15 15 20 5
drops_post_5s 10 4 8 4 10 6
effective_fps 23.99 23.99 24.00 23.99 24.00 0.01
frames_5s 121 121 121 121 121 0
frames_60s 1441 1442 1441 1441 1442 1
kwin_cpu_median 12.0 12.0 12.0 12.0 12.0 0.0
kwin_cpu_mean 11.97 12.02 11.98 11.97 12.02 0.05
kwin_cpu_iqr (per-rep) 1.8 2.0 1.0 1.0 2.0 1.0
browser_cpu_median 56.6 56.25 56.0 56.0 56.6 0.6
browser_cpu_mean 61.03 61.69 61.17 61.03 61.69 0.66
browser_cpu_iqr (per-rep) 9.6 9.2 5.9 5.9 9.6 3.7
panfrost_mean_freq_mhz 600.1 591.2 594.6 591.2 600.1 8.9
panfrost_peak_freq_pct 35.3 34.0 35.0 34.0 35.3 1.3
therm_pre_milliC 45000 45555 45555 45000 45555 555
therm_drift_c 10.6 7.8 7.8 7.8 10.6 2.8

Cell A IQR widths (locked for Phase 1 thresholds)

The N=3 range is used as a conservative IQR proxy (with N=3, p25 ≈ min, p75 ≈ max). Tighter than 95% CI but appropriate for the small N.

  • `drops_60s` range: 5
  • `effective_fps` range: 0.01 (effectively zero — very stable)
  • `kwin_cpu_median` range: 0.0 (exact tie across reps — top -d 1 rounds to integer percent at this CPU level)
  • `browser_cpu_median` range: 0.6
  • `panfrost_mean_freq_mhz` range: 8.9 (≈ 1.5% of mean)
  • `panfrost_peak_freq_pct` range: 1.3 (percentage points)

Observations

  1. Effective fps is essentially locked at 24.0. The clip is 24 fps despite the `_30` in the filename. All three reps decode the full 60-second window's frames within 0.01 fps of each other. The test is *not* fps-bound; binding-cell discrimination must come from drops, CPU%, or panfrost freq.
  1. CPU metrics are exceptionally stable. kwin_cpu_median is 12.0% in all three reps to 0.1% precision. browser_cpu_median spans 0.6 percentage points. This means tiny shifts when cells B/C/D run will be detectable.
  1. panfrost_mean_freq_mhz is 591–600 MHz — well below the 800 MHz peak. Mali isn't pegged. The simple_ondemand governor is dialling between 400 / 600 / 800 MHz to track demand. Time at 800 MHz peak is consistently ~35% of the window.
  1. drops_60s ranges 15–20. Predecessor's `kwin_timing_nodebug_rep1` reported drops_total=27 (no campaign-data import — cited only as broad ballpark verification). Our numbers cluster slightly lower; not surprising given ambient-state differences (different uptime, different daily-Brave activity, different cache state). The campaign-contained data discipline holds: this is OUR baseline; comparison is against THESE reps' IQR.
  1. drops_post_5s spans 4–10. This is the largest relative variance (factor of 2.5×). Drops *during steady state* are the most rep-to-rep variable signal. Whether a cell-toggle moves this beyond the IQR will be the most stringent threshold test.
  1. Thermal drift 7.8–10.6°C in 90s indicates the SoC is under genuine sustained load. No throttling triggered (max temp around 56°C; throttle threshold ~85°C).

Cell A IQR-based pass/fail thresholds (Phase 1 lock candidate)

A package P delivers measurable benefit if the P-off cell at N=3 exceeds ALL of the following deltas relative to the cell A median:

metric cell A median threshold delta (≈ N=3 range) “measurable benefit if P-off exceeds”
drops_60s 15 +5 ≥ 21
effective_fps 24.0 -0.05 ≤ 23.95
kwin_cpu_median 12.0 +0.5 ≥ 12.5 (ranges hit 0.0; 0.5 is conservative floor)
browser_cpu_median 56.0 +1 ≥ 57.0
panfrost_mean_freq_mhz 595 +10 ≥ 605

The thresholds are deliberately conservative on metrics where cell A IQR was 0 (kwin_cpu_median, panfrost_peak_freq_pct), inflated to 0.5–1 unit to avoid spurious-significance on rounding artefacts. A package needs to hit ANY ONE of the threshold deltas to count as having measurable benefit; a package that hits NONE is “no measurable benefit on this matrix” — explicit chaff.

Phase 0 task #54 verdict

Three reps acquired in-session, very tight on CPU/freq metrics, moderate variance on drops (consistent with Phase 3-prime predecessor experience that drops are the noisiest signal). Cell A baseline locked. Phase 1 binding-cell thresholds drafted above; lock when reading them back to operator.

Phase 0 task #54 = COMPLETE.

phase4_findings.md — cross-cell analysis (uncurated)

fourier_attribution — Cross-cell analysis 2026-05-03

Matrix executed in full: 4 cells × N=3 reps = 12 reps acquired in-session on ohm (PineTab2 RK3568, kernel 6.19.10-danctnix1-1-pinetab2, mesa 26.0.5, governor=performance, baloo off, daily Brave killed for clean ambient, autologin via campaign-temporary 99-autologin-fourier-attribution.conf since reverted).

Per-rep summary.txt and start.txt mirrored locally to phase4_evidence/{a,b,c,d}_rep[1-3]_*.

Per-rep table (raw)

A1 A2 A3 B1 B2 B3 C1 C2 C3 D1 D2 D3
drops_5s 10 5 5 15 8 11 11 7 5 9 10 16
drops_60s 17 12 8 16 11 18 14 10 5 21 24 25
drops_post_5s 7 7 3 1 3 7 3 3 0 12 14 9
effective_fps 24.01 24.01 24.00 23.43 23.18 22.91 24.0 24.01 23.98 23.99 23.99 23.99
kwin_cpu_median 11.0 12.0 11.0 12.9 13.0 13.0 12.0 11.0 11.0 32.9 32.9 32.9
browser_cpu_median 54.25 54.4 54.9 137.3 140.65 137.15 60.2 54.15 52.2 64.25 63.3 64.05
panfrost_mean_freq_mhz 596.4 607.2 606.8 596.2 605.7 605.4 596.7 590.7 595.6 783.2 777.2 774.5
panfrost_peak_freq_pct 35.1 36.2 35.0 35.9 36.5 36.9 35.4 34.0 33.5 95.2 93.7 93.3
therm_drift_c 11.1 11.7 7.7 12.2 12.8 8.6 12.7 5.0 11.7 17.2 7.9 7.2

Cell medians

metric A (baseline) B (chromium-fourier off, Brave) C (qt6-fourier off) D (kwin-fourier off)
drops_60s 12 16 10 24
effective_fps 24.01 23.18 24.0 23.99
kwin_cpu_median 11.0 13.0 11.0 32.9
browser_cpu_median 54.4 137.15 54.15 64.05
panfrost_mean_freq_mhz 606.8 605.4 595.6 777.2
panfrost_peak_freq_pct 35.1 36.5 34.0 93.7

Per-cell verdict (against the IQR-based thresholds locked in `baseline_a_2026-05-03.md`)

Threshold rule: P-off cell delivers measurable benefit if the off-cell exceeds cell A median by:

  • drops_60s ±5 | effective_fps ±0.05 | kwin_cpu_median ±0.5 | browser_cpu_median ±1 | panfrost_mean_freq_mhz ±10

Cell B — chromium-fourier OFF (→ Brave 1.89)

metric Δ vs A beyond threshold?
drops_60s +4 NO (within ±5)
effective_fps −0.83 YES — Brave is significantly slower
kwin_cpu_median +2.0 YES
browser_cpu_median +82.75 YES (massive — 2.5×)
panfrost_mean_freq_mhz −1.4 NO

Verdict: chromium-fourier delivers measurable benefit. 3 of 5 metrics fail when off.

Caveat: Cell B confounds *chromium-fourier patches* with *Brave-vs-Chromium-version* differences (Brave 1.89.145 = Chromium 147 base; chromium-fourier = Chromium 149 base). The +83pp browser CPU is plausibly part version-bump and part patch-engagement (chromium-fourier Step 1 + Step 2). Not separable in this matrix; would need stock-Chromium-149 build as additional cell.

Cell C — qt6-fourier OFF

metric Δ vs A beyond threshold?
drops_60s −2 NO (and *better* by 2 — within IQR)
effective_fps −0.01 NO
kwin_cpu_median 0 NO
browser_cpu_median −0.25 NO
panfrost_mean_freq_mhz −11.2 marginal wrong direction (off is *lower* GPU)

Verdict: qt6-fourier delivers NO measurable benefit on this workload. Zero of 5 metrics fail when off. The single marginal panfrost delta is in the wrong direction (less GPU work without qt6-fourier), suggesting qt6-fourier may even have a tiny GPU cost on this workload — though the magnitude is at the IQR edge.

Caveat: qt6-fourier patches qt6-base for the GL_ALPHA stall. That stall may not be triggered by 1080p H.264 NV12 video playback in chromium-fourier; the patch could still help other workloads (different video formats, mixed application loads, etc.) not in scope here.

Cell D — kwin-fourier OFF

metric Δ vs A beyond threshold?
drops_60s +12 YES (>2× threshold)
effective_fps −0.02 NO
kwin_cpu_median +21.9 YES (massive — 3×)
browser_cpu_median +9.65 YES
panfrost_mean_freq_mhz +170.4 YES (massive — Mali jumps from ~600 to ~775 MHz)
panfrost_peak_freq_pct +58.7 (would be massive YES if it were a primary threshold)

Verdict: kwin-fourier delivers MASSIVE measurable benefit. 4 of 5 primary metrics fail when off, with the kwin-CPU and panfrost-freq deltas being huge.

This is consistent with the predecessor's diagnosis that kwin-fourier patches a watchDmaBuf fence-wait issue. Without the patch, KWin spins waiting on dmabuf fences that should already be signaled, doing extra GL composite work, driving Mali to near-max all the time. The packaged fix is doing real work on this workload.

Wheat-vs-chaff verdict

WHEAT (measurable benefit on bbb 1080p H.264 60s playback, ohm/PineTab2):

  • kwin-fourier — load-bearing. Removing it triples kwin CPU, drives Mali GPU to 95% peak-freq residency, doubles drops_60s. Likely the single most impactful fourier package on this hardware/workload.
  • chromium-fourier — measurable benefit, magnitude inflated by Brave-vs-Chromium-149 version confound. Real signal exists (3 of 5 metrics fail when swapped to Brave); cleanest separation would need a stock-Chromium-149 control cell, out of scope here.

CHAFF (no measurable benefit on this specific workload, ohm/PineTab2):

  • qt6-fourier — zero of 5 metrics moved beyond cell A IQR when removed. Cell C medians are within rep-to-rep noise of cell A. The GL_ALPHA stall the patch addresses doesn't trigger in this scenario. *Not a statement about other workloads*; just chaff for this specific binding-cell set.

Open questions raised

  1. Brave-vs-Chromium-149 confound in cell B. Could be resolved with a stock Chromium 149 build as a fifth cell. Out of campaign scope.
  2. qt6-fourier on other workloads. This campaign rules out benefit for bbb 1080p H.264 60s in chromium-fourier; doesn't say anything about Firefox, mpv, mixed Plasma desktop activity, or different video formats. If the user wants qt6-fourier maintained, it'd be on the merits of a different workload set.
  3. Cell C had wider rep-to-rep variance than expected (drops_60s 5/10/14, browser_cpu_median 52.2/54.15/60.2). May be ambient drift in the new session post-package-swap; not enough to change the verdict but flagged for honesty.
  4. All-off cell. Not measured. Combined effect of kwin+qt6+chromium being all reverted not in matrix; predecessor evidence implies it'd be ≈cell D (kwin dominant) but unknown.

Phase 8 memory hooks worth carrying forward

  • *Single-toggle attribution matrix on small N=3 with clean ambient is enough to rank fourier-flavoured packages by impact on a specific workload* — this campaign in 4 hours gave answers the original fourier campaign hadn't separated in months of “fix this fix that”.
  • *kwin-fourier `watchDmaBuf` fix is the load-bearing one for video on rockchip* (RK3568). Removing it is the failure mode. Should not be removed casually.
  • *qt6-fourier GL_ALPHA fix may not bind on workloads that don't trigger it.* Don't ship it as critical without identifying the workloads where it actually helps.
  • *Brave-vs-Chromium version confound in matrix design* — when “package off” requires using a different upstream binary, document the version skew explicitly and note it as a confound; don't pretend the swap is clean.

phase4_evidence — per-rep summary.txt (raw, uncurated)

a_rep1_summary.txt

REP_ID=a_rep1
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=10
drops_60s=17
drops_post_5s=7
frames_5s=124
frames_60s=1448
effective_fps=24.01
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=11.0
kwin_cpu_mean=11.65
kwin_cpu_min=9.9
kwin_cpu_max=19.0
kwin_cpu_p25=11.0
kwin_cpu_p75=12.0
kwin_cpu_iqr=1.0
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=54.25
browser_cpu_mean=58.59
browser_cpu_min=49.1
browser_cpu_max=115.7
browser_cpu_p25=52.2
browser_cpu_p75=59.1
browser_cpu_iqr=6.9
--- panfrost devfreq (window) ---
panfrost_total_window_ms=74681
panfrost_mean_freq_mhz=596.4
panfrost_peak_freq_pct=35.1
panfrost_residency_200MHz_ms=1356
panfrost_residency_300MHz_ms=485
panfrost_residency_400MHz_ms=25080
panfrost_residency_600MHz_ms=19625
panfrost_residency_700MHz_ms=1897
panfrost_residency_800MHz_ms=26238
--- thermal ---
therm_pre_milliC=46111
therm_post_milliC=57222
therm_drift_c=11.1

a_rep2_summary.txt

REP_ID=a_rep2
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=5
drops_60s=12
drops_post_5s=7
frames_5s=124
frames_60s=1447
effective_fps=24.01
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=12.0
kwin_cpu_mean=12.16
kwin_cpu_min=10.0
kwin_cpu_max=17.0
kwin_cpu_p25=11.0
kwin_cpu_p75=13.0
kwin_cpu_iqr=2.0
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=54.4
browser_cpu_mean=59.76
browser_cpu_min=49.4
browser_cpu_max=115.7
browser_cpu_p25=53.0
browser_cpu_p75=60.0
browser_cpu_iqr=7.0
--- panfrost devfreq (window) ---
panfrost_total_window_ms=73875
panfrost_mean_freq_mhz=607.2
panfrost_peak_freq_pct=36.2
panfrost_residency_200MHz_ms=1294
panfrost_residency_300MHz_ms=207
panfrost_residency_400MHz_ms=22356
panfrost_residency_600MHz_ms=20947
panfrost_residency_700MHz_ms=2314
panfrost_residency_800MHz_ms=26757
--- thermal ---
therm_pre_milliC=47777
therm_post_milliC=59444
therm_drift_c=11.7

a_rep3_summary.txt

REP_ID=a_rep3
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=5
drops_60s=8
drops_post_5s=3
frames_5s=125
frames_60s=1448
effective_fps=24.0
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=11.0
kwin_cpu_mean=11.51
kwin_cpu_min=10.0
kwin_cpu_max=17.0
kwin_cpu_p25=11.0
kwin_cpu_p75=12.0
kwin_cpu_iqr=1.0
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=54.9
browser_cpu_mean=58.36
browser_cpu_min=49.3
browser_cpu_max=124.8
browser_cpu_p25=52.4
browser_cpu_p75=57.3
browser_cpu_iqr=4.9
--- panfrost devfreq (window) ---
panfrost_total_window_ms=74432
panfrost_mean_freq_mhz=606.8
panfrost_peak_freq_pct=35.9
panfrost_residency_200MHz_ms=1302
panfrost_residency_300MHz_ms=309
panfrost_residency_400MHz_ms=21911
panfrost_residency_600MHz_ms=22616
panfrost_residency_700MHz_ms=1545
panfrost_residency_800MHz_ms=26749
--- thermal ---
therm_pre_milliC=50625
therm_post_milliC=58333
therm_drift_c=7.7

b_rep1_summary.txt

REP_ID=b_rep1
KIND=brave-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=15
drops_60s=16
drops_post_5s=1
frames_5s=123
frames_60s=1414
effective_fps=23.43
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=12.9
kwin_cpu_mean=12.5
kwin_cpu_min=8.9
kwin_cpu_max=16.0
kwin_cpu_p25=11.9
kwin_cpu_p75=13.0
kwin_cpu_iqr=1.1
--- brave aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=137.3
browser_cpu_mean=151.89
browser_cpu_min=92.3
browser_cpu_max=240.9
browser_cpu_p25=125.2
browser_cpu_p75=183.1
browser_cpu_iqr=57.9
--- panfrost devfreq (window) ---
panfrost_total_window_ms=73944
panfrost_mean_freq_mhz=596.2
panfrost_peak_freq_pct=35.9
panfrost_residency_200MHz_ms=2321
panfrost_residency_300MHz_ms=1196
panfrost_residency_400MHz_ms=22807
panfrost_residency_600MHz_ms=18447
panfrost_residency_700MHz_ms=2649
panfrost_residency_800MHz_ms=26524
--- thermal ---
therm_pre_milliC=48333
therm_post_milliC=60555
therm_drift_c=12.2

b_rep2_summary.txt

REP_ID=b_rep2
KIND=brave-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=8
drops_60s=11
drops_post_5s=3
frames_5s=115
frames_60s=1392
effective_fps=23.18
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=13.0
kwin_cpu_mean=12.99
kwin_cpu_min=9.0
kwin_cpu_max=16.0
kwin_cpu_p25=12.0
kwin_cpu_p75=14.0
kwin_cpu_iqr=2.0
--- brave aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=140.65
browser_cpu_mean=151.2
browser_cpu_min=93.0
browser_cpu_max=258.8
browser_cpu_p25=124.6
browser_cpu_p75=176.4
browser_cpu_iqr=51.8
--- panfrost devfreq (window) ---
panfrost_total_window_ms=75308
panfrost_mean_freq_mhz=605.7
panfrost_peak_freq_pct=36.5
panfrost_residency_200MHz_ms=2427
panfrost_residency_300MHz_ms=1224
panfrost_residency_400MHz_ms=20508
panfrost_residency_600MHz_ms=19969
panfrost_residency_700MHz_ms=3684
panfrost_residency_800MHz_ms=27496
--- thermal ---
therm_pre_milliC=48888
therm_post_milliC=61666
therm_drift_c=12.8

b_rep3_summary.txt

REP_ID=b_rep3
KIND=brave-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=11
drops_60s=18
drops_post_5s=7
frames_5s=104
frames_60s=1367
effective_fps=22.91
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=13.0
kwin_cpu_mean=12.96
kwin_cpu_min=9.0
kwin_cpu_max=19.9
kwin_cpu_p25=12.0
kwin_cpu_p75=14.0
kwin_cpu_iqr=2.0
--- brave aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=137.15
browser_cpu_mean=155.17
browser_cpu_min=98.8
browser_cpu_max=286.0
browser_cpu_p25=127.5
browser_cpu_p75=177.7
browser_cpu_iqr=50.2
--- panfrost devfreq (window) ---
panfrost_total_window_ms=75129
panfrost_mean_freq_mhz=605.4
panfrost_peak_freq_pct=36.9
panfrost_residency_200MHz_ms=3629
panfrost_residency_300MHz_ms=1270
panfrost_residency_400MHz_ms=18742
panfrost_residency_600MHz_ms=19345
panfrost_residency_700MHz_ms=4434
panfrost_residency_800MHz_ms=27709
--- thermal ---
therm_pre_milliC=52500
therm_post_milliC=61111
therm_drift_c=8.6

c_rep1_summary.txt

REP_ID=c_rep1
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=11
drops_60s=14
drops_post_5s=3
frames_5s=125
frames_60s=1449
effective_fps=24.0
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=12.0
kwin_cpu_mean=11.76
kwin_cpu_min=10.0
kwin_cpu_max=16.0
kwin_cpu_p25=11.0
kwin_cpu_p75=12.0
kwin_cpu_iqr=1.0
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=60.2
browser_cpu_mean=62.12
browser_cpu_min=49.8
browser_cpu_max=115.1
browser_cpu_p25=57.6
browser_cpu_p75=63.3
browser_cpu_iqr=5.7
--- panfrost devfreq (window) ---
panfrost_total_window_ms=76199
panfrost_mean_freq_mhz=596.7
panfrost_peak_freq_pct=35.4
panfrost_residency_200MHz_ms=2551
panfrost_residency_300MHz_ms=1297
panfrost_residency_400MHz_ms=22910
panfrost_residency_600MHz_ms=19041
panfrost_residency_700MHz_ms=3415
panfrost_residency_800MHz_ms=26985
--- thermal ---
therm_pre_milliC=50625
therm_post_milliC=63333
therm_drift_c=12.7

c_rep2_summary.txt

REP_ID=c_rep2
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=7
drops_60s=10
drops_post_5s=3
frames_5s=125
frames_60s=1449
effective_fps=24.01
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=11.0
kwin_cpu_mean=11.24
kwin_cpu_min=9.0
kwin_cpu_max=16.0
kwin_cpu_p25=10.9
kwin_cpu_p75=12.0
kwin_cpu_iqr=1.1
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=54.15
browser_cpu_mean=58.84
browser_cpu_min=49.3
browser_cpu_max=184.9
browser_cpu_p25=52.3
browser_cpu_p75=57.7
browser_cpu_iqr=5.4
--- panfrost devfreq (window) ---
panfrost_total_window_ms=74799
panfrost_mean_freq_mhz=590.7
panfrost_peak_freq_pct=34.0
panfrost_residency_200MHz_ms=1860
panfrost_residency_300MHz_ms=416
panfrost_residency_400MHz_ms=25766
panfrost_residency_600MHz_ms=18917
panfrost_residency_700MHz_ms=2379
panfrost_residency_800MHz_ms=25461
--- thermal ---
therm_pre_milliC=58333
therm_post_milliC=63333
therm_drift_c=5.0

c_rep3_summary.txt

REP_ID=c_rep3
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=5
drops_60s=5
drops_post_5s=0
frames_5s=125
frames_60s=1447
effective_fps=23.98
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=11.0
kwin_cpu_mean=10.96
kwin_cpu_min=9.0
kwin_cpu_max=15.0
kwin_cpu_p25=11.0
kwin_cpu_p75=11.0
kwin_cpu_iqr=0.0
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=52.2
browser_cpu_mean=54.9
browser_cpu_min=46.7
browser_cpu_max=135.9
browser_cpu_p25=51.1
browser_cpu_p75=55.2
browser_cpu_iqr=4.1
--- panfrost devfreq (window) ---
panfrost_total_window_ms=73269
panfrost_mean_freq_mhz=595.6
panfrost_peak_freq_pct=33.5
panfrost_residency_200MHz_ms=1681
panfrost_residency_300MHz_ms=311
panfrost_residency_400MHz_ms=23541
panfrost_residency_600MHz_ms=20735
panfrost_residency_700MHz_ms=2468
panfrost_residency_800MHz_ms=24533
--- thermal ---
therm_pre_milliC=50000
therm_post_milliC=61666
therm_drift_c=11.7

d_rep1_summary.txt

REP_ID=d_rep1
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=9
drops_60s=21
drops_post_5s=12
frames_5s=124
frames_60s=1448
effective_fps=23.99
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=32.9
kwin_cpu_mean=33.44
kwin_cpu_min=30.8
kwin_cpu_max=39.9
kwin_cpu_p25=32.8
kwin_cpu_p75=33.9
kwin_cpu_iqr=1.1
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=64.25
browser_cpu_mean=68.74
browser_cpu_min=57.0
browser_cpu_max=107.9
browser_cpu_p25=61.2
browser_cpu_p75=71.6
browser_cpu_iqr=10.4
--- panfrost devfreq (window) ---
panfrost_total_window_ms=75111
panfrost_mean_freq_mhz=783.2
panfrost_peak_freq_pct=95.2
panfrost_residency_200MHz_ms=1369
panfrost_residency_300MHz_ms=103
panfrost_residency_400MHz_ms=208
panfrost_residency_600MHz_ms=1134
panfrost_residency_700MHz_ms=780
panfrost_residency_800MHz_ms=71517
--- thermal ---
therm_pre_milliC=45555
therm_post_milliC=62777
therm_drift_c=17.2

d_rep2_summary.txt

REP_ID=d_rep2
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=10
drops_60s=24
drops_post_5s=14
frames_5s=124
frames_60s=1448
effective_fps=23.99
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=32.9
kwin_cpu_mean=33.14
kwin_cpu_min=29.7
kwin_cpu_max=38.8
kwin_cpu_p25=31.9
kwin_cpu_p75=33.9
kwin_cpu_iqr=2.0
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=63.3
browser_cpu_mean=68.91
browser_cpu_min=56.2
browser_cpu_max=127.7
browser_cpu_p25=61.2
browser_cpu_p75=67.6
browser_cpu_iqr=6.4
--- panfrost devfreq (window) ---
panfrost_total_window_ms=79234
panfrost_mean_freq_mhz=777.2
panfrost_peak_freq_pct=93.7
panfrost_residency_200MHz_ms=161
panfrost_residency_300MHz_ms=105
panfrost_residency_400MHz_ms=3715
panfrost_residency_600MHz_ms=727
panfrost_residency_700MHz_ms=261
panfrost_residency_800MHz_ms=74265
--- thermal ---
therm_pre_milliC=53750
therm_post_milliC=61666
therm_drift_c=7.9

d_rep3_summary.txt

REP_ID=d_rep3
KIND=chromium-fourier-kwin
end_seen=True
trajectory_samples=71
--- drops ---
drops_5s=16
drops_60s=25
drops_post_5s=9
frames_5s=124
frames_60s=1447
effective_fps=23.99
--- kwin_wayland CPU%% (5s-65s) ---
kwin_cpu_n=60
kwin_cpu_median=32.9
kwin_cpu_mean=33.03
kwin_cpu_min=27.9
kwin_cpu_max=40.2
kwin_cpu_p25=31.9
kwin_cpu_p75=33.9
kwin_cpu_iqr=2.0
--- chrome aggregate CPU%% (5s-65s) ---
browser_cpu_n=60
browser_cpu_median=64.05
browser_cpu_mean=70.36
browser_cpu_min=58.0
browser_cpu_max=148.0
browser_cpu_p25=62.1
browser_cpu_p75=70.9
browser_cpu_iqr=8.8
--- panfrost devfreq (window) ---
panfrost_total_window_ms=78666
panfrost_mean_freq_mhz=774.5
panfrost_peak_freq_pct=93.3
panfrost_residency_200MHz_ms=326
panfrost_residency_300MHz_ms=463
panfrost_residency_400MHz_ms=3576
panfrost_residency_600MHz_ms=621
panfrost_residency_700MHz_ms=262
panfrost_residency_800MHz_ms=73418
--- thermal ---
therm_pre_milliC=56111
therm_post_milliC=63333
therm_drift_c=7.2

Representative start.txt — package state per cell at rep time

a_rep1_start.txt

2026-05-03T21:09:44Z
REP_ID=a_rep1 KIND=chromium-fourier-kwin
BROWSER_BIN=/tmp/chromium-ohm-gl-fix-step2/chrome
Chromium 149.0.7812.0 
qt6-base-fourier 1:6.11.0-3
qt6-base-fourier 1:6.11.0-3
kwin-fourier 1:6.6.4-3
kwin-fourier 1:6.6.4-3
6.19.10-danctnix1-1-pinetab2
workload_pid=67340
workload_pgid=67340
script_pgid=67329
AUTOPLAY at 2026-05-03T21:09:49Z (took 5 s)
kwin_wayland_pid=53655

b_rep1_start.txt

2026-05-03T21:14:21Z
REP_ID=b_rep1 KIND=brave-kwin
BROWSER_BIN=/usr/bin/brave
Brave Browser 147.1.89.145 
qt6-base-fourier 1:6.11.0-3
qt6-base-fourier 1:6.11.0-3
kwin-fourier 1:6.6.4-3
kwin-fourier 1:6.6.4-3
6.19.10-danctnix1-1-pinetab2
workload_pid=69443
workload_pgid=69443
script_pgid=69432
AUTOPLAY at 2026-05-03T21:14:26Z (took 5 s)
kwin_wayland_pid=53655

c_rep1_start.txt

2026-05-03T22:01:37Z
REP_ID=c_rep1 KIND=chromium-fourier-kwin
BROWSER_BIN=/tmp/chromium-ohm-gl-fix-step2/chrome
Chromium 149.0.7812.0 
qt6-base 6.11.0-2
kwin-fourier 1:6.6.4-3
kwin-fourier 1:6.6.4-3
6.19.10-danctnix1-1-pinetab2
workload_pid=82947
workload_pgid=82947
script_pgid=82936
AUTOPLAY at 2026-05-03T22:01:43Z (took 6 s)
kwin_wayland_pid=82420

d_rep1_start.txt

2026-05-03T21:50:32Z
REP_ID=d_rep1 KIND=chromium-fourier-kwin
BROWSER_BIN=/tmp/chromium-ohm-gl-fix-step2/chrome
Chromium 149.0.7812.0 
qt6-base-fourier 1:6.11.0-3
qt6-base-fourier 1:6.11.0-3
kwin 6.6.4-1
6.19.10-danctnix1-1-pinetab2
workload_pid=79834
workload_pgid=79834
script_pgid=79823
AUTOPLAY at 2026-05-03T21:50:37Z (took 5 s)
kwin_wayland_pid=77581

Reviewer brief

Per Phase 5 of the dev process: Claude is forbidden from curating this artifact. The reviewer is asked to read the raw documents above and surface anything the active session may have rationalised away — methodology gaps, threshold-setting bias, confounds the campaign acknowledged but didn't quantify (e.g. Brave-vs-Chromium-149 version delta in cell B), and any path from this matrix to a useful next campaign.

fourier/attribution_2026-05-03.1777867127.txt.gz · Last modified: by markus_fritsche