Create rarch_main_iterate_time_to_exit

This commit is contained in:
twinaphex 2015-09-30 19:09:05 +02:00
parent d4a8d97ed3
commit c9a0a48448

View File

@ -825,6 +825,55 @@ static void rarch_main_cmd_get_state(driver_t *driver,
RARCH_CHEAT_TOGGLE);
}
/* Time to exit out of the main loop?
* Reasons for exiting:
* a) Shutdown environment callback was invoked.
* b) Quit key was pressed.
* c) Frame count exceeds or equals maximum amount of frames to run.
* d) Video driver no longer alive.
* e) End of BSV movie and BSV EOF exit is true. (TODO/FIXME - explain better)
*/
static INLINE int rarch_main_iterate_time_to_exit(event_cmd_state_t *cmd)
{
settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr();
driver_t *driver = driver_get_ptr();
rarch_system_info_t *system = rarch_system_info_get_ptr();
video_driver_t *video = driver ? (video_driver_t*)driver->video : NULL;
bool shutdown_pressed = (system && system->shutdown) || cmd->quit_key_pressed;
bool video_alive = video && video->alive(driver->video_data);
bool movie_end = (global->bsv.movie_end && global->bsv.eof_exit);
uint64_t *frame_count = video_driver_get_frame_count();
bool frame_count_end = main_max_frames && (*frame_count >= main_max_frames);
if (shutdown_pressed || frame_count_end || movie_end || !video_alive || global->exec)
{
if (global->exec)
global->exec = false;
/* Quits out of RetroArch main loop.
* On special case, loads dummy core
* instead of exiting RetroArch completely.
* Aborts core shutdown if invoked.
*/
if (global->core_shutdown_initiated
&& settings->load_dummy_on_core_shutdown)
{
if (!event_command(EVENT_CMD_PREPARE_DUMMY))
return -1;
system->shutdown = false;
global->core_shutdown_initiated = false;
return 0;
}
return -1;
}
return 0;
}
/**
* rarch_main_iterate:
*
@ -835,6 +884,7 @@ static void rarch_main_cmd_get_state(driver_t *driver,
**/
int rarch_main_iterate(unsigned *sleep_ms)
{
int ret;
unsigned i;
retro_input_t trigger_input;
event_cmd_state_t cmd;
@ -920,47 +970,11 @@ int rarch_main_iterate(unsigned *sleep_ms)
rarch_main_iterate_linefeed_overlay(driver, settings);
#endif
{
/* Time to exit out of the main loop?
* Reasons for exiting:
* a) Shutdown environment callback was invoked.
* b) Quit key was pressed.
* c) Frame count exceeds or equals maximum amount of frames to run.
* d) Video driver no longer alive.
* e) End of BSV movie and BSV EOF exit is true. (TODO/FIXME - explain better)
*/
video_driver_t *video = driver ? (video_driver_t*)driver->video : NULL;
bool shutdown_pressed = (system && system->shutdown) || cmd.quit_key_pressed;
bool video_alive = video && video->alive(driver->video_data);
bool movie_end = (global->bsv.movie_end && global->bsv.eof_exit);
uint64_t *frame_count = video_driver_get_frame_count();
bool frame_count_end = main_max_frames && (*frame_count >= main_max_frames);
ret = rarch_main_iterate_time_to_exit(&cmd);
if (shutdown_pressed || frame_count_end || movie_end || !video_alive || global->exec)
{
if (global->exec)
global->exec = false;
if (ret == -1)
return -1;
/* Quits out of RetroArch main loop.
* On special case, loads dummy core
* instead of exiting RetroArch completely.
* Aborts core shutdown if invoked.
*/
if (global->core_shutdown_initiated
&& settings->load_dummy_on_core_shutdown)
{
if (!event_command(EVENT_CMD_PREPARE_DUMMY))
return -1;
system->shutdown = false;
global->core_shutdown_initiated = false;
return 0;
}
return -1;
}
}
#ifdef HAVE_MENU
if (menu_driver_alive())