aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenny Levinsen <kl@kl.wtf>2024-07-15 00:12:39 +0200
committerSimon Ser <contact@emersion.fr>2024-07-17 08:44:16 +0200
commit19ca790a9f304bb138e531719a8a42f145f835f9 (patch)
tree9647440d40ed0b838be2e23aa731a3d785b5466a
parent6320aef295ef82613c54c5b1519f64a8a4e25cb3 (diff)
desktop/output: Stop repaint loop when not needed
1e0031781fc9 refactored repaint to accumulate all changes in a single wlr_output_state and commit them at the end of the repaint loop, replacing a call to wlr_scene_output_commit. wlr_scene_output_commit contains an early bail-out when no frame has been requested and no damage has accumulated, which was not replicated as part of this refactor, causing the repaint loop to never pause. Replicate the logic to stop the repaint loop as needed. Fixes: 1e0031781fc9 ("desktop/output: unify page-flip codepath") (cherry picked from commit 3f327b3db0c1fc6985c0ed3231e1bd6296584dad)
-rw-r--r--sway/desktop/output.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index f936b2a8..27ede68e 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -247,6 +247,13 @@ static int output_repaint_timer_handler(void *data) {
.color_transform = output->color_transform,
};
+ struct wlr_output *wlr_output = output->wlr_output;
+ struct wlr_scene_output *scene_output = output->scene_output;
+ if (!wlr_output->needs_frame && !output->gamma_lut_changed &&
+ !pixman_region32_not_empty(&scene_output->pending_commit_damage)) {
+ return 0;
+ }
+
struct wlr_output_state pending;
wlr_output_state_init(&pending);
if (!wlr_scene_output_build_state(output->scene_output, &pending, &opts)) {