Don't keep reallocating settings all the time

This commit is contained in:
twinaphex 2015-10-19 03:28:00 +02:00
parent 0d8cec87bc
commit 992266ab12
5 changed files with 92 additions and 200 deletions

View File

@ -1453,12 +1453,6 @@ static int deferred_push_video_shader_parameters_common(
}
#endif
static void menu_displaylist_realloc_settings(menu_entries_t *entries, unsigned flags)
{
menu_entries_free_list(entries);
menu_entries_new_list(entries, flags);
}
enum
{
PARSE_NONE = (1 << 0),
@ -1468,7 +1462,7 @@ enum
};
static int menu_displaylist_parse_settings(menu_handle_t *menu,
menu_displaylist_info_t *info, unsigned setting_flags,
menu_displaylist_info_t *info,
const char *info_label, unsigned parse_type)
{
uint64_t flags;
@ -1477,8 +1471,6 @@ static int menu_displaylist_parse_settings(menu_handle_t *menu,
rarch_setting_t *setting = NULL;
settings_t *settings = config_get_ptr();
menu_displaylist_realloc_settings(menu->entries, setting_flags);
setting = menu_setting_find(info_label);
flags = menu_setting_get_flags(setting);
@ -2306,8 +2298,7 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
break;
case DISPLAYLIST_ACCOUNTS_CHEEVOS_LIST:
#ifdef HAVE_CHEEVOS
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
"Accounts", PARSE_NONE);
ret = menu_displaylist_parse_settings(menu, info, "Accounts", PARSE_NONE);
#else
menu_entries_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_NO_ITEMS),
@ -2354,39 +2345,39 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
break;
case DISPLAYLIST_SETTINGS:
info->flags = SL_FLAG_SETTINGS_GROUP_ALL;
ret = menu_displaylist_parse_settings(menu, info, info->flags, info->label, PARSE_NONE);
ret = menu_displaylist_parse_settings(menu, info, info->label, PARSE_NONE);
need_push = true;
break;
case DISPLAYLIST_MAIN_MENU:
ret = menu_displaylist_parse_settings(menu, info, info->flags, info->label, PARSE_NONE);
ret = menu_displaylist_parse_settings(menu, info, info->label, PARSE_NONE);
need_push = true;
break;
case DISPLAYLIST_SETTINGS_ALL:
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_DRIVER_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_CORE_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_CONFIGURATION_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_SAVING_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_LOGGING_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_FRAME_THROTTLE_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_REWIND_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_RECORDING_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_VIDEO_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_AUDIO_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_INPUT_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_INPUT_HOTKEY_BINDS), PARSE_ONLY_GROUP);
{
unsigned user;
@ -2396,31 +2387,31 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
{
snprintf(group_lbl[user], sizeof(group_lbl[user]),
menu_hash_to_str(MENU_LABEL_VALUE_INPUT_USER_BINDS), user + 1);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
group_lbl[user], PARSE_ONLY_GROUP);
}
}
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_OVERLAY_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_MENU_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_UI_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
"Retro Achievements", PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_CORE_UPDATER_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_NETWORK_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_PLAYLIST_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_USER_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_DIRECTORY_SETTINGS), PARSE_ONLY_GROUP);
ret = menu_displaylist_parse_settings(menu, info, SL_FLAG_SETTINGS_GROUP_ALL,
ret = menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_VALUE_PRIVACY_SETTINGS), PARSE_ONLY_GROUP);
need_push = true;
break;

View File

@ -541,6 +541,8 @@ bool menu_entries_init(void *data)
if (!(entries->menu_list = (menu_list_t*)menu_list_new()))
goto error;
entries->list_settings = menu_setting_new();
return true;
error:
@ -558,26 +560,14 @@ void menu_entries_free(void)
if (!entries)
return;
menu_setting_free(entries->list_settings);
if (entries->list_settings)
menu_setting_free(entries->list_settings);
entries->list_settings = NULL;
menu_list_free(entries->menu_list);
entries->menu_list = NULL;
}
void menu_entries_free_list(menu_entries_t *entries)
{
if (entries && entries->list_settings)
menu_setting_free(entries->list_settings);
}
void menu_entries_new_list(menu_entries_t *entries, unsigned flags)
{
if (!entries)
return;
entries->list_settings = menu_setting_new(flags);
}
void menu_entries_push(file_list_t *list, const char *path, const char *label,
unsigned type, size_t directory_ptr, size_t entry_idx)
{

View File

@ -136,10 +136,6 @@ bool menu_entries_init(void *data);
void menu_entries_free(void);
void menu_entries_free_list(menu_entries_t *entries);
void menu_entries_new_list(menu_entries_t *entries, unsigned flags);
void menu_entries_get_last_stack(const char **path, const char **label,
unsigned *file_type, size_t *entry_idx);

View File

@ -2820,8 +2820,7 @@ static void overlay_enable_toggle_change_handler(void *data)
static bool setting_append_list_main_menu_options(
rarch_setting_t **list,
rarch_setting_info_t *list_info,
const char *parent_group,
unsigned mask)
const char *parent_group)
{
rarch_setting_group_info_t group_info = {0};
rarch_setting_group_info_t subgroup_info = {0};
@ -2893,16 +2892,12 @@ static bool setting_append_list_main_menu_options(
parent_group);
#endif
if (mask & SL_FLAG_SETTINGS)
{
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_SETTINGS),
group_info.name,
subgroup_info.name,
parent_group);
}
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_SETTINGS),
group_info.name,
subgroup_info.name,
parent_group);
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_INFORMATION_LIST),
@ -6697,7 +6692,7 @@ void menu_setting_free(rarch_setting_t *list)
* Returns: settings list composed of all requested
* settings on success, otherwise NULL.
**/
rarch_setting_t *menu_setting_new(unsigned mask)
rarch_setting_t *menu_setting_new(void)
{
rarch_setting_t terminator = { ST_NONE };
rarch_setting_t* list = NULL;
@ -6714,62 +6709,33 @@ rarch_setting_t *menu_setting_new(unsigned mask)
if (!list)
goto error;
if (mask & SL_FLAG_MAIN_MENU)
{
if (!setting_append_list_main_menu_options(&list, list_info, root, mask))
goto error;
}
if (!setting_append_list_main_menu_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_DRIVER_OPTIONS)
{
if (!setting_append_list_driver_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_driver_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_CORE_OPTIONS)
{
if (!setting_append_list_core_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_core_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_CONFIGURATION_OPTIONS)
{
if (!setting_append_list_configuration_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_configuration_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_LOGGING_OPTIONS)
{
if (!setting_append_list_logging_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_logging_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_SAVING_OPTIONS)
{
if (!setting_append_list_saving_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_saving_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_REWIND_OPTIONS)
{
if (!setting_append_list_rewind_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_rewind_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_VIDEO_OPTIONS)
{
if (!setting_append_list_video_options(&list, list_info, root))
goto error;
if (!setting_append_list_video_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_audio_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_AUDIO_OPTIONS)
{
if (!setting_append_list_audio_options(&list, list_info, root))
goto error;
}
if (mask & SL_FLAG_SETTINGS_INPUT_OPTIONS)
{
unsigned user;
settings_t *settings = config_get_ptr();
@ -6781,13 +6747,9 @@ rarch_setting_t *menu_setting_new(unsigned mask)
setting_append_list_input_player_options(&list, list_info, root, user);
}
if (mask & SL_FLAG_SETTINGS_INPUT_HOTKEY_OPTIONS)
{
if (!setting_append_list_input_hotkey_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_input_hotkey_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_RECORDING_OPTIONS)
{
settings_t *settings = config_get_ptr();
@ -6798,98 +6760,52 @@ rarch_setting_t *menu_setting_new(unsigned mask)
}
}
if (mask & SL_FLAG_SETTINGS_FRAME_THROTTLE_OPTIONS)
{
if (!setting_append_list_frame_throttling_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_frame_throttling_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_FONT_OPTIONS)
{
if (!setting_append_list_font_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_font_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_OVERLAY_OPTIONS)
{
if (!setting_append_list_overlay_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_overlay_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_MENU_OPTIONS)
{
if (!setting_append_list_menu_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_menu_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_MENU_BROWSER_OPTIONS)
{
if (!setting_append_list_menu_file_browser_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_menu_file_browser_options(&list, list_info, root))
goto error;
#if defined(HAVE_IMAGEVIEWER) || defined(HAVE_FFMPEG)
if (mask & SL_FLAG_SETTINGS_MULTIMEDIA_OPTIONS)
{
if (!setting_append_list_multimedia_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_multimedia_options(&list, list_info, root))
goto error;
#endif
if (mask & SL_FLAG_SETTINGS_UI_OPTIONS)
{
if (!setting_append_list_ui_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_ui_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_PLAYLIST_OPTIONS)
{
if (!setting_append_list_playlist_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_playlist_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_CHEEVOS_OPTIONS)
{
if (!setting_append_list_cheevos_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_cheevos_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_CORE_UPDATER_OPTIONS)
{
if (!setting_append_list_core_updater_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_core_updater_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_NETPLAY_OPTIONS)
{
if (!setting_append_list_netplay_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_netplay_options(&list, list_info, root))
goto error;
if (!setting_append_list_user_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_USER_OPTIONS)
{
if (!setting_append_list_user_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_accounts_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_SUB_ACCOUNTS_OPTIONS)
{
if (!setting_append_list_accounts_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_directory_options(&list, list_info, root))
goto error;
if (mask & SL_FLAG_SETTINGS_DIRECTORY_OPTIONS)
{
if (!setting_append_list_directory_options(&list, list_info, root))
goto error;
}
if (mask & SL_FLAG_SETTINGS_PRIVACY_OPTIONS)
{
if (!setting_append_list_privacy_options(&list, list_info, root))
goto error;
}
if (!setting_append_list_privacy_options(&list, list_info, root))
goto error;
if (!(menu_settings_list_append(&list, list_info, terminator)))
goto error;
@ -6915,4 +6831,3 @@ error:
return NULL;
}

View File

@ -167,7 +167,7 @@ void menu_setting_free(rarch_setting_t *list);
* Returns: settings list composed of all requested
* settings on success, otherwise NULL.
**/
rarch_setting_t* menu_setting_new(unsigned mask);
rarch_setting_t* menu_setting_new(void);
bool menu_setting_is_of_path_type(rarch_setting_t *setting);