clutter: Introduce ClutterFrame

ClutterFrame aims to carry information valid during dispatching a frame.
A frame may or may not include redrawing, but will always end with a
result.

A asynchronous page flip, for example, will result in a
CLUTTER_FRAME_RESULT_PENDING_PRESENTED, while a frame that only
dispatched events etc will result in CLUTTER_FRAME_RESULT_IDLE. Instead
of this being implicit, make the ClutterStageWindow implementation
handle this itself.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1488>
This commit is contained in:
Jonas Ådahl
2020-10-09 18:16:16 +02:00
committed by Marge Bot
parent 9c500f23e4
commit 72b35e07c0
12 changed files with 159 additions and 21 deletions

View File

@ -107,12 +107,16 @@ meta_stage_native_get_views (ClutterStageWindow *stage_window)
static void
meta_stage_native_finish_frame (ClutterStageWindow *stage_window,
ClutterStageView *stage_view)
ClutterStageView *stage_view,
ClutterFrame *frame)
{
MetaBackend *backend = meta_get_backend ();
MetaRenderer *renderer = meta_backend_get_renderer (backend);
meta_renderer_native_finish_frame (META_RENDERER_NATIVE (renderer));
if (!clutter_frame_has_result (frame))
clutter_frame_set_result (frame, CLUTTER_FRAME_RESULT_IDLE);
}
static void

View File

@ -159,7 +159,8 @@ draw_view (MetaStageX11Nested *stage_nested,
static void
meta_stage_x11_nested_finish_frame (ClutterStageWindow *stage_window,
ClutterStageView *stage_view)
ClutterStageView *stage_view,
ClutterFrame *frame)
{
MetaStageX11Nested *stage_nested = META_STAGE_X11_NESTED (stage_window);
MetaStageX11 *stage_x11 = META_STAGE_X11 (stage_window);
@ -196,6 +197,9 @@ meta_stage_x11_nested_finish_frame (ClutterStageWindow *stage_window,
frame_info = cogl_frame_info_new (0);
cogl_onscreen_swap_buffers (stage_x11->onscreen, frame_info);
if (!clutter_frame_has_result (frame))
clutter_frame_set_result (frame, CLUTTER_FRAME_RESULT_IDLE);
}
static void