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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2237>
This commit is contained in:
parent
57d1d82ead
commit
d84f7971e4
@ -614,3 +614,31 @@ meta_set_custom_monitor_config (MetaBackend *backend,
|
|||||||
&error))
|
&error))
|
||||||
g_error ("Failed to set custom config: %s", error->message);
|
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);
|
||||||
|
}
|
||||||
|
@ -112,4 +112,7 @@ META_EXPORT
|
|||||||
void meta_set_custom_monitor_config (MetaBackend *backend,
|
void meta_set_custom_monitor_config (MetaBackend *backend,
|
||||||
const char *filename);
|
const char *filename);
|
||||||
|
|
||||||
|
META_EXPORT
|
||||||
|
void meta_wait_for_paint (MetaContext *context);
|
||||||
|
|
||||||
#endif /* TEST_UTILS_H */
|
#endif /* TEST_UTILS_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user