diff --git a/clutter/clutter/clutter-stage.h b/clutter/clutter/clutter-stage.h index 441b10ba6..758cfade6 100644 --- a/clutter/clutter/clutter-stage.h +++ b/clutter/clutter/clutter-stage.h @@ -114,6 +114,13 @@ struct _ClutterPerspective gfloat z_far; }; +typedef enum +{ + CLUTTER_FRAME_INFO_FLAG_NONE = 0, + /* presentation_time timestamp was provided by the hardware */ + CLUTTER_FRAME_INFO_FLAG_HW_CLOCK = 1 << 0, +} ClutterFrameInfoFlag; + /** * ClutterFrameInfo: (skip) */ @@ -122,6 +129,8 @@ struct _ClutterFrameInfo int64_t frame_counter; int64_t presentation_time; float refresh_rate; + + ClutterFrameInfoFlag flags; }; typedef struct _ClutterCapture diff --git a/clutter/clutter/cogl/clutter-stage-cogl.c b/clutter/clutter/cogl/clutter-stage-cogl.c index b9f5af6e4..165e2ecea 100644 --- a/clutter/clutter/cogl/clutter-stage-cogl.c +++ b/clutter/clutter/cogl/clutter-stage-cogl.c @@ -318,6 +318,7 @@ swap_framebuffer (ClutterStageWindow *stage_window, .frame_counter = priv->global_frame_counter, .refresh_rate = clutter_stage_view_get_refresh_rate (view), .presentation_time = g_get_monotonic_time (), + .flags = CLUTTER_FRAME_INFO_FLAG_NONE, }; priv->global_frame_counter++; @@ -825,12 +826,17 @@ frame_cb (CoglOnscreen *onscreen, else { ClutterFrameInfo clutter_frame_info; + ClutterFrameInfoFlag flags = CLUTTER_FRAME_INFO_FLAG_NONE; + + if (cogl_frame_info_is_hw_clock (frame_info)) + flags |= CLUTTER_FRAME_INFO_FLAG_HW_CLOCK; clutter_frame_info = (ClutterFrameInfo) { .frame_counter = cogl_frame_info_get_global_frame_counter (frame_info), .refresh_rate = cogl_frame_info_get_refresh_rate (frame_info), .presentation_time = ns2us (cogl_frame_info_get_presentation_time (frame_info)), + .flags = flags, }; clutter_stage_view_notify_presented (view, &clutter_frame_info); } diff --git a/src/tests/clutter/conform/frame-clock-timeline.c b/src/tests/clutter/conform/frame-clock-timeline.c index 7e5798b4e..cee2d369f 100644 --- a/src/tests/clutter/conform/frame-clock-timeline.c +++ b/src/tests/clutter/conform/frame-clock-timeline.c @@ -14,6 +14,7 @@ timeline_frame_clock_frame (ClutterFrameClock *frame_clock, frame_info = (ClutterFrameInfo) { .presentation_time = g_get_monotonic_time (), .refresh_rate = refresh_rate, + .flags = CLUTTER_FRAME_INFO_FLAG_NONE, }; clutter_frame_clock_notify_presented (frame_clock, &frame_info); clutter_frame_clock_schedule_update (frame_clock); diff --git a/src/tests/clutter/conform/frame-clock.c b/src/tests/clutter/conform/frame-clock.c index a055992b3..1354c8423 100644 --- a/src/tests/clutter/conform/frame-clock.c +++ b/src/tests/clutter/conform/frame-clock.c @@ -32,6 +32,7 @@ init_frame_info (ClutterFrameInfo *frame_info, *frame_info = (ClutterFrameInfo) { .presentation_time = presentation_time_us, .refresh_rate = refresh_rate, + .flags = CLUTTER_FRAME_INFO_FLAG_NONE, }; }