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
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:
@@ -236,6 +236,7 @@ impl PwHandles {
|
|||||||
/// Spawn the PipeWire consumer thread for `node_id` (fd `Some` = portal remote, `None` =
|
/// 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 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.
|
/// default size/framerate — for Mutter virtual monitors this is what actually sizes the monitor.
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn spawn_pipewire(
|
fn spawn_pipewire(
|
||||||
fd: Option<OwnedFd>,
|
fd: Option<OwnedFd>,
|
||||||
node_id: u32,
|
node_id: u32,
|
||||||
@@ -1443,19 +1444,8 @@ mod pipewire {
|
|||||||
// that SIGSEGVs inside the PipeWire `.process` callback (a segfault `catch_unwind` cannot
|
// that SIGSEGVs inside the PipeWire `.process` callback (a segfault `catch_unwind` cannot
|
||||||
// catch). Every offset below is validated against `region_size` with checked arithmetic,
|
// 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.
|
// 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) };
|
let meta = unsafe { spa::sys::spa_buffer_find_meta(spa_buf, spa::sys::SPA_META_Cursor) };
|
||||||
if meta.is_null() {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
// SAFETY: `meta` is non-null and points into the held buffer's metadata array.
|
// SAFETY: `meta` is non-null and points into the held buffer's metadata array.
|
||||||
@@ -1475,21 +1465,6 @@ mod pipewire {
|
|||||||
(*cur).bitmap_offset,
|
(*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 {
|
if id == 0 {
|
||||||
// SPA contract: id 0 = "no cursor information", NOT "cursor hidden". Mutter only
|
// 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
|
// REWRITES a buffer's meta region when the cursor changed, so recycled buffers
|
||||||
@@ -1573,14 +1548,6 @@ mod pipewire {
|
|||||||
cursor.bw = bw;
|
cursor.bw = bw;
|
||||||
cursor.bh = bh;
|
cursor.bh = bh;
|
||||||
cursor.serial = cursor.serial.wrapping_add(1);
|
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`,
|
/// Destination channel byte offsets (R,G,B) and bytes-per-pixel for a packed-RGB `PixelFormat`,
|
||||||
|
|||||||
@@ -763,7 +763,9 @@ impl EiState {
|
|||||||
// raw client pixels as the last resort.
|
// raw client pixels as the last resort.
|
||||||
let nx = (ev.x as f32 / w).clamp(0.0, 1.0);
|
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 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) => (
|
Some(region) => (
|
||||||
region.x as f32 + nx * region.width as f32,
|
region.x as f32 + nx * region.width as f32,
|
||||||
region.y as f32 + ny * region.height 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 nx = (ev.x as f32 / w).clamp(0.0, 1.0);
|
||||||
let ny = (ev.y as f32 / h).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.
|
// 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) => (
|
Some(region) => (
|
||||||
region.x as f32 + nx * region.width as f32,
|
region.x as f32 + nx * region.width as f32,
|
||||||
region.y as f32 + ny * region.height 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() {
|
if let Some(live) = capturer.cursor() {
|
||||||
frame.cursor = Some(live);
|
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 {
|
} else if gamescope_composite {
|
||||||
// gamescope (Phase C): no channel, host always composites. Refresh the (repeat or new)
|
// gamescope (Phase C): no channel, host always composites. Refresh the (repeat or new)
|
||||||
|
|||||||
@@ -536,7 +536,8 @@
|
|||||||
// whose capture carries no cursor, and NOT Windows yet, where DWM composites into the IDD
|
// whose capture carries no cursor, and NOT Windows yet, where DWM composites into the IDD
|
||||||
// frame). Set only when the client asked via [`CLIENT_CAP_CURSOR`]; when both bits agree the
|
// frame). Set only when the client asked via [`CLIENT_CAP_CURSOR`]; when both bits agree the
|
||||||
// host stops blending and ships [`CursorShape`](super::control::CursorShape) +
|
// host stops blending and ships [`CursorShape`](super::control::CursorShape) +
|
||||||
// [`CursorState`](super::datagram::CursorState) instead. `0x08` — 0x04 is HOST_CAP_TEXT_INPUT.
|
// [`CursorState`](super::datagram::CursorState) instead. `0x08` — `0x04` is
|
||||||
|
// [`HOST_CAP_TEXT_INPUT`], `0x01`/`0x02` are gamepad-state / clipboard.
|
||||||
#define HOST_CAP_CURSOR 8
|
#define HOST_CAP_CURSOR 8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user