output: make wlr_output_schedule_frame set output->needs_frame

This way, wlr_output_schedule_frame will always be followed by a
wlr_output_commit. This forces the compositor to render an extra
frame before stopping the rendering loop.

To test, run wleird's frame-callback [1], make sure it's the only
visible client on the output and check the interval between frame
events is the output's refresh period instead of zero.

[1]: https://github.com/emersion/wleird/blob/master/frame-callback.c

Closes: https://github.com/swaywm/wlroots/issues/2051
This commit is contained in:
Simon Ser 2020-03-05 13:24:46 +01:00 committed by Drew DeVault
parent 4bb391c896
commit a4c7c6db09
1 changed files with 2 additions and 0 deletions

View File

@ -621,6 +621,8 @@ static void schedule_frame_handle_idle_timer(void *data) {
} }
void wlr_output_schedule_frame(struct wlr_output *output) { void wlr_output_schedule_frame(struct wlr_output *output) {
wlr_output_update_needs_frame(output);
if (output->frame_pending || output->idle_frame != NULL) { if (output->frame_pending || output->idle_frame != NULL) {
return; return;
} }