From 8f60d5a3a2d6650bb27ebe6488fe56bf67d3d09c Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sun, 7 Nov 2010 16:20:51 +0000 Subject: [PATCH] =?UTF-8?q?Start=20using=20the=20monotonic=20API=20in=20GL?= =?UTF-8?q?ib=20=E2=89=A5=202.27?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Starting from the 2.27 cycle, GLib is exposing a monotonic clock with microseconds granularity throughout the time-based API. We can start using it, given that the old, non-monotonic version is going to be deprecated by the same cycle. --- clutter/clutter-frame-source.c | 12 +++++++++--- clutter/clutter-master-clock.c | 27 ++++++++++++++++++++------- clutter/clutter-timeout-interval.c | 15 ++++++++++----- clutter/clutter-timeout-pool.c | 13 ++++++++++--- 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/clutter/clutter-frame-source.c b/clutter/clutter-frame-source.c index 345c8e6af..8f5f46b11 100644 --- a/clutter/clutter-frame-source.c +++ b/clutter/clutter-frame-source.c @@ -144,11 +144,17 @@ clutter_frame_source_prepare (GSource *source, gint *delay) { ClutterFrameSource *frame_source = (ClutterFrameSource *) source; - GTimeVal source_time; gint64 current_time; - g_source_get_current_time (source, &source_time); - current_time = source_time.tv_sec * 1000 + source_time.tv_usec / 1000; +#if GLIB_CHECK_VERSION (2, 27, 3) + current_time = g_source_get_time (source) / 1000; +#else + { + GTimeVal source_time; + g_source_get_current_time (source, &source_time); + current_time = source_time.tv_sec * 1000 + source_time.tv_usec / 1000; + } +#endif return _clutter_timeout_interval_prepare (current_time, &frame_source->timeout, diff --git a/clutter/clutter-master-clock.c b/clutter/clutter-master-clock.c index 73a36706e..1d679243d 100644 --- a/clutter/clutter-master-clock.c +++ b/clutter/clutter-master-clock.c @@ -170,7 +170,6 @@ master_clock_is_running (ClutterMasterClock *master_clock) static gint master_clock_next_frame_delay (ClutterMasterClock *master_clock) { - GTimeVal source_time; gint64 now, next; if (!master_clock_is_running (master_clock)) @@ -207,8 +206,16 @@ master_clock_next_frame_delay (ClutterMasterClock *master_clock) /* Otherwise, wait at least 1/frame_rate seconds since we last * started a frame */ - g_source_get_current_time (master_clock->source, &source_time); - now = source_time.tv_sec * 1000000L + source_time.tv_usec; +#if GLIB_CHECK_VERSION (2, 27, 3) + now = g_source_get_time (master_clock->source); +#else + { + GTimeVal source_time; + g_source_get_current_time (master_clock->source, &source_time); + now = source_time.tv_sec * 1000000L + source_time.tv_usec; + } +#endif + next = master_clock->prev_tick; /* If time has gone backwards then there's no way of knowing how @@ -301,7 +308,6 @@ clutter_clock_dispatch (GSource *source, ClutterMasterClock *master_clock = clock_source->master_clock; ClutterStageManager *stage_manager = clutter_stage_manager_get_default (); gboolean stages_updated = FALSE; - GTimeVal source_time; GSList *stages, *l; CLUTTER_STATIC_TIMER (master_dispatch_timer, @@ -322,9 +328,16 @@ clutter_clock_dispatch (GSource *source, clutter_threads_enter (); /* Get the time to use for this frame */ - g_source_get_current_time (source, &source_time); - master_clock->cur_tick = source_time.tv_sec * 1000000L - + source_time.tv_usec; +#if GLIB_CHECK_VERSION (2, 27, 3) + master_clock->cur_tick = g_source_get_time (source); +#else + { + GTimeVal source_time; + g_source_get_current_time (source, &source_time); + master_clock->cur_tick = source_time.tv_sec * 1000000L + + source_time.tv_usec; + } +#endif /* We need to protect ourselves against stages being destroyed during * event handling diff --git a/clutter/clutter-timeout-interval.c b/clutter/clutter-timeout-interval.c index f17eddc55..ac0ad44d1 100644 --- a/clutter/clutter-timeout-interval.c +++ b/clutter/clutter-timeout-interval.c @@ -34,12 +34,17 @@ void _clutter_timeout_interval_init (ClutterTimeoutInterval *interval, guint fps) { - GTimeVal start_time; +#if GLIB_CHECK_VERSION (2, 27, 3) + interval->start_time = g_get_monotonic_time () / 1000; +#else + { + GTimeVal start_time; + g_get_current_time (&start_time); + interval->start_time = start_time.tv_sec * 1000 + + start_time.tv_usec / 1000; + } +#endif - g_get_current_time (&start_time); - - interval->start_time = start_time.tv_sec * 1000 - + start_time.tv_usec / 1000; interval->fps = fps; interval->frame_count = 0; } diff --git a/clutter/clutter-timeout-pool.c b/clutter/clutter-timeout-pool.c index 8ab3a9024..43baebca1 100644 --- a/clutter/clutter-timeout-pool.c +++ b/clutter/clutter-timeout-pool.c @@ -136,11 +136,18 @@ clutter_timeout_prepare (ClutterTimeoutPool *pool, ClutterTimeout *timeout, gint *next_timeout) { - GTimeVal source_time; + GSource *source = (GSource *) pool; gint64 now; - g_source_get_current_time (&pool->source, &source_time); - now = source_time.tv_sec * 1000 + source_time.tv_usec / 1000; +#if GLIB_CHECK_VERSION (2, 27, 3) + now = g_source_get_time (source) / 1000; +#else + { + GTimeVal source_time; + g_source_get_current_time (source, &source_time); + now = source_time.tv_sec * 1000 + source_time.tv_usec / 1000; + } +#endif return _clutter_timeout_interval_prepare (now, &timeout->interval,