From eebff54c03ad1f93156e05070fb54e9c9bf06635 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Thu, 25 Apr 2013 13:57:52 +0300 Subject: [PATCH] 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 --- clients/window.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/clients/window.c b/clients/window.c index ab9a36e4..b72c2cac 100644 --- a/clients/window.c +++ b/clients/window.c @@ -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)