more accurate rarch_timer

This commit is contained in:
David Walters 2018-04-04 09:37:16 +01:00 committed by radius
parent 8a2b23de34
commit 70eda90d03
3 changed files with 19 additions and 6 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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))
{