[PATCH weston v3 12/13] window: throttle resizing to the main surface

Pekka Paalanen ppaalanen at gmail.com
Thu Apr 25 03:57:52 PDT 2013


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 at gmail.com>
---
 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



More information about the wayland-devel mailing list