From 39d4f1854b6fc0ebf6df2477598b970e6d1f73bf Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 14 Sep 2026 17:19:58 +0800 Subject: [PATCH] chore(qos): remove verbose diagnostics while retaining trace logs (#16214) --- src/server/connection.rs | 31 ----------------------------- src/server/video_qos.rs | 2 +- src/server/video_service.rs | 39 ------------------------------------- 3 files changed, 1 insertion(+), 71 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index 8ac850958..24f5bf537 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -299,12 +299,6 @@ pub struct Connection { tx_input: std_mpsc::Sender, // handle input messages video_ack_required: bool, - // Diagnostics only, gated by `RUSTDESK_QOS_VERBOSE`: how long the shared - // write path blocked this second. The video send is inline in the message - // loop, so a slow write also delays the delay probe and its reply. - video_send_max_ms: u32, - video_send_sum_ms: u32, - video_send_count: u32, server_audit_conn: String, server_audit_file: String, controlled_context: Option, @@ -510,9 +504,6 @@ impl Connection { show_my_cursor: false, tx_input, video_ack_required: false, - video_send_max_ms: 0, - video_send_sum_ms: 0, - video_send_count: 0, server_audit_conn: "".to_owned(), server_audit_file: "".to_owned(), controlled_context, @@ -959,17 +950,10 @@ impl Connection { video_service::notify_video_frame_fetched(vf.display as usize, id, Some(instant.into())); } } - let send_begin = video_service::qos_diag_verbose().then(Instant::now); if let Err(err) = conn.stream.send(&value as &Message).await { conn.on_close(&err.to_string(), false).await; break; } - if let Some(begin) = send_begin { - let blocked = begin.elapsed().as_millis() as u32; - conn.video_send_max_ms = conn.video_send_max_ms.max(blocked); - conn.video_send_sum_ms = conn.video_send_sum_ms.saturating_add(blocked); - conn.video_send_count += 1; - } }, Some((instant, value)) = rx.recv() => { let latency = instant.elapsed().as_millis() as i64; @@ -1056,21 +1040,6 @@ impl Connection { break; } } - if video_service::qos_diag_verbose() && conn.video_send_count > 0 { - // Joined with `qos_trace` on `t`: a probe that waits behind a - // blocked write is not a slow network. - log::debug!( - "qos_send t={} id={id} frames={} send_max={} send_sum={} queued={}", - hbb_common::get_time(), - conn.video_send_count, - conn.video_send_max_ms, - conn.video_send_sum_ms, - rx_video.len() - ); - conn.video_send_max_ms = 0; - conn.video_send_sum_ms = 0; - conn.video_send_count = 0; - } conn.file_remove_log_control.on_timer().drain(..).map(|x| conn.send_to_cm(x)).count(); #[cfg(feature = "hwcodec")] conn.update_supported_encoding(); diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs index 2fa85df0b..cfb874f66 100644 --- a/src/server/video_qos.rs +++ b/src/server/video_qos.rs @@ -625,7 +625,7 @@ impl VideoQoS { .clamp(MIN_AUTO_FPS.min(user_cap), user_cap) .min(current); user.delay.fps = Some(fps); - log::debug!( + log::trace!( "qos_trace t={} id={id} timeout={elapsed} fps={fps}", hbb_common::get_time() ); diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 195441b38..e91ecc7d4 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -655,12 +655,6 @@ fn run(vs: VideoService) -> ResultType<()> { let capture_width = c.width; let capture_height = c.height; let (mut second_instant, mut send_counter) = (Instant::now(), 0); - // Diagnostics only. `send_counter` counts capture rounds, which is not the - // number of frames that reached a connection: the encoder's own rate control - // drops frames when the bitrate cannot carry them. `wait_max_ms` is how long - // a round waited for the previous frame to be picked up, so a blocked write - // shows up here as capture stalling rather than as a slow network. - let (mut sent_counter, mut wait_max_ms) = (0usize, 0u32); while sp.ok() { #[cfg(windows)] @@ -671,8 +665,6 @@ fn run(vs: VideoService) -> ResultType<()> { &mut spf, client_record, &mut send_counter, - &mut sent_counter, - &mut wait_max_ms, &mut second_instant, &sp.name(), )?; @@ -793,9 +785,6 @@ fn run(vs: VideoService) -> ResultType<()> { capture_width, capture_height, )?; - if !send_conn_ids.is_empty() { - sent_counter += 1; - } frame_controller.set_send(now, send_conn_ids); send_counter += 1; } @@ -855,9 +844,6 @@ fn run(vs: VideoService) -> ResultType<()> { capture_width, capture_height, )?; - if !send_conn_ids.is_empty() { - sent_counter += 1; - } frame_controller.set_send(now, send_conn_ids); send_counter += 1; } @@ -899,7 +885,6 @@ fn run(vs: VideoService) -> ResultType<()> { break; } } - wait_max_ms = wait_max_ms.max(wait_begin.elapsed().as_millis() as u32); DISPLAY_CONN_IDS.lock().unwrap().remove(&display_idx); let elapsed = now.elapsed(); @@ -1330,22 +1315,12 @@ pub fn make_display_changed_msg( Some(msg_out) } -/// Per-second pipeline diagnostics, off unless `RUSTDESK_QOS_VERBOSE` is set. -/// The default log level is `debug`, so an unconditional line here would land in -/// every user's log file once a second forever. Nothing enables it implicitly. -pub(crate) fn qos_diag_verbose() -> bool { - static VERBOSE: std::sync::OnceLock = std::sync::OnceLock::new(); - *VERBOSE.get_or_init(|| std::env::var("RUSTDESK_QOS_VERBOSE").is_ok()) -} - fn check_qos( encoder: &mut Encoder, ratio: &mut f32, spf: &mut Duration, client_record: bool, send_counter: &mut usize, - sent_counter: &mut usize, - wait_max_ms: &mut u32, second_instant: &mut Instant, name: &str, ) -> ResultType<()> { @@ -1371,21 +1346,7 @@ fn check_qos( if second_instant.elapsed() > Duration::from_secs(1) { *second_instant = Instant::now(); video_qos.update_display_data(&name, *send_counter); - // Diagnostics only, joined with `qos_trace` on `t`: the controller's target - // is not the rate the encoder produced, and neither is the rate the send - // path accepted. - if qos_diag_verbose() { - log::debug!( - "qos_video t={} display={name} captured={} sent={} wait_max={}", - hbb_common::get_time(), - *send_counter, - *sent_counter, - *wait_max_ms - ); - } *send_counter = 0; - *sent_counter = 0; - *wait_max_ms = 0; } drop(video_qos); Ok(())