aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-10-05 13:10:22 +0200
committerGitHub <noreply@github.com>2018-10-05 13:10:22 +0200
commit1280b4920d311e311e339a6f13b004bac6bc668f (patch)
tree8353432463f49d27e94304215eae9129ca727cf3
parent24a48d4858a9d5eda0be86e20cbf0d378895063a (diff)
parentb7b781ff448675cc8486d7aa8f6d78d1f1e7c727 (diff)
Merge pull request #1282 from RyanDwyer/fix-idle-frame
Prevent excessive frame events when compositor doesn't swap buffers
-rw-r--r--types/wlr_output.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/types/wlr_output.c b/types/wlr_output.c
index b3840415..c407ca0b 100644
--- a/types/wlr_output.c
+++ b/types/wlr_output.c
@@ -472,10 +472,6 @@ bool wlr_output_swap_buffers(struct wlr_output *output, struct timespec *when,
wlr_log(WLR_ERROR, "Tried to swap buffers when a frame is pending");
return false;
}
- if (output->idle_frame != NULL) {
- wl_event_source_remove(output->idle_frame);
- output->idle_frame = NULL;
- }
int width, height;
wlr_output_transformed_resolution(output, &width, &height);
@@ -529,7 +525,6 @@ bool wlr_output_swap_buffers(struct wlr_output *output, struct timespec *when,
return false;
}
- output->frame_pending = true;
output->needs_swap = false;
pixman_region32_clear(&output->damage);
@@ -540,6 +535,12 @@ bool wlr_output_swap_buffers(struct wlr_output *output, struct timespec *when,
void wlr_output_send_frame(struct wlr_output *output) {
output->frame_pending = false;
wlr_signal_emit_safe(&output->events.frame, output);
+ output->frame_pending = true;
+
+ if (output->idle_frame != NULL) {
+ wl_event_source_remove(output->idle_frame);
+ output->idle_frame = NULL;
+ }
}
static void schedule_frame_handle_idle_timer(void *data) {