From 725e0cd43d7f305a0b9ad0f4f729b481c1abb182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Sun, 14 Jun 2015 15:51:37 -0300 Subject: [PATCH 1/4] (menu_cbs) Avoid implicit memset call in some frequently used functions These functions are called a lot in some cases like when loading a big database or playlist. --- menu/cbs/menu_cbs_left.c | 3 ++- menu/cbs/menu_cbs_right.c | 3 ++- menu/menu_cbs.c | 7 +++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index a66a302060..8de5488eca 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -367,8 +367,9 @@ static int menu_cbs_init_bind_left_compare_label(menu_file_list_cbs_t *cbs, for (i = 0; i < MAX_USERS; i++) { uint32_t label_setting_hash; - char label_setting[PATH_MAX_LENGTH] = {0}; + char label_setting[PATH_MAX_LENGTH]; + label_setting[0] = '\0'; snprintf(label_setting, sizeof(label_setting), "input_player%d_joypad_index", i + 1); label_setting_hash = djb2_calculate(label_setting); diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index 16f71f945a..696bab605d 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -440,8 +440,9 @@ static int menu_cbs_init_bind_right_compare_label(menu_file_list_cbs_t *cbs, for (i = 0; i < MAX_USERS; i++) { uint32_t label_setting_hash; - char label_setting[PATH_MAX_LENGTH] = {0}; + char label_setting[PATH_MAX_LENGTH]; + label_setting[0] = '\0'; snprintf(label_setting, sizeof(label_setting), "input_player%d_joypad_index", i + 1); label_setting_hash = djb2_calculate(label_setting); diff --git a/menu/menu_cbs.c b/menu/menu_cbs.c index 8d062f5b14..4d10082207 100644 --- a/menu/menu_cbs.c +++ b/menu/menu_cbs.c @@ -49,8 +49,8 @@ void menu_cbs_init(void *data, const char *path, const char *label, unsigned type, size_t idx) { - char elem0[PATH_MAX_LENGTH] = {0}; - char elem1[PATH_MAX_LENGTH] = {0}; + char elem0[PATH_MAX_LENGTH]; + char elem1[PATH_MAX_LENGTH]; struct string_list *str_list = NULL; const char *menu_label = NULL; menu_file_list_cbs_t *cbs = NULL; @@ -68,6 +68,9 @@ void menu_cbs_init(void *data, if (!cbs) return; + elem0[0] = '\0'; + elem1[0] = '\0'; + menu_list_get_last_stack(menu_list, NULL, &menu_label, NULL, NULL); if (label) From cbeee0ca1d1805963c6d108515ec48073a10aeb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Sun, 14 Jun 2015 16:04:26 -0300 Subject: [PATCH 2/4] (menu_setting) Test needle before checking setting type --- menu/menu_setting.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index f8d9ce1ed8..6b53e02c56 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -322,7 +322,7 @@ rarch_setting_t *menu_setting_find(const char *label) for (; settings->type != ST_NONE; settings++) { - if (settings->type <= ST_GROUP && needle == settings->name_hash) + if (needle == settings->name_hash && settings->type <= ST_GROUP) { /* make sure this isn't a collision */ if (strcmp(label, settings->name) != 0) From ce3acb2ca43abed018a708096cd633bf65375f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Sun, 14 Jun 2015 16:23:31 -0300 Subject: [PATCH 3/4] (XMB) Avoid implicit memset and move some variables back into the loop --- menu/drivers/xmb.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index a0fffdd733..e0b92298a1 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1013,9 +1013,6 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl, xmb_node_t *core_node = NULL; size_t end = 0; uint64_t frame_count = video_driver_get_frame_count(); - char name[PATH_MAX_LENGTH] = {0}; - char value[PATH_MAX_LENGTH] = {0}; - menu_entry_t entry = {{0}}; menu_handle_t *menu = menu_driver_get_ptr(); if (!list || !list->size || !menu) @@ -1038,6 +1035,9 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl, for (i = 0; i < end; i++) { + char name[PATH_MAX_LENGTH]; + char value[PATH_MAX_LENGTH]; + menu_entry_t entry; float icon_x, icon_y; GLuint texture_switch = 0; @@ -1304,9 +1304,9 @@ static void xmb_frame(void) math_matrix_4x4 mymat, mrot, mscal; unsigned depth; unsigned width, height; - char msg[PATH_MAX_LENGTH] = {0}; - char title_msg[PATH_MAX_LENGTH] = {0}; - char timedate[PATH_MAX_LENGTH] = {0}; + char msg[PATH_MAX_LENGTH]; + char title_msg[PATH_MAX_LENGTH]; + char timedate[PATH_MAX_LENGTH]; bool render_background = false; xmb_handle_t *xmb = NULL; gl_t *gl = NULL; @@ -1330,6 +1330,10 @@ static void xmb_frame(void) if (!gl) return; + msg[0] = '\0'; + title_msg[0] = '\0'; + timedate[0] = '\0'; + video_driver_get_size(&width, &height); menu_display_font_bind_block(menu, font_driver, &xmb->raster_block); From 7dee20f52c87468d59a2a5c0d9ebf54620da8723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Sun, 14 Jun 2015 20:04:08 -0300 Subject: [PATCH 4/4] (XMB) Return from xmb_draw_items when icon_y > height + xmb.icon->size --- menu/drivers/xmb.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index e0b92298a1..85e3efd3d4 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1035,6 +1035,7 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl, for (i = 0; i < end; i++) { + const float half_size = xmb->icon.size / 2.0f; char name[PATH_MAX_LENGTH]; char value[PATH_MAX_LENGTH]; menu_entry_t entry; @@ -1054,15 +1055,18 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl, if (!node) continue; - icon_x = node->x + xmb->margins.screen.left + - xmb->icon.spacing.horizontal - xmb->icon.size / 2.0; - icon_y = xmb->margins.screen.top + node->y + xmb->icon.size / 2.0; + icon_y = xmb->margins.screen.top + node->y + half_size; - if ( - icon_x < -xmb->icon.size / 2 || - icon_x > width || - icon_y < xmb->icon.size / 2 || - icon_y > height + xmb->icon.size) + if (icon_y < half_size) + continue; + + if (icon_y > height + xmb->icon.size) + break; + + icon_x = node->x + xmb->margins.screen.left + + xmb->icon.spacing.horizontal - half_size; + + if (icon_x < -half_size || icon_x > width) continue; menu_entry_get(&entry, i, list, true);