chore(cleanup): drop TEMP cursor probes + clear KWin-leg clippy debt
audit / bun-audit (push) Failing after 14s
ci / web (push) Successful in 52s
windows-drivers / probe-and-proto (push) Successful in 54s
ci / docs-site (push) Successful in 1m6s
apple / swift (push) Successful in 1m21s
audit / cargo-audit (push) Successful in 2m49s
windows-drivers / driver-build (push) Successful in 2m0s
decky / build-publish (push) Successful in 22s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 11s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 9s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 8s
docker / build-push (ci, ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 9s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 9s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 9s
ci / bench (push) Successful in 6m47s
ci / rust (push) Failing after 10m23s
release / apple (push) Successful in 9m24s
deb / build-publish-host (push) Successful in 9m51s
apple / swift (pull_request) Successful in 1m21s
apple / screenshots (pull_request) Skipped
android / android (push) Successful in 12m25s
flatpak / build-publish (push) Failing after 8m8s
deb / build-publish (push) Successful in 12m16s
ci / web (pull_request) Successful in 50s
ci / docs-site (pull_request) Successful in 51s
docker / deploy-docs (push) Successful in 26s
arch / build-publish (push) Successful in 14m34s
windows-host / package (push) Successful in 15m5s
apple / screenshots (push) Successful in 6m33s
ci / rust (pull_request) Failing after 6m56s
ci / bench (pull_request) Successful in 6m5s
android / android (pull_request) Successful in 9m56s
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 3m14s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 15m42s
windows-msix / package (x64, C:\Users\Public\ffmpeg, , x86_64-pc-windows-msvc, C:\t) (push) Successful in 3m13s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 15m42s
windows / build (aarch64-pc-windows-msvc) (push) Successful in 5m34s
windows / build (x86_64-pc-windows-msvc) (push) Canceled after 4m47s
windows-drivers / probe-and-proto (pull_request) Successful in 15s
windows-drivers / driver-build (pull_request) Successful in 1m30s
windows / build (aarch64-pc-windows-msvc) (pull_request) Successful in 1m3s
windows / build (x86_64-pc-windows-msvc) (pull_request) Successful in 1m54s

The KWin/Phase-A/B commits were built but never clippy-checked (that distrobox
had no clippy component), so they left TEMP on-glass probes and lint debt in the
tree. With clippy now runnable (fedora rust 1.96.1 = CI parity):

- drop the `fec424ee`/`8cff30d5` TEMP probes: the `update_cursor_meta` SPA_META
  diagnostic logs (also un-detaches the `// SAFETY:` comment from its `unsafe`
  block → fixes `undocumented_unsafe_blocks`) and the KWin composite-arm probe in
  the encode loop.
- `#[allow(clippy::too_many_arguments)]` on `spawn_pipewire` (8 params since the
  KWin leg added `expect_exact_dims`; mirrors `from_virtual_output`).

clippy `-p pf-capture -p pf-vdisplay -p punktfunk-host --locked --features
nvenc,vulkan-encode -- -D warnings` is now green. (--all-targets additionally
trips a pre-existing env mismatch: the fedora libspa binding lacks
`SPA_VIDEO_TRANSFER_SMPTE2084`, referenced only by a `#[cfg(test)]` guard-test —
not a code issue; CI's pinned pipewire has it.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-22 23:54:56 +02:00
co-authored by Claude Opus 4.8
parent 7058647264
commit 92f38ec3dd
4 changed files with 9 additions and 65 deletions
+1 -34
View File
@@ -236,6 +236,7 @@ impl PwHandles {
/// Spawn the PipeWire consumer thread for `node_id` (fd `Some` = portal remote, `None` =
/// default daemon) and return its [`PwHandles`]. `preferred` seeds the format negotiation's
/// default size/framerate — for Mutter virtual monitors this is what actually sizes the monitor.
#[allow(clippy::too_many_arguments)]
fn spawn_pipewire(
fd: Option<OwnedFd>,
node_id: u32,
@@ -1443,19 +1444,8 @@ mod pipewire {
// that SIGSEGVs inside the PipeWire `.process` callback (a segfault `catch_unwind` cannot
// catch). Every offset below is validated against `region_size` with checked arithmetic,
// mirroring the fd-length guard the main frame path already applies to xdg-desktop-portal-wlr.
// TEMP M2b on-glass probe (DROP BEFORE MERGE): the journal must show whether the
// compositor delivers SPA_META_Cursor at all, what it reports, and whether a bitmap is
// ever accepted — the cursor pipeline is otherwise blind end-to-end. Statics are fine for
// the single bring-up stream; every log is rate-limited or edge-triggered.
use std::sync::atomic::{AtomicU64, Ordering as ProbeOrd};
static PROBE_NULL: AtomicU64 = AtomicU64::new(0);
static PROBE_META: AtomicU64 = AtomicU64::new(0);
let meta = unsafe { spa::sys::spa_buffer_find_meta(spa_buf, spa::sys::SPA_META_Cursor) };
if meta.is_null() {
let n = PROBE_NULL.fetch_add(1, ProbeOrd::Relaxed) + 1;
if n.is_power_of_two() {
tracing::info!(n, "cursor meta probe: buffer carries NO SPA_META_Cursor");
}
return;
}
// SAFETY: `meta` is non-null and points into the held buffer's metadata array.
@@ -1475,21 +1465,6 @@ mod pipewire {
(*cur).bitmap_offset,
)
};
// TEMP M2b probe (see above): what the meta reports, every 64th + the first few.
let n = PROBE_META.fetch_add(1, ProbeOrd::Relaxed) + 1;
if n <= 4 || n % 64 == 1 {
tracing::info!(
n,
id,
pos_x,
pos_y,
hot_x,
hot_y,
bmp_off,
region_size,
"cursor meta probe: SPA_META_Cursor arrived"
);
}
if id == 0 {
// SPA contract: id 0 = "no cursor information", NOT "cursor hidden". Mutter only
// REWRITES a buffer's meta region when the cursor changed, so recycled buffers
@@ -1573,14 +1548,6 @@ mod pipewire {
cursor.bw = bw;
cursor.bh = bh;
cursor.serial = cursor.serial.wrapping_add(1);
// TEMP M2b probe (see above): bitmap accepted — once per shape change by construction.
tracing::info!(
bw,
bh,
vfmt,
serial = cursor.serial,
"cursor meta probe: bitmap cached"
);
}
/// Destination channel byte offsets (R,G,B) and bytes-per-pixel for a packed-RGB `PixelFormat`,
+6 -2
View File
@@ -763,7 +763,9 @@ impl EiState {
// raw client pixels as the last resort.
let nx = (ev.x as f32 / w).clamp(0.0, 1.0);
let ny = (ev.y as f32 / h).clamp(0.0, 1.0);
let (x, y) = match region_for_mode(slot.regions(), w, h).filter(|r| sane_region(r)) {
let (x, y) = match region_for_mode(slot.regions(), w, h)
.filter(|r| sane_region(r))
{
Some(region) => (
region.x as f32 + nx * region.width as f32,
region.y as f32 + ny * region.height as f32,
@@ -846,7 +848,9 @@ impl EiState {
let nx = (ev.x as f32 / w).clamp(0.0, 1.0);
let ny = (ev.y as f32 / h).clamp(0.0, 1.0);
// Same region-selection + degenerate fallback ladder as MouseMoveAbs.
let (x, y) = match region_for_mode(slot.regions(), w, h).filter(|r| sane_region(r)) {
let (x, y) = match region_for_mode(slot.regions(), w, h)
.filter(|r| sane_region(r))
{
Some(region) => (
region.x as f32 + nx * region.width as f32,
region.y as f32 + ny * region.height as f32,
@@ -2110,34 +2110,6 @@ pub(super) fn virtual_stream(ctx: SessionContext, prepared: Option<PreparedDispl
if let Some(live) = capturer.cursor() {
frame.cursor = Some(live);
}
// TEMP KWin composite probe (DROP BEFORE MERGE): what the composite arm actually
// hands the encoder — on-glass the blend module loads yet nothing draws, so the
// open question is whether an overlay reaches the frame at all.
#[cfg(not(target_os = "windows"))]
{
use std::sync::atomic::{AtomicU64, Ordering as ProbeOrd};
static PROBE_COMPOSITE: AtomicU64 = AtomicU64::new(0);
let n = PROBE_COMPOSITE.fetch_add(1, ProbeOrd::Relaxed) + 1;
if n == 1 || n % 512 == 0 {
match frame.cursor.as_ref() {
Some(c) => tracing::info!(
n,
x = c.x,
y = c.y,
w = c.w,
h = c.h,
visible = c.visible,
serial = c.serial,
"composite probe: overlay riding to the encoder"
),
None => tracing::info!(
n,
"composite probe: NO overlay on the frame (capturer.cursor() None \
and no frame-attached overlay)"
),
}
}
}
}
} else if gamescope_composite {
// gamescope (Phase C): no channel, host always composites. Refresh the (repeat or new)