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 <[email protected]>
---
 clients/window.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index ab9a36e..b72c2ca 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)
-- 
1.8.1.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to