aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwen <gwenpark37@gmail.com>2025-06-04 01:56:21 +1000
committerGitHub <noreply@github.com>2025-06-03 15:56:21 +0000
commita7186a0441fe866784a601c6192850267802dca5 (patch)
tree7cb151d4de5d70757b74c547d293666e1da6d98a
parent1911cf3f55ac3d9d24c8692434a93214dcbde9ba (diff)
downloadniri-a7186a0441fe866784a601c6192850267802dca5.tar.gz
niri-a7186a0441fe866784a601c6192850267802dca5.tar.bz2
niri-a7186a0441fe866784a601c6192850267802dca5.zip
Add debug option to skip cursor-only updates while VRR is active (#1616)
* Add debug option to skip cursor-only updates while VRR is active * Update niri-config/src/lib.rs Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com> * Update src/backend/tty.rs Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com> * Update wiki/Configuration:-Debug-Options.md Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com> * Update Configuration:-Debug-Options.md * Update tty.rs * Update lib.rs * Update Configuration:-Debug-Options.md --------- Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
-rw-r--r--niri-config/src/lib.rs3
-rw-r--r--src/backend/tty.rs6
-rw-r--r--wiki/Configuration:-Debug-Options.md17
3 files changed, 26 insertions, 0 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs
index 44aeffe9..012db9e9 100644
--- a/niri-config/src/lib.rs
+++ b/niri-config/src/lib.rs
@@ -2329,6 +2329,8 @@ pub struct DebugConfig {
pub strict_new_window_focus_policy: bool,
#[knuffel(child)]
pub honor_xdg_activation_with_invalid_serial: bool,
+ #[knuffel(child)]
+ pub skip_cursor_only_updates_during_vrr: bool,
}
#[derive(knuffel::DecodeScalar, Debug, Clone, Copy, PartialEq, Eq)]
@@ -5286,6 +5288,7 @@ mod tests {
disable_monitor_names: false,
strict_new_window_focus_policy: false,
honor_xdg_activation_with_invalid_serial: false,
+ skip_cursor_only_updates_during_vrr: false,
},
workspaces: [
Workspace {
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index 363526d4..3b5cd31c 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -1422,6 +1422,12 @@ impl Tty {
if debug.disable_cursor_plane {
flags.remove(FrameFlags::ALLOW_CURSOR_PLANE_SCANOUT);
}
+ if debug.skip_cursor_only_updates_during_vrr {
+ let output_state = niri.output_state.get(output).unwrap();
+ if output_state.frame_clock.vrr() {
+ flags.insert(FrameFlags::SKIP_CURSOR_ONLY_UPDATES);
+ }
+ }
flags
};
diff --git a/wiki/Configuration:-Debug-Options.md b/wiki/Configuration:-Debug-Options.md
index 639df325..cf59d8b6 100644
--- a/wiki/Configuration:-Debug-Options.md
+++ b/wiki/Configuration:-Debug-Options.md
@@ -29,6 +29,7 @@ debug {
disable-monitor-names
strict-new-window-focus-policy
honor-xdg-activation-with-invalid-serial
+ skip-cursor-only-updates-during-vrr
}
binds {
@@ -275,6 +276,22 @@ debug {
}
```
+### `skip-cursor-only-updates-during-vrr`
+
+<sup>Since: next release</sup>
+
+Skips redrawing the screen from cursor input while variable refresh rate is active.
+
+Useful for games where the cursor isn't drawn internally to prevent erratic VRR shifts in response to cursor movement.
+
+Note that the current implementation has some issues, for example when there's nothing redrawing the screen (like a game), the rendering will appear to completely freeze (since cursor movements won't cause redraws).
+
+```kdl
+debug {
+ skip-cursor-only-updates-during-vrr
+}
+```
+
### Key Bindings
These are not debug options, but rather key bindings.