move more runloop functiosn to runloop.c

This commit is contained in:
twinaphex 2021-05-24 02:27:55 +02:00
parent b48ab663b0
commit 75175ddbce
4 changed files with 136 additions and 118 deletions

View File

@ -12639,22 +12639,6 @@ static void command_event_runtime_log_init(struct rarch_state *p_rarch)
sizeof(p_rarch->runtime_core_path));
}
static INLINE retro_time_t runloop_set_frame_limit(
const struct retro_system_av_info *av_info,
float fastforward_ratio)
{
return (fastforward_ratio < 1.0f) ? 0.0f :
(retro_time_t)roundf(1000000.0f / (av_info->timing.fps * fastforward_ratio));
}
static INLINE float runloop_get_fastforward_ratio(
settings_t *settings,
struct retro_fastforwarding_override *fastmotion_override)
{
return (fastmotion_override->fastforward && (fastmotion_override->ratio >= 0.0f)) ?
fastmotion_override->ratio : settings->floats.fastforward_ratio;
}
static bool command_event_init_core(
settings_t *settings,
struct rarch_state *p_rarch,
@ -13283,106 +13267,12 @@ static void retroarch_pause_checks(struct rarch_state *p_rarch)
#endif
}
static void runloop_frame_time_free(runloop_state_t *p_runloop)
{
memset(&p_runloop->frame_time, 0,
sizeof(struct retro_frame_time_callback));
p_runloop->frame_time_last = 0;
p_runloop->max_frames = 0;
}
static void runloop_audio_buffer_status_free(runloop_state_t *p_runloop)
{
memset(&p_runloop->audio_buffer_status, 0,
sizeof(struct retro_audio_buffer_status_callback));
p_runloop->audio_latency = 0;
}
static void runloop_game_focus_free(runloop_state_t *p_runloop)
{
/* Ensure that game focus mode is disabled */
if (p_runloop->game_focus_state.enabled)
{
enum input_game_focus_cmd_type game_focus_cmd = GAME_FOCUS_CMD_OFF;
command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, &game_focus_cmd);
}
p_runloop->game_focus_state.enabled = false;
p_runloop->game_focus_state.core_requested = false;
}
static void runloop_fastmotion_override_free(settings_t *settings,
runloop_state_t *p_runloop)
{
float fastforward_ratio = settings->floats.fastforward_ratio;
bool reset_frame_limit = p_runloop->fastmotion_override.fastforward &&
(p_runloop->fastmotion_override.ratio >= 0.0f) &&
(p_runloop->fastmotion_override.ratio != fastforward_ratio);
p_runloop->fastmotion_override.ratio = 0.0f;
p_runloop->fastmotion_override.fastforward = false;
p_runloop->fastmotion_override.notification = false;
p_runloop->fastmotion_override.inhibit_toggle = false;
if (reset_frame_limit)
p_runloop->frame_limit_minimum_time = runloop_set_frame_limit(
&p_runloop->av_info,
fastforward_ratio);
}
static void runloop_system_info_free(runloop_state_t *p_runloop)
{
rarch_system_info_t *sys_info = &p_runloop->system;
if (sys_info->subsystem.data)
free(sys_info->subsystem.data);
sys_info->subsystem.data = NULL;
sys_info->subsystem.size = 0;
if (sys_info->ports.data)
free(sys_info->ports.data);
sys_info->ports.data = NULL;
sys_info->ports.size = 0;
if (sys_info->mmaps.descriptors)
free((void *)sys_info->mmaps.descriptors);
sys_info->mmaps.descriptors = NULL;
sys_info->mmaps.num_descriptors = 0;
p_runloop->key_event = NULL;
p_runloop->frontend_key_event = NULL;
p_runloop->audio_callback.callback = NULL;
p_runloop->audio_callback.set_state = NULL;
sys_info->info.library_name = NULL;
sys_info->info.library_version = NULL;
sys_info->info.valid_extensions = NULL;
sys_info->info.need_fullpath = false;
sys_info->info.block_extract = false;
memset(&p_runloop->system, 0, sizeof(rarch_system_info_t));
}
static bool libretro_get_system_info(
struct rarch_state *p_rarch,
const char *path,
struct retro_system_info *info,
bool *load_no_content);
#ifdef HAVE_RUNAHEAD
static void runloop_runahead_clear_variables(runloop_state_t *p_runloop)
{
p_runloop->runahead_save_state_size = 0;
p_runloop->runahead_save_state_size_known = false;
p_runloop->runahead_video_active = true;
p_runloop->runahead_available = true;
p_runloop->runahead_secondary_core_available = true;
p_runloop->runahead_force_input_dirty = true;
p_runloop->last_frame_count_runahead = 0;
}
#endif
/**
* command_event:
* @cmd : Event command index.

View File

@ -226,6 +226,14 @@ enum runloop_action
RUNLOOP_ACTION_AUTOSAVE
};
enum input_game_focus_cmd_type
{
GAME_FOCUS_CMD_OFF = 0,
GAME_FOCUS_CMD_ON,
GAME_FOCUS_CMD_TOGGLE,
GAME_FOCUS_CMD_REAPPLY
};
#ifdef HAVE_BSV_MOVIE
enum rarch_movie_type
{
@ -2392,6 +2400,22 @@ void bsv_movie_deinit(runloop_state_t *p_runloop);
bool bsv_movie_init(runloop_state_t *p_runloop);
#endif
void runloop_system_info_free(runloop_state_t *p_runloop);
void runloop_fastmotion_override_free(settings_t *settings,
runloop_state_t *p_runloop);
void runloop_game_focus_free(runloop_state_t *p_runloop);
void runloop_audio_buffer_status_free(runloop_state_t *p_runloop);
void runloop_frame_time_free(runloop_state_t *p_runloop);
#ifdef HAVE_RUNAHEAD
void runloop_runahead_clear_variables(runloop_state_t *p_runloop);
#endif
retro_time_t runloop_set_frame_limit(
const struct retro_system_av_info *av_info,
float fastforward_ratio);
float runloop_get_fastforward_ratio(
settings_t *settings,
struct retro_fastforwarding_override *fastmotion_override);
RETRO_END_DECLS
#endif

View File

@ -1258,14 +1258,6 @@ enum auto_shader_operation
AUTO_SHADER_OP_EXISTS
};
enum input_game_focus_cmd_type
{
GAME_FOCUS_CMD_OFF = 0,
GAME_FOCUS_CMD_ON,
GAME_FOCUS_CMD_TOGGLE,
GAME_FOCUS_CMD_REAPPLY
};
typedef struct runloop_ctx_msg_info
{
const char *msg;

112
runloop.c
View File

@ -14,6 +14,7 @@
*/
#include <stdint.h>
#include <math.h>
#include <string/stdstring.h>
@ -21,6 +22,7 @@
#include <rthreads/rthreads.h>
#endif
#include "command.h"
#include "configuration.h"
#include "content.h"
#include "file_path_special.h"
@ -847,6 +849,21 @@ end:
}
#endif
retro_time_t runloop_set_frame_limit(
const struct retro_system_av_info *av_info,
float fastforward_ratio)
{
return (fastforward_ratio < 1.0f) ? 0.0f :
(retro_time_t)roundf(1000000.0f / (av_info->timing.fps * fastforward_ratio));
}
float runloop_get_fastforward_ratio(
settings_t *settings,
struct retro_fastforwarding_override *fastmotion_override)
{
return (fastmotion_override->fastforward && (fastmotion_override->ratio >= 0.0f)) ?
fastmotion_override->ratio : settings->floats.fastforward_ratio;
}
/* Fetches core options path for current core/content
* - path: path from which options should be read
@ -1101,3 +1118,98 @@ core_option_manager_t *runloop_init_core_options(
options_path, src_options_path, option_defs);
return NULL;
}
void runloop_audio_buffer_status_free(runloop_state_t *p_runloop)
{
memset(&p_runloop->audio_buffer_status, 0,
sizeof(struct retro_audio_buffer_status_callback));
p_runloop->audio_latency = 0;
}
void runloop_game_focus_free(runloop_state_t *p_runloop)
{
/* Ensure that game focus mode is disabled */
if (p_runloop->game_focus_state.enabled)
{
enum input_game_focus_cmd_type game_focus_cmd = GAME_FOCUS_CMD_OFF;
command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, &game_focus_cmd);
}
p_runloop->game_focus_state.enabled = false;
p_runloop->game_focus_state.core_requested = false;
}
void runloop_fastmotion_override_free(settings_t *settings,
runloop_state_t *p_runloop)
{
float fastforward_ratio = settings->floats.fastforward_ratio;
bool reset_frame_limit = p_runloop->fastmotion_override.fastforward &&
(p_runloop->fastmotion_override.ratio >= 0.0f) &&
(p_runloop->fastmotion_override.ratio != fastforward_ratio);
p_runloop->fastmotion_override.ratio = 0.0f;
p_runloop->fastmotion_override.fastforward = false;
p_runloop->fastmotion_override.notification = false;
p_runloop->fastmotion_override.inhibit_toggle = false;
if (reset_frame_limit)
p_runloop->frame_limit_minimum_time = runloop_set_frame_limit(
&p_runloop->av_info,
fastforward_ratio);
}
void runloop_system_info_free(runloop_state_t *p_runloop)
{
rarch_system_info_t *sys_info = &p_runloop->system;
if (sys_info->subsystem.data)
free(sys_info->subsystem.data);
sys_info->subsystem.data = NULL;
sys_info->subsystem.size = 0;
if (sys_info->ports.data)
free(sys_info->ports.data);
sys_info->ports.data = NULL;
sys_info->ports.size = 0;
if (sys_info->mmaps.descriptors)
free((void *)sys_info->mmaps.descriptors);
sys_info->mmaps.descriptors = NULL;
sys_info->mmaps.num_descriptors = 0;
p_runloop->key_event = NULL;
p_runloop->frontend_key_event = NULL;
p_runloop->audio_callback.callback = NULL;
p_runloop->audio_callback.set_state = NULL;
sys_info->info.library_name = NULL;
sys_info->info.library_version = NULL;
sys_info->info.valid_extensions = NULL;
sys_info->info.need_fullpath = false;
sys_info->info.block_extract = false;
memset(&p_runloop->system, 0, sizeof(rarch_system_info_t));
}
void runloop_frame_time_free(runloop_state_t *p_runloop)
{
memset(&p_runloop->frame_time, 0,
sizeof(struct retro_frame_time_callback));
p_runloop->frame_time_last = 0;
p_runloop->max_frames = 0;
}
#ifdef HAVE_RUNAHEAD
void runloop_runahead_clear_variables(runloop_state_t *p_runloop)
{
p_runloop->runahead_save_state_size = 0;
p_runloop->runahead_save_state_size_known = false;
p_runloop->runahead_video_active = true;
p_runloop->runahead_available = true;
p_runloop->runahead_secondary_core_available = true;
p_runloop->runahead_force_input_dirty = true;
p_runloop->last_frame_count_runahead = 0;
}
#endif