From 70eda90d034fd5075361b72858b6f6442e1af26e Mon Sep 17 00:00:00 2001 From: David Walters Date: Wed, 4 Apr 2018 09:37:16 +0100 Subject: [PATCH] more accurate rarch_timer --- performance_counters.c | 19 +++++++++++++++---- performance_counters.h | 4 +++- retroarch.c | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/performance_counters.c b/performance_counters.c index a9fd732454..6ac89ac286 100644 --- a/performance_counters.c +++ b/performance_counters.c @@ -125,14 +125,14 @@ void rarch_timer_tick(rarch_timer_t *timer) if (!timer) return; timer->current = cpu_features_get_time_usec(); - timer->timeout = (timer->timeout_end - timer->current) / 1000000; + timer->timeout_us = (timer->timeout_end - timer->current); } int rarch_timer_get_timeout(rarch_timer_t *timer) { if (!timer) return 0; - return (int)timer->timeout; + return (int)timer->timeout_us / 1000000; } bool rarch_timer_is_running(rarch_timer_t *timer) @@ -144,7 +144,7 @@ bool rarch_timer_is_running(rarch_timer_t *timer) bool rarch_timer_has_expired(rarch_timer_t *timer) { - if (!timer || timer->timeout <= 0) + if (!timer || timer->timeout_us <= 0) return true; return false; } @@ -162,7 +162,18 @@ void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec) { if (!timer) return; - timer->timeout_end = cpu_features_get_time_usec() + sec * 1000000; + timer->timeout_us = sec * 1000000; + timer->current = cpu_features_get_time_usec(); + timer->timeout_end = timer->current + timer->timeout_us; +} + +void rarch_timer_begin_new_time_us(rarch_timer_t *timer, uint64_t usec) +{ + if (!timer) + return; + timer->timeout_us = usec; + timer->current = cpu_features_get_time_usec(); + timer->timeout_end = timer->current + timer->timeout_us; } void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec) diff --git a/performance_counters.h b/performance_counters.h index 429b6c22d9..9a72a4ade6 100644 --- a/performance_counters.h +++ b/performance_counters.h @@ -33,7 +33,7 @@ RETRO_BEGIN_DECLS typedef struct rarch_timer { int64_t current; - int64_t timeout; + int64_t timeout_us; int64_t timeout_end; bool timer_begin; bool timer_end; @@ -99,6 +99,8 @@ void rarch_timer_begin(rarch_timer_t *timer, uint64_t ms); void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec); +void rarch_timer_begin_new_time_us(rarch_timer_t *timer, uint64_t usec); + void rarch_timer_end(rarch_timer_t *timer); int rarch_timer_get_timeout(rarch_timer_t *timer); diff --git a/retroarch.c b/retroarch.c index 200d05e54a..f95d909f62 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3209,7 +3209,7 @@ static enum runloop_state runloop_check_state( { /* rarch_timer_tick */ timer.current = cpu_features_get_time_usec(); - timer.timeout = (timer.timeout_end - timer.current) / 1000; + timer.timeout_us = (timer.timeout_end - timer.current); if (!timer.timer_end && rarch_timer_has_expired(&timer)) {