fix(viewer): HUD 每秒强制呈现(不依赖视频帧)+ 标题栏版本号

- HUD 此前仅在 dirty(收到新帧)时绘制,视频流异常/帧被丢弃时面板
  永不出现,且掩盖了排障信息;改为每秒统计刷新时强制 update_with_buffer
- 窗口标题加 v0.6-HUD 版本标记,用于识别误跑旧版 exe(排障关键)
- 回环实测:NVENC 4ms/帧、解码 1920x1080 匹配、14s 零错误
This commit is contained in:
dev-team 2026-10-23 10:45:46 +08:00
parent e00175385d
commit 00b318af8b

View File

@ -362,7 +362,7 @@ fn session(
};
let mut window = Window::new(
"mvp-remote viewer (Esc 退出)",
"mvp-remote v0.6-HUD (Esc 退出)",
w,
h,
WindowOptions {
@ -471,7 +471,8 @@ fn session(
}
}
// 6) HUD:每秒刷新一次指标,画在右上角
// 6) HUD:指标每秒刷新一次;每秒至少强制呈现一次(视频冻结/黑屏时 HUD 依然可见)
let mut need_present = dirty;
let (hud_loss, hud_jit, hud_p95, hud_dec);
if hud_last.elapsed() >= Duration::from_secs(1) {
let f = stats.frames.load(Ordering::Relaxed);
@ -494,13 +495,14 @@ fn session(
hud_p95 = stats.gap_p95();
hud_dec = stats.dec_fail.load(Ordering::Relaxed);
hud_last = Instant::now();
need_present = true; // HUD 面板每秒至少重绘一次
} else {
hud_loss = f64::NAN;
hud_jit = 0;
hud_p95 = None;
hud_dec = 0;
}
if dirty {
if need_present {
let rtt = stats.rtt.load(Ordering::Relaxed);
let e2e = stats.e2e.load(Ordering::Relaxed);
let e2e_ok = stats.e2e_valid.load(Ordering::Relaxed);