Don't redraw on cursor movements unless required

This commit is contained in:
buffet 2021-08-14 21:31:31 +00:00
parent c6012cf08b
commit c54abdba2c
2 changed files with 20 additions and 7 deletions

View file

@ -137,6 +137,18 @@ send_frame_done_to_surface(
wlr_surface_send_frame_done(surface, now);
}
static bool
render_cursors(struct wlr_output *wlr_output)
{
pixman_region32_t damage;
pixman_region32_init(&damage);
wlr_output_render_software_cursors(wlr_output, &damage);
bool damaged = pixman_region32_not_empty(&damage);
pixman_region32_fini(&damage);
return damaged;
}
static void
output_frame_notify(struct wl_listener *listener, void *data)
{
@ -147,8 +159,6 @@ output_frame_notify(struct wl_listener *listener, void *data)
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
printf("%d\n", output->damaged);
if (output->damaged == 0) {
send_frame_done_to_layer(
&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &now);
@ -169,6 +179,10 @@ output_frame_notify(struct wl_listener *listener, void *data)
return;
}
if (render_cursors(wlr_output)) {
output->damaged = 2;
}
wlr_output_commit(wlr_output);
return;
}
@ -221,7 +235,10 @@ output_frame_notify(struct wl_listener *listener, void *data)
render_layer(&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &rdata);
render_layer(&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &rdata);
wlr_output_render_software_cursors(wlr_output, NULL);
if (render_cursors(wlr_output)) {
output->damaged = 3;
}
wlr_renderer_end(renderer);
--output->damaged;

View file

@ -126,10 +126,6 @@ process_cursor_motion(struct kiwmi_server *server, uint32_t time)
} else {
wlr_seat_pointer_clear_focus(seat);
}
wl_list_for_each (output, &server->desktop.outputs, link) {
output->damaged = 2;
}
}
static void