From 9d522ed51e75d1253793f9f5ec42b8faf36e47e7 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Thu, 20 Nov 2025 12:55:45 +0300 Subject: tty: Throttle VBlanks on displays running faster than expected Co-authored-by: Christian Meissl Co-authored-by: Scott McKendry <39483124+scottmckendry@users.noreply.github.com> --- src/backend/tty.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/backend') diff --git a/src/backend/tty.rs b/src/backend/tty.rs index 891e8c79..fcae8087 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -1633,6 +1633,22 @@ impl Tty { presentation_time }; + if output_state + .vblank_throttle + .throttle(refresh_interval, time, move |state| { + let meta = DrmEventMetadata { + sequence: meta.sequence, + time: DrmEventTime::Monotonic(Duration::ZERO), + }; + + let tty = state.backend.tty(); + tty.on_vblank(&mut state.niri, node, crtc, meta); + }) + { + // Throttled. + return; + } + let redraw_needed = match mem::replace(&mut output_state.redraw_state, RedrawState::Idle) { RedrawState::WaitingForVBlank { redraw_needed } => redraw_needed, state @ (RedrawState::Idle -- cgit