From 74e224abf038a834236f3dbb92816362337afa2f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 23 Dec 2016 19:17:38 +0100 Subject: [PATCH] (menu_input_bind_dialog.c) Use timer code --- menu/widgets/menu_input_bind_dialog.c | 28 +++++++++++++-------------- performance_counters.c | 16 ++++++++++++++- performance_counters.h | 4 ++++ 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/menu/widgets/menu_input_bind_dialog.c b/menu/widgets/menu_input_bind_dialog.c index 46b2e2643c..094f878b94 100644 --- a/menu/widgets/menu_input_bind_dialog.c +++ b/menu/widgets/menu_input_bind_dialog.c @@ -26,6 +26,7 @@ #include "../../input/input_config.h" #include "../../configuration.h" +#include "../../performance_counters.h" #define MENU_MAX_BUTTONS 219 #define MENU_MAX_AXES 32 @@ -51,7 +52,8 @@ struct menu_bind_state { struct retro_keybind *target; /* For keyboard binding. */ - int64_t timeout_end; + + rarch_timer_t timer; unsigned begin; unsigned last; unsigned user; @@ -61,7 +63,7 @@ struct menu_bind_state }; static unsigned menu_bind_port = 0; -static struct menu_bind_state menu_input_binds; +static struct menu_bind_state menu_input_binds = {0}; static bool menu_input_key_bind_custom_bind_keyboard_cb( void *data, unsigned code) @@ -71,8 +73,8 @@ static bool menu_input_key_bind_custom_bind_keyboard_cb( menu_input_binds.target->key = (enum retro_key)code; menu_input_binds.begin++; menu_input_binds.target++; - menu_input_binds.timeout_end = cpu_features_get_time_usec() + - settings->input.bind_timeout * 1000000; + + rarch_timer_begin_new_time(&menu_input_binds.timer, settings->input.bind_timeout); return (menu_input_binds.begin <= menu_input_binds.last); } @@ -251,8 +253,7 @@ bool menu_input_key_bind_set_mode( menu_input_key_bind_poll_bind_state( &menu_input_binds, menu_bind_port, false); - menu_input_binds.timeout_end = cpu_features_get_time_usec() + - settings->input.bind_timeout * 1000000; + rarch_timer_begin_new_time(&menu_input_binds.timer, settings->input.bind_timeout); keys.userdata = menu; keys.cb = menu_input_key_bind_custom_bind_keyboard_cb; @@ -376,21 +377,19 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind) struct menu_bind_state binds; bool timed_out = false; settings_t *settings = config_get_ptr(); - int64_t current = cpu_features_get_time_usec(); - int timeout = - (menu_input_binds.timeout_end - current) / 1000000; + + rarch_timer_tick(&menu_input_binds.timer); if (!bind) return false; - if (timeout <= 0) + if (rarch_timer_has_expired(&menu_input_binds.timer)) { input_driver_keyboard_mapping_set_block(false); menu_input_binds.begin++; menu_input_binds.target++; - menu_input_binds.timeout_end = cpu_features_get_time_usec() + - settings->input.bind_timeout * 1000000; + rarch_timer_begin_new_time(&menu_input_binds.timer, settings->input.bind_timeout); timed_out = true; } @@ -398,7 +397,7 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind) "[%s]\npress keyboard or joypad\n(timeout %d %s)", input_config_bind_map_get_desc( menu_input_binds.begin - MENU_SETTINGS_BIND_BEGIN), - timeout, + rarch_timer_get_timeout(&menu_input_binds.timer), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SECONDS)); /* binds.begin is updated in keyboard_press callback. */ @@ -436,8 +435,7 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind) } binds.target++; - binds.timeout_end = cpu_features_get_time_usec() + - settings->input.bind_timeout * 1000000; + rarch_timer_begin_new_time(&binds.timer, settings->input.bind_timeout); } menu_input_binds = binds; diff --git a/performance_counters.c b/performance_counters.c index 6425bea0cd..805dd73eb9 100644 --- a/performance_counters.c +++ b/performance_counters.c @@ -156,6 +156,13 @@ void rarch_timer_tick(rarch_timer_t *timer) timer->timeout = (timer->timeout_end - timer->current) / 1000000; } +int rarch_timer_get_timeout(rarch_timer_t *timer) +{ + if (!timer) + return 0; + return timer->timeout; +} + bool rarch_timer_is_running(rarch_timer_t *timer) { if (!timer) @@ -179,11 +186,18 @@ void rarch_timer_end(rarch_timer_t *timer) timer->timeout_end = 0; } -void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec) +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; +} + +void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec) +{ + if (!timer) + return; + rarch_timer_begin_new_time(timer, sec); timer->timer_begin = true; timer->timer_end = false; } diff --git a/performance_counters.h b/performance_counters.h index 6eaf232bc1..4ceccb93fb 100644 --- a/performance_counters.h +++ b/performance_counters.h @@ -80,8 +80,12 @@ bool rarch_timer_has_expired(rarch_timer_t *timer); 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_end(rarch_timer_t *timer); +int rarch_timer_get_timeout(rarch_timer_t *timer); + RETRO_END_DECLS #endif