Pass sleep_ms argument to rarch_main_iterate

This commit is contained in:
twinaphex 2015-08-27 14:52:02 +02:00
parent 1ec90df165
commit fdd1d3ee9f
7 changed files with 31 additions and 24 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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