feat(portal): independent WebRTC thread + channel tuning for 60fps mouse latency
- Move WebRTC send to dedicated wl-webrtc-webrtc thread (was inline in main loop) - Reduce frame_rx 16→1, input_tx 2→1 (drop-on-full), webrtc_tx 32→2 - Recv_timeout 10ms→2ms to reduce pipeline latency - Fix sent_gap_p95 stats bug: compute gap at actual send time in WebRTC thread instead of batch-draining at snapshot time (was always 0.0ms) - High profile via AVCodecContext.profile, veryfast preset, 5x bitrate - Stats drain via sent_gap channel with record_send_from_thread() - Shutdown: drop input_tx → join encode → drop webrtc_tx → join webrtc
This commit is contained in:
@@ -166,6 +166,17 @@ impl PipelineStats {
|
||||
}
|
||||
}
|
||||
|
||||
/// Record a frame sent from a background WebRTC thread.
|
||||
/// `gap_ms` is the pre-computed time since the previous send (0.0 = first frame).
|
||||
/// Unlike `record_send`, this does not sample `Instant::now()`, so it remains
|
||||
/// accurate even when batch-drained at stats snapshot time.
|
||||
pub fn record_send_from_thread(&mut self, gap_ms: f64) {
|
||||
if gap_ms > 0.0 {
|
||||
self.sent_gaps_ms.push(gap_ms);
|
||||
}
|
||||
self.sent_frames += 1;
|
||||
}
|
||||
|
||||
/// Update PipeWire dropped counter (absolute value from AtomicU64).
|
||||
pub fn set_pipewire_dropped(&mut self, total_dropped: u64, prev_dropped: u64) {
|
||||
self.pipewire_dropped = total_dropped.saturating_sub(prev_dropped);
|
||||
|
||||
Reference in New Issue
Block a user