diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-04 14:26:55 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-04 14:26:55 +0400 |
| commit | 59a6119f46e40bf5a87cd4d533a8a223569e8e84 (patch) | |
| tree | b516c47436eb096b4b16a9fcf4132f1a8435230e /src/backend/tty.rs | |
| parent | 786e0fa4f0a4faa5fd94a8270f9473e75e9f5b86 (diff) | |
| download | niri-59a6119f46e40bf5a87cd4d533a8a223569e8e84.tar.gz niri-59a6119f46e40bf5a87cd4d533a8a223569e8e84.tar.bz2 niri-59a6119f46e40bf5a87cd4d533a8a223569e8e84.zip | |
Fix refresh passed to presentation feedback
Diffstat (limited to 'src/backend/tty.rs')
| -rw-r--r-- | src/backend/tty.rs | 33 |
1 files changed, 18 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); |
