From d84f7971e476a1e2d727310d9a33ac4080137f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 14 Jan 2022 22:12:36 +0100 Subject: [PATCH] tests/utils: Add meta_wait_for_paint() helper This function queues a full stage redraw, then waits for every view to receive the "presented" signal before returning. Part-of: --- src/tests/meta-test-utils.c | 28 ++++++++++++++++++++++++++++ src/tests/meta-test-utils.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/src/tests/meta-test-utils.c b/src/tests/meta-test-utils.c index 9701ce250..61600f107 100644 --- a/src/tests/meta-test-utils.c +++ b/src/tests/meta-test-utils.c @@ -614,3 +614,31 @@ meta_set_custom_monitor_config (MetaBackend *backend, &error)) g_error ("Failed to set custom config: %s", error->message); } + +static void +on_view_presented (ClutterStage *stage, + ClutterStageView *view, + ClutterFrameInfo *frame_info, + GList **presented_views) +{ + *presented_views = g_list_remove (*presented_views, view); +} + +void +meta_wait_for_paint (MetaContext *context) +{ + MetaBackend *backend = meta_context_get_backend (context); + ClutterActor *stage = meta_backend_get_stage (backend); + MetaRenderer *renderer = meta_backend_get_renderer (backend); + GList *views; + gulong handler_id; + + clutter_actor_queue_redraw (stage); + + views = g_list_copy (meta_renderer_get_views (renderer)); + handler_id = g_signal_connect (stage, "presented", + G_CALLBACK (on_view_presented), &views); + while (views) + g_main_context_iteration (NULL, TRUE); + g_signal_handler_disconnect (stage, handler_id); +} diff --git a/src/tests/meta-test-utils.h b/src/tests/meta-test-utils.h index cf9df9d41..685d4febe 100644 --- a/src/tests/meta-test-utils.h +++ b/src/tests/meta-test-utils.h @@ -112,4 +112,7 @@ META_EXPORT void meta_set_custom_monitor_config (MetaBackend *backend, const char *filename); +META_EXPORT +void meta_wait_for_paint (MetaContext *context); + #endif /* TEST_UTILS_H */