From fdd1d3ee9f075606588b8ce376bea5d5fb8cd721 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 27 Aug 2015 14:52:02 +0200 Subject: [PATCH] Pass sleep_ms argument to rarch_main_iterate --- frontend/drivers/platform_android.c | 7 ++++--- frontend/drivers/platform_emscripten.c | 7 ++++--- frontend/frontend.c | 7 ++++--- runloop.c | 12 +++++++----- runloop.h | 2 +- ui/drivers/ui_cocoa.m | 13 +++++++------ ui/drivers/ui_cocoatouch.m | 7 ++++--- 7 files changed, 31 insertions(+), 24 deletions(-) diff --git a/frontend/drivers/platform_android.c b/frontend/drivers/platform_android.c index d6768dbda1..90e893190b 100644 --- a/frontend/drivers/platform_android.c +++ b/frontend/drivers/platform_android.c @@ -248,10 +248,11 @@ static void android_app_entry(void *data) #ifndef HAVE_MAIN do { - ret = rarch_main_iterate(); + unsigned sleep_ms = 0; + ret = rarch_main_iterate(&sleep_ms); - if (ret == 1) - rarch_sleep(10); + if (ret == 1 && sleep_ms > 0) + rarch_sleep(sleep_ms); rarch_main_data_iterate(); }while (ret != -1); diff --git a/frontend/drivers/platform_emscripten.c b/frontend/drivers/platform_emscripten.c index 22a00c1d2f..764f2ba715 100644 --- a/frontend/drivers/platform_emscripten.c +++ b/frontend/drivers/platform_emscripten.c @@ -27,9 +27,10 @@ static void emscripten_mainloop(void) { - int ret = rarch_main_iterate(); - if (ret == 1) - rarch_sleep(10); + unsigned sleep_ms = 0; + int ret = rarch_main_iterate(&sleep_ms); + if (ret == 1 && sleep_ms > 0) + rarch_sleep(sleep_ms); rarch_main_data_iterate(); if (ret != -1) return; diff --git a/frontend/frontend.c b/frontend/frontend.c index e85f64d1c8..e9a3283853 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -342,10 +342,11 @@ int rarch_main(int argc, char *argv[], void *data) #ifndef HAVE_MAIN do{ - ret = rarch_main_iterate(); + unsigned sleep_ms = 0; + ret = rarch_main_iterate(&sleep_ms); - if (ret == 1) - rarch_sleep(10); + if (ret == 1 && sleep_ms > 0) + rarch_sleep(sleep_ms); rarch_main_data_iterate(); }while(ret != -1); diff --git a/runloop.c b/runloop.c index 98782bd9f4..23b8fccf97 100644 --- a/runloop.c +++ b/runloop.c @@ -653,7 +653,7 @@ static void rarch_update_frame_time(driver_t *driver, float slowmotion_ratio, system->frame_time.callback(delta); } -static int rarch_limit_frame_time(float fastforward_ratio) +static int rarch_limit_frame_time(float fastforward_ratio, unsigned *sleep_ms) { retro_time_t current, target, to_sleep_ms; @@ -666,9 +666,10 @@ static int rarch_limit_frame_time(float fastforward_ratio) if (to_sleep_ms > 0) { - rarch_sleep((unsigned int)to_sleep_ms); + *sleep_ms = (unsigned)to_sleep_ms; /* Combat jitter a bit. */ frame_limit_last_time += frame_limit_minimum_time; + return 1; } else frame_limit_last_time = rarch_get_time_usec(); @@ -1001,7 +1002,7 @@ static void rarch_main_cmd_get_state(driver_t *driver, * Returns: 0 on success, 1 if we have to wait until button input in order * to wake up the loop, -1 if we forcibly quit out of the RetroArch iteration loop. **/ -int rarch_main_iterate(void) +int rarch_main_iterate(unsigned *sleep_ms) { unsigned i; retro_input_t trigger_input; @@ -1086,7 +1087,7 @@ int rarch_main_iterate(void) if (!input && settings->menu.pause_libretro) return 1; - return rarch_limit_frame_time(settings->fastforward_ratio); + return rarch_limit_frame_time(settings->fastforward_ratio, sleep_ms); } #endif @@ -1094,6 +1095,7 @@ int rarch_main_iterate(void) { /* RetroArch has been paused. */ driver->retro_ctx.poll_cb(); + *sleep_ms = 10; return 1; } @@ -1152,5 +1154,5 @@ int rarch_main_iterate(void) unlock_autosave(); #endif - return rarch_limit_frame_time(settings->fastforward_ratio); + return rarch_limit_frame_time(settings->fastforward_ratio, sleep_ms); } diff --git a/runloop.h b/runloop.h index fa15a8c342..1ec33009e3 100644 --- a/runloop.h +++ b/runloop.h @@ -308,7 +308,7 @@ global_t *global_get_ptr(void); * Returns: 0 on successful run, 1 if we have to wait until button input in order * to wake up the loop, -1 if we forcibly quit out of the RetroArch iteration loop. **/ -int rarch_main_iterate(void); +int rarch_main_iterate(unsigned *sleep_ms); void rarch_main_msg_queue_push(const char *msg, unsigned prio, unsigned duration, bool flush); diff --git a/ui/drivers/ui_cocoa.m b/ui/drivers/ui_cocoa.m index bfa407752b..5885f35bd2 100644 --- a/ui/drivers/ui_cocoa.m +++ b/ui/drivers/ui_cocoa.m @@ -208,12 +208,13 @@ static void poll_iteration(void) int ret = 0; while (ret != -1) { - poll_iteration(); - ret = rarch_main_iterate(); - if (ret == 1) - rarch_sleep(10); - rarch_main_data_iterate(); - while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, FALSE) == kCFRunLoopRunHandledSource); + unsigned sleep_ms = 0; + poll_iteration(); + ret = rarch_main_iterate(&sleep_ms); + if (ret == 1 && sleep_ms > 0) + rarch_sleep(sleep_ms); + rarch_main_data_iterate(); + while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, FALSE) == kCFRunLoopRunHandledSource); } main_exit(NULL); diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index 63ce3254ec..e3b54e6181 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -60,10 +60,11 @@ static void rarch_disable_ui(void) static void rarch_draw_observer(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) { - int ret = rarch_main_iterate(); + unsigned sleep_ms = 0; + int ret = rarch_main_iterate(&sleep_ms); - if (ret == 1 && !ui_companion_is_on_foreground()) - rarch_sleep(10); + if (ret == 1 && !ui_companion_is_on_foreground() && sleep_ms > 0) + rarch_sleep(sleep_ms); rarch_main_data_iterate(); if (ret == -1)