aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/tty.rs33
-rw-r--r--src/frame_clock.rs4
2 files changed, 22 insertions, 15 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index 194e49a0..64edd8c2 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -320,12 +320,27 @@ impl Tty {
.unwrap()
.message(&message, 0);
+ let output = data
+ .state
+ .niri
+ .global_space
+ .outputs()
+ .find(|output| {
+ let tty_state: &TtyOutputState = output.user_data().get().unwrap();
+ tty_state.device_id == device.id && tty_state.crtc == crtc
+ })
+ .unwrap()
+ .clone();
+ let output_state = data.state.niri.output_state.get_mut(&output).unwrap();
+
// Mark the last frame as submitted.
match surface.compositor.frame_submitted() {
Ok(Some(mut feedback)) => {
- let refresh =
- feedback.output().unwrap().current_mode().unwrap().refresh
- as u32;
+ let refresh = output_state
+ .frame_clock
+ .refresh_interval_ns()
+ .and_then(|r| u32::try_from(r.get()).ok())
+ .unwrap_or(0);
// FIXME: ideally should be monotonically increasing for a surface.
let seq = metadata.as_ref().unwrap().sequence as u64;
let flags = wp_presentation_feedback::Kind::Vsync
@@ -345,18 +360,6 @@ impl Tty {
}
}
- let output = data
- .state
- .niri
- .global_space
- .outputs()
- .find(|output| {
- let tty_state: &TtyOutputState = output.user_data().get().unwrap();
- tty_state.device_id == device.id && tty_state.crtc == crtc
- })
- .unwrap()
- .clone();
- let output_state = data.state.niri.output_state.get_mut(&output).unwrap();
output_state.waiting_for_vblank = false;
output_state.frame_clock.presented(presentation_time);
data.state.niri.queue_redraw(output);
diff --git a/src/frame_clock.rs b/src/frame_clock.rs
index 5d540f8d..61ad9572 100644
--- a/src/frame_clock.rs
+++ b/src/frame_clock.rs
@@ -24,6 +24,10 @@ impl FrameClock {
}
}
+ pub fn refresh_interval_ns(&self) -> Option<NonZeroU64> {
+ self.refresh_interval_ns
+ }
+
pub fn presented(&mut self, presentation_time: Duration) {
if presentation_time.is_zero() {
// Not interested in these.