From a2dda33abe9b9fac69812e4dd8a7abdd8fdf394e Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Tue, 22 Jul 2025 17:16:50 +0200 Subject: [PATCH] kms: Add min_vrr refresh rate safety margin --- src/backend/kms/surface/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/kms/surface/mod.rs b/src/backend/kms/surface/mod.rs index 6906f342..583c8530 100644 --- a/src/backend/kms/surface/mod.rs +++ b/src/backend/kms/surface/mod.rs @@ -671,10 +671,11 @@ impl SurfaceThreadState { Duration::from_secs_f64(1_000. / drm_helpers::calculate_refresh_rate(mode) as f64); self.timings.set_refresh_interval(Some(interval)); + const SAFETY_MARGIN: u32 = 2; // Magic two frames margin taken from kwin to not trigger low-framerate-compensation let min_min_refresh_interval = Duration::from_secs_f64(1. / 30.); // 30Hz self.timings.set_min_refresh_interval(Some( min_hz - .map(|min| Duration::from_secs_f64(1. / min as f64)) + .map(|min| Duration::from_secs_f64(1. / (min + SAFETY_MARGIN) as f64)) .unwrap_or(min_min_refresh_interval) // alternatively use 30Hz .max(min_min_refresh_interval), ));