window: throttle resizing to the main surface

In case a toytoolkit application manages to schedule resizes constantly,
throttle them to the main surface display.

When resizing, all surfaces are updated synchronously, so it also makes
sense to synchronize on the main surface's frame callback particularly.
Rendering any faster will not make sense.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
This commit is contained in:
Pekka Paalanen 2013-04-25 13:57:52 +03:00 committed by Kristian Høgsberg
parent e9297f8e7e
commit eebff54c03

View File

@ -3561,16 +3561,21 @@ idle_redraw(struct task *task, uint32_t events)
struct window *window = container_of(task, struct window, redraw_task);
struct surface *surface;
if (window->resize_needed)
wl_list_init(&window->redraw_task.link);
window->redraw_task_scheduled = 0;
if (window->resize_needed) {
/* throttle resizing to the main surface display */
if (window->main_surface->frame_cb)
return;
idle_resize(window);
}
wl_list_for_each(surface, &window->subsurface_list, link)
surface_redraw(surface);
window->redraw_needed = 0;
wl_list_init(&window->redraw_task.link);
window->redraw_task_scheduled = 0;
window_flush(window);
wl_list_for_each(surface, &window->subsurface_list, link)