cogl/frame: Keep track of target presentation time
It's yet to be used for anything, but will later on. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2795>
This commit is contained in:
parent
08b0e563d4
commit
e5602062e2
@ -78,10 +78,17 @@ struct _CoglFrameInfo
|
|||||||
CoglTimestampQuery *timestamp_query;
|
CoglTimestampQuery *timestamp_query;
|
||||||
int64_t gpu_time_before_buffer_swap_ns;
|
int64_t gpu_time_before_buffer_swap_ns;
|
||||||
int64_t cpu_time_before_buffer_swap_us;
|
int64_t cpu_time_before_buffer_swap_us;
|
||||||
|
|
||||||
|
gboolean has_target_presentation_time;
|
||||||
|
int64_t target_presentation_time_us;
|
||||||
};
|
};
|
||||||
|
|
||||||
COGL_EXPORT
|
COGL_EXPORT
|
||||||
CoglFrameInfo *cogl_frame_info_new (CoglContext *context,
|
CoglFrameInfo *cogl_frame_info_new (CoglContext *context,
|
||||||
int64_t global_frame_counter);
|
int64_t global_frame_counter);
|
||||||
|
|
||||||
|
COGL_EXPORT
|
||||||
|
void cogl_frame_info_set_target_presentation_time (CoglFrameInfo *info,
|
||||||
|
int64_t presentation_time_us);
|
||||||
|
|
||||||
#endif /* __COGL_FRAME_INFO_PRIVATE_H */
|
#endif /* __COGL_FRAME_INFO_PRIVATE_H */
|
||||||
|
@ -142,3 +142,11 @@ cogl_frame_info_get_time_before_buffer_swap_us (CoglFrameInfo *info)
|
|||||||
{
|
{
|
||||||
return info->cpu_time_before_buffer_swap_us;
|
return info->cpu_time_before_buffer_swap_us;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_frame_info_set_target_presentation_time (CoglFrameInfo *info,
|
||||||
|
int64_t presentation_time_us)
|
||||||
|
{
|
||||||
|
info->has_target_presentation_time = TRUE;
|
||||||
|
info->target_presentation_time_us = presentation_time_us;
|
||||||
|
}
|
||||||
|
@ -265,6 +265,7 @@ swap_framebuffer (ClutterStageWindow *stage_window,
|
|||||||
if (COGL_IS_ONSCREEN (framebuffer))
|
if (COGL_IS_ONSCREEN (framebuffer))
|
||||||
{
|
{
|
||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
||||||
|
int64_t target_presentation_time_us;
|
||||||
int *damage, n_rects, i;
|
int *damage, n_rects, i;
|
||||||
CoglFrameInfo *frame_info;
|
CoglFrameInfo *frame_info;
|
||||||
|
|
||||||
@ -285,6 +286,13 @@ swap_framebuffer (ClutterStageWindow *stage_window,
|
|||||||
cogl_frame_info_new (cogl_context, priv->global_frame_counter);
|
cogl_frame_info_new (cogl_context, priv->global_frame_counter);
|
||||||
priv->global_frame_counter++;
|
priv->global_frame_counter++;
|
||||||
|
|
||||||
|
if (clutter_frame_get_target_presentation_time (frame,
|
||||||
|
&target_presentation_time_us))
|
||||||
|
{
|
||||||
|
cogl_frame_info_set_target_presentation_time (frame_info,
|
||||||
|
target_presentation_time_us);
|
||||||
|
}
|
||||||
|
|
||||||
/* push on the screen */
|
/* push on the screen */
|
||||||
if (n_rects > 0 && !swap_with_damage)
|
if (n_rects > 0 && !swap_with_damage)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user