diff --git a/crates/punktfunk-host/src/native/stream.rs b/crates/punktfunk-host/src/native/stream.rs index 0be9248a..1d353eb6 100644 --- a/crates/punktfunk-host/src/native/stream.rs +++ b/crates/punktfunk-host/src/native/stream.rs @@ -335,6 +335,11 @@ struct FrameMsg { /// nor a stats capture is armed). The send thread accumulates them for the web-console sample: /// `cap_us` = `try_latest` (ring read + colour convert), `submit_us` = NVENC `encode_picture` /// launch, `wait_us` = `lock_bitstream` (the scheduling wait + ASIC encode = the "encode" stage). + /// SYNCHRONOUS backends (PyroWave: the whole GPU encode + fence wait runs inside `submit`) + /// carry their real encode time in `submit_us`, and the "encode" stage reads ~0 by + /// construction — read the pair together (the 2026-07 field triage read "encode 0.00" as an + /// instrumentation hole; it's the stage split's shape). The client-facing 0xCF `encode_us` + /// is unaffected: its anchor is stamped before `submit`, so it spans both. cap_us: u32, submit_us: u32, wait_us: u32, @@ -1118,9 +1123,13 @@ pub(super) fn virtual_stream(ctx: SessionContext, prepared: Option