1
0
mirror of https://github.com/libretro/RetroArch synced 2024-07-08 12:15:49 +00:00

Create RUNLOOP_CTL_{PERFCNT}

This commit is contained in:
twinaphex 2015-11-30 21:56:35 +01:00
parent 9824eb7ea9
commit 04605f085c
6 changed files with 45 additions and 26 deletions

View File

@ -1550,7 +1550,17 @@ static bool config_load_file(const char *path, bool set_defaults)
}
}
CONFIG_GET_BOOL_BASE(conf, global, perfcnt_enable, "perfcnt_enable");
{
bool tmp_bool;
char tmp[64] = {0};
strlcpy(tmp, "perfcnt_enable", sizeof(tmp));
config_get_bool(conf, tmp, &tmp_bool);
if (tmp_bool)
runloop_ctl(RUNLOOP_CTL_SET_PERFCNT_ENABLE, NULL);
else
runloop_ctl(RUNLOOP_CTL_UNSET_PERFCNT_ENABLE, NULL);
}
#if TARGET_OS_IPHONE
CONFIG_GET_BOOL_BASE(conf, settings, input.small_keyboard_enable, "small_keyboard_enable");
@ -2808,7 +2818,11 @@ bool config_save_file(const char *path)
settings->sort_savestates_enable);
config_set_int(conf, "libretro_log_level", settings->libretro_log_level);
config_set_bool(conf, "log_verbosity", *retro_main_verbosity());
config_set_bool(conf, "perfcnt_enable", global->perfcnt_enable);
{
bool perfcnt_enable = runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL);
config_set_bool(conf, "perfcnt_enable", perfcnt_enable);
}
#if TARGET_OS_IPHONE
config_set_bool(conf, "small_keyboard_enable", settings->input.small_keyboard_enable);

View File

@ -1827,7 +1827,6 @@ static int menu_displaylist_parse_horizontal_content_actions(menu_displaylist_in
static int menu_displaylist_parse_information_list(menu_displaylist_info_t *info)
{
global_t *global = global_get_ptr();
settings_t *settings = config_get_ptr();
menu_entries_push(info->list,
@ -1849,7 +1848,7 @@ static int menu_displaylist_parse_information_list(menu_displaylist_info_t *info
MENU_SETTING_ACTION, 0, 0);
#endif
if (global->perfcnt_enable)
if (runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL))
{
menu_entries_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_FRONTEND_COUNTERS),
@ -1873,10 +1872,6 @@ static int menu_displaylist_parse_information_list(menu_displaylist_info_t *info
static int menu_displaylist_parse_add_content_list(menu_displaylist_info_t *info)
{
global_t *global = global_get_ptr();
(void)global;
#ifdef HAVE_NETWORKING
menu_entries_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_DOWNLOAD_CORE_CONTENT),
@ -1901,10 +1896,6 @@ static int menu_displaylist_parse_add_content_list(menu_displaylist_info_t *info
static int menu_displaylist_parse_scan_directory_list(menu_displaylist_info_t *info)
{
global_t *global = global_get_ptr();
(void)global;
#ifdef HAVE_LIBRETRODB
menu_entries_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_SCAN_DIRECTORY),

View File

@ -3887,7 +3887,6 @@ static bool setting_append_list_logging_options(
rarch_setting_group_info_t group_info = {0};
rarch_setting_group_info_t subgroup_info = {0};
settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr();
START_GROUP(list, list_info, &group_info, menu_hash_to_str(MENU_LABEL_VALUE_LOGGING_SETTINGS), parent_group);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
@ -3950,7 +3949,7 @@ static bool setting_append_list_logging_options(
CONFIG_BOOL(
list, list_info,
&global->perfcnt_enable,
runloop_perfcnt_enabled(),
menu_hash_to_str(MENU_LABEL_PERFCNT_ENABLE),
menu_hash_to_str(MENU_LABEL_VALUE_PERFCNT_ENABLE),
false,

View File

@ -136,10 +136,11 @@ unsigned retro_get_perf_count_libretro(void)
void rarch_perf_register(struct retro_perf_counter *perf)
{
global_t *global = global_get_ptr();
if (!global->perfcnt_enable || perf->registered
|| perf_ptr_rarch >= MAX_COUNTERS)
if (
!runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL)
|| perf->registered
|| perf_ptr_rarch >= MAX_COUNTERS
)
return;
perf_counters_rarch[perf_ptr_rarch++] = perf;
@ -179,9 +180,7 @@ static void log_counters(struct retro_perf_counter **counters, unsigned num)
void rarch_perf_log(void)
{
global_t *global = global_get_ptr();
if (!global->perfcnt_enable)
if (!runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL))
return;
RARCH_LOG("[PERF]: Performance counters (RetroArch):\n");
@ -592,8 +591,7 @@ int rarch_perf_init(struct retro_perf_counter *perf, const char *name)
void retro_perf_start(struct retro_perf_counter *perf)
{
global_t *global = global_get_ptr();
if (!global->perfcnt_enable || !perf)
if (!runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL) || !perf)
return;
perf->call_cnt++;
@ -602,8 +600,7 @@ void retro_perf_start(struct retro_perf_counter *perf)
void retro_perf_stop(struct retro_perf_counter *perf)
{
global_t *global = global_get_ptr();
if (!global->perfcnt_enable || !perf)
if (!runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL) || !perf)
return;
perf->total += retro_get_perf_counter() - perf->start;

View File

@ -58,6 +58,7 @@
static struct global g_extern;
static bool runloop_perfcnt_enable;
static bool main_exec;
static bool main_core_shutdown_initiated;
static bool main_is_idle;
@ -450,6 +451,14 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data)
switch (state)
{
case RUNLOOP_CTL_SET_PERFCNT_ENABLE:
runloop_perfcnt_enable = true;
break;
case RUNLOOP_CTL_UNSET_PERFCNT_ENABLE:
runloop_perfcnt_enable = false;
break;
case RUNLOOP_CTL_IS_PERFCNT_ENABLE:
return runloop_perfcnt_enable;
case RUNLOOP_CTL_SET_WINDOWED_SCALE:
{
unsigned *idx = (unsigned*)data;
@ -1214,3 +1223,8 @@ void data_runloop_osd_msg(const char *msg, size_t len)
{
rarch_main_msg_queue_push(msg, 1, 10, true);
}
bool *runloop_perfcnt_enabled(void)
{
return &runloop_perfcnt_enable;
}

View File

@ -56,6 +56,9 @@ enum runloop_ctl_state
RUNLOOP_CTL_GLOBAL_FREE,
RUNLOOP_CTL_SET_CORE_SHUTDOWN,
RUNLOOP_CTL_SET_EXEC,
RUNLOOP_CTL_SET_PERFCNT_ENABLE,
RUNLOOP_CTL_UNSET_PERFCNT_ENABLE,
RUNLOOP_CTL_IS_PERFCNT_ENABLE,
/* Checks for state changes in this frame. */
RUNLOOP_CTL_CHECK_STATE,
RUNLOOP_CTL_CHECK_MOVIE,
@ -121,7 +124,6 @@ typedef struct rarch_resolution
typedef struct global
{
bool perfcnt_enable;
bool force_fullscreen;
struct
@ -336,6 +338,8 @@ void rarch_main_msg_queue_push_new(uint32_t hash, unsigned prio,
const char *rarch_main_msg_queue_pull(void);
bool *runloop_perfcnt_enabled(void);
bool runloop_ctl(enum runloop_ctl_state state, void *data);
typedef int (*transfer_cb_t)(void *data, size_t len);