mirror of
https://github.com/brl/mutter.git
synced 2024-11-29 03:20:46 -05:00
Add cogl_get_clock_time()
Add an API to get the current time in the time system that Cogl is reporting timestamps. This is to be used to convert timestamps into a different time system. Reviewed-by: Robert Bragg <robert@linux.intel.com> (cherry picked from commit 9f3735a0c37adcfcffa485f81699b53a4cc0caf8)
This commit is contained in:
parent
d12f39d0e6
commit
98e3b57d0d
@ -756,4 +756,16 @@ _cogl_context_get_gl_version (CoglContext *context)
|
|||||||
return _cogl_config_override_gl_version;
|
return _cogl_config_override_gl_version;
|
||||||
else
|
else
|
||||||
return (const char *) context->glGetString (GL_VERSION);
|
return (const char *) context->glGetString (GL_VERSION);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
cogl_get_clock_time (CoglContext *context)
|
||||||
|
{
|
||||||
|
const CoglWinsysVtable *winsys = _cogl_context_get_winsys (context);
|
||||||
|
|
||||||
|
if (winsys->context_get_clock_time)
|
||||||
|
return winsys->context_get_clock_time (context);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -319,6 +319,29 @@ cogl_foreach_feature (CoglContext *context,
|
|||||||
CoglFeatureCallback callback,
|
CoglFeatureCallback callback,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_get_clock_time:
|
||||||
|
* @context: a #CoglContext pointer
|
||||||
|
*
|
||||||
|
* Returns the current time value from Cogl's internal clock. This
|
||||||
|
* clock is used for measuring times such as the presentation time
|
||||||
|
* in a #CoglFrameInfo.
|
||||||
|
*
|
||||||
|
* This method is meant for converting timestamps retrieved from Cogl
|
||||||
|
* to other time systems, and is not meant to be used as a standalone
|
||||||
|
* timing system. For that reason, if this function is called without
|
||||||
|
* having retrieved a valid (non-zero) timestamp from Cogl first, it
|
||||||
|
* may return 0 to indicate that Cogl has no active internal clock.
|
||||||
|
*
|
||||||
|
* Return value: the time value for the Cogl clock, in nanoseconds
|
||||||
|
* from an arbitrary point in time, or 0 if Cogl doesn't have an
|
||||||
|
* active internal clock.
|
||||||
|
* Since: 1.14
|
||||||
|
* Stability: unstable
|
||||||
|
*/
|
||||||
|
int64_t
|
||||||
|
cogl_get_clock_time (CoglContext *context);
|
||||||
|
|
||||||
#endif /* COGL_ENABLE_EXPERIMENTAL_API */
|
#endif /* COGL_ENABLE_EXPERIMENTAL_API */
|
||||||
|
|
||||||
COGL_END_DECLS
|
COGL_END_DECLS
|
||||||
|
@ -267,6 +267,42 @@ ust_to_nanoseconds (CoglRenderer *renderer,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int64_t
|
||||||
|
_cogl_winsys_get_clock_time (CoglContext *context)
|
||||||
|
{
|
||||||
|
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
||||||
|
|
||||||
|
/* We don't call ensure_ust_type() because we don't have a drawable
|
||||||
|
* to work with. cogl_get_clock_time() is documented to only work
|
||||||
|
* once a valid, non-zero, timestamp has been retrieved from Cogl.
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch (glx_renderer->ust_type)
|
||||||
|
{
|
||||||
|
case COGL_GLX_UST_IS_UNKNOWN:
|
||||||
|
case COGL_GLX_UST_IS_OTHER:
|
||||||
|
return 0;
|
||||||
|
case COGL_GLX_UST_IS_GETTIMEOFDAY:
|
||||||
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
return tv.tv_sec * G_GINT64_CONSTANT (1000000000) +
|
||||||
|
tv.tv_usec * G_GINT64_CONSTANT (1000);
|
||||||
|
}
|
||||||
|
case COGL_GLX_UST_IS_MONOTONIC_TIME:
|
||||||
|
{
|
||||||
|
struct timespec ts;
|
||||||
|
|
||||||
|
clock_gettime (CLOCK_MONOTONIC, &ts);
|
||||||
|
return ts.tv_sec * G_GINT64_CONSTANT (1000000000) + ts.tv_nsec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_assert_not_reached();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_sync_pending (CoglOnscreen *onscreen)
|
set_sync_pending (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
@ -2563,6 +2599,7 @@ static CoglWinsysVtable _cogl_winsys_vtable =
|
|||||||
.display_destroy = _cogl_winsys_display_destroy,
|
.display_destroy = _cogl_winsys_display_destroy,
|
||||||
.context_init = _cogl_winsys_context_init,
|
.context_init = _cogl_winsys_context_init,
|
||||||
.context_deinit = _cogl_winsys_context_deinit,
|
.context_deinit = _cogl_winsys_context_deinit,
|
||||||
|
.context_get_clock_time = _cogl_winsys_get_clock_time,
|
||||||
.xlib_get_visual_info = _cogl_winsys_xlib_get_visual_info,
|
.xlib_get_visual_info = _cogl_winsys_xlib_get_visual_info,
|
||||||
.onscreen_init = _cogl_winsys_onscreen_init,
|
.onscreen_init = _cogl_winsys_onscreen_init,
|
||||||
.onscreen_deinit = _cogl_winsys_onscreen_deinit,
|
.onscreen_deinit = _cogl_winsys_onscreen_deinit,
|
||||||
|
@ -122,6 +122,9 @@ typedef struct _CoglWinsysVtable
|
|||||||
|
|
||||||
/* Optional functions */
|
/* Optional functions */
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
(*context_get_clock_time) (CoglContext *context);
|
||||||
|
|
||||||
void
|
void
|
||||||
(*onscreen_swap_region) (CoglOnscreen *onscreen,
|
(*onscreen_swap_region) (CoglOnscreen *onscreen,
|
||||||
const int *rectangles,
|
const int *rectangles,
|
||||||
|
Loading…
Reference in New Issue
Block a user