From ed29c6f59c24478bfaa6e25ddf097be539d7735f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 22 Sep 2019 03:57:31 +0200 Subject: [PATCH] Start going for consistent memory representation - instead of 'memory used' needs to become 'memory free' --- frontend/drivers/platform_ctr.c | 5 +-- frontend/drivers/platform_gx.c | 5 +-- frontend/drivers/platform_switch.c | 7 ++-- frontend/drivers/platform_unix.c | 51 +++++------------------------- frontend/frontend_driver.c | 6 ++-- frontend/frontend_driver.h | 4 +-- menu/menu_displaylist.c | 28 ++-------------- retroarch.c | 15 ++++++--- 8 files changed, 37 insertions(+), 84 deletions(-) diff --git a/frontend/drivers/platform_ctr.c b/frontend/drivers/platform_ctr.c index c6871af90a..e0e76d42ce 100644 --- a/frontend/drivers/platform_ctr.c +++ b/frontend/drivers/platform_ctr.c @@ -504,8 +504,9 @@ static uint64_t frontend_ctr_get_mem_total(void) return osGetMemRegionSize(MEMREGION_ALL); } -static uint64_t frontend_ctr_get_mem_used(void) +static uint64_t frontend_ctr_get_mem_free(void) { + /* TODO/FIXME - does this return 'free memory'? */ return osGetMemRegionUsed(MEMREGION_ALL); } @@ -609,7 +610,7 @@ frontend_ctx_driver_t frontend_ctx_ctr = frontend_ctr_get_powerstate, frontend_ctr_parse_drive_list, frontend_ctr_get_mem_total, - frontend_ctr_get_mem_used, + frontend_ctr_get_mem_free, NULL, /* install_signal_handler */ NULL, /* get_signal_handler_state */ NULL, /* set_signal_handler_state */ diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index 143627ff40..27b8b18275 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -525,10 +525,11 @@ static uint64_t frontend_gx_get_mem_total(void) return total; } -static uint64_t frontend_gx_get_mem_used(void) +static uint64_t frontend_gx_get_mem_free(void) { uint64_t total = SYSMEM1_SIZE - SYS_GetArena1Size(); #if defined(HW_RVL) && !defined(IS_SALAMANDER) + /* TODO/FIXME - this needs to change */ total += gx_mem2_used(); #endif return total; @@ -555,7 +556,7 @@ frontend_ctx_driver_t frontend_ctx_gx = { NULL, /* get_powerstate */ frontend_gx_parse_drive_list, frontend_gx_get_mem_total, - frontend_gx_get_mem_used, + frontend_gx_get_mem_free, NULL, /* install_signal_handler */ NULL, /* get_sighandler_state */ NULL, /* set_sighandler_state */ diff --git a/frontend/drivers/platform_switch.c b/frontend/drivers/platform_switch.c index fdc5f56926..e95708b978 100644 --- a/frontend/drivers/platform_switch.c +++ b/frontend/drivers/platform_switch.c @@ -820,13 +820,16 @@ static uint64_t frontend_switch_get_mem_total(void) { uint64_t memoryTotal = 0; svcGetInfo(&memoryTotal, 6, 0xffff8001, 0); - memoryTotal += frontend_switch_get_mem_used(); + /* TODO/FIXME - is now 'free memory', perhaps logic + * here needs to change */ + memoryTotal += frontend_switch_get_mem_free(); return memoryTotal; } -static uint64_t frontend_switch_get_mem_used(void) +static uint64_t frontend_switch_get_mem_free(void) { + /* TODO/FIXME - should become 'free memory' */ uint64_t memoryUsed = 0; svcGetInfo(&memoryUsed, 7, 0xffff8001, 0); diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c index 00f1c5f1b6..bfafba99cc 100644 --- a/frontend/drivers/platform_unix.c +++ b/frontend/drivers/platform_unix.c @@ -2048,51 +2048,16 @@ static void frontend_unix_exitspawn(char *core_path, size_t core_path_size) static uint64_t frontend_unix_get_mem_total(void) { - char line[256]; - uint64_t total = 0; - FILE * data = fopen("/proc/meminfo", "r"); - if (!data) - return 0; - - while (fgets(line, sizeof(line), data)) - { - if (sscanf(line, "MemTotal: " STRING_REP_USIZE " kB", (size_t*)&total) == 1) - { - fclose(data); - total *= 1024; - return total; - } - } - - fclose(data); - return 0; + long pages = sysconf(_SC_PHYS_PAGES); + long page_size = sysconf(_SC_PAGE_SIZE); + return pages * page_size; } -static uint64_t frontend_unix_get_mem_used(void) +static uint64_t frontend_unix_get_mem_free(void) { - char line[256]; - uint64_t total = 0; - uint64_t freemem = 0; - uint64_t buffers = 0; - uint64_t cached = 0; - FILE* data = fopen("/proc/meminfo", "r"); - if (!data) - return 0; - - while (fgets(line, sizeof(line), data)) - { - if (sscanf(line, "MemTotal: " STRING_REP_USIZE " kB", (size_t*)&total) == 1) - total *= 1024; - if (sscanf(line, "MemFree: " STRING_REP_USIZE " kB", (size_t*)&freemem) == 1) - freemem *= 1024; - if (sscanf(line, "Buffers: " STRING_REP_USIZE " kB", (size_t*)&buffers) == 1) - buffers *= 1024; - if (sscanf(line, "Cached: " STRING_REP_USIZE " kB", (size_t*)&cached) == 1) - cached *= 1024; - } - - fclose(data); - return total - freemem - buffers - cached; + unsigned long long ps = sysconf(_SC_PAGESIZE); + unsigned long long pn = sysconf(_SC_AVPHYS_PAGES); + return ps * pn; } /*#include */ @@ -2418,7 +2383,7 @@ frontend_ctx_driver_t frontend_ctx_unix = { frontend_unix_get_powerstate, frontend_unix_parse_drive_list, frontend_unix_get_mem_total, - frontend_unix_get_mem_used, + frontend_unix_get_mem_free, frontend_unix_install_signal_handlers, frontend_unix_get_signal_handler_state, frontend_unix_set_signal_handler_state, diff --git a/frontend/frontend_driver.c b/frontend/frontend_driver.c index 9c6c6e3ce6..1c859a9a2e 100644 --- a/frontend/frontend_driver.c +++ b/frontend/frontend_driver.c @@ -370,12 +370,12 @@ uint64_t frontend_driver_get_total_memory(void) return frontend->get_total_mem(); } -uint64_t frontend_driver_get_used_memory(void) +uint64_t frontend_driver_get_free_memory(void) { frontend_ctx_driver_t *frontend = frontend_get_ptr(); - if (!frontend || !frontend->get_used_mem) + if (!frontend || !frontend->get_free_mem) return 0; - return frontend->get_used_mem(); + return frontend->get_free_mem(); } void frontend_driver_install_signal_handler(void) diff --git a/frontend/frontend_driver.h b/frontend/frontend_driver.h index 55515b512a..fee9d8ebf1 100644 --- a/frontend/frontend_driver.h +++ b/frontend/frontend_driver.h @@ -95,7 +95,7 @@ typedef struct frontend_ctx_driver enum frontend_powerstate (*get_powerstate)(int *seconds, int *percent); int (*parse_drive_list)(void*, bool); uint64_t (*get_total_mem)(void); - uint64_t (*get_used_mem)(void); + uint64_t (*get_free_mem)(void); void (*install_signal_handler)(void); int (*get_signal_handler_state)(void); void (*set_signal_handler_state)(int value); @@ -193,7 +193,7 @@ bool frontend_driver_get_salamander_basename(char *s, size_t len); uint64_t frontend_driver_get_total_memory(void); -uint64_t frontend_driver_get_used_memory(void); +uint64_t frontend_driver_get_free_memory(void); void frontend_driver_install_signal_handler(void); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 2fd29b98d1..fd8f99fc4c 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -579,47 +579,25 @@ static unsigned menu_displaylist_parse_system_info(menu_displaylist_info_t *info char tmp[PATH_MAX_LENGTH]; char tmp2[PATH_MAX_LENGTH]; char tmp3[PATH_MAX_LENGTH]; - uint64_t memory_used = frontend_driver_get_used_memory(); + uint64_t memory_free = frontend_driver_get_free_memory(); uint64_t memory_total = frontend_driver_get_total_memory(); tmp[0] = tmp2[0] = tmp3[0] = '\0'; - if (memory_used != 0 && memory_total != 0) + if (memory_free != 0 && memory_total != 0) { snprintf(tmp, sizeof(tmp), - "%s %s: %" PRIu64 "/%" PRIu64 " B", - msg_hash_to_str(MSG_MEMORY), - msg_hash_to_str(MSG_IN_BYTES), - memory_used, - memory_total - ); - snprintf(tmp2, sizeof(tmp2), "%s %s: %" PRIu64 "/%" PRIu64 " MB", msg_hash_to_str(MSG_MEMORY), msg_hash_to_str(MSG_IN_MEGABYTES), - BYTES_TO_MB(memory_used), + BYTES_TO_MB(memory_free), BYTES_TO_MB(memory_total) ); - snprintf(tmp3, sizeof(tmp3), - "%s %s: %" PRIu64 "/%" PRIu64 " GB", - msg_hash_to_str(MSG_MEMORY), - msg_hash_to_str(MSG_IN_GIGABYTES), - BYTES_TO_GB(memory_used), - BYTES_TO_GB(memory_total) - ); if (menu_entries_append_enum(info->list, tmp, "", MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0)) count++; - if (menu_entries_append_enum(info->list, tmp2, "", - MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, - MENU_SETTINGS_CORE_INFO_NONE, 0, 0)) - count++; - if (menu_entries_append_enum(info->list, tmp3, "", - MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, - MENU_SETTINGS_CORE_INFO_NONE, 0, 0)) - count++; } } diff --git a/retroarch.c b/retroarch.c index 690eef1c3d..e4af47348d 100644 --- a/retroarch.c +++ b/retroarch.c @@ -11285,11 +11285,16 @@ static void retroarch_overlay_deinit(void) static void retroarch_overlay_init(void) { settings_t *settings = configuration_settings; + +#if 0 #if defined(GEKKO) + /* TODO/FIXME - Wiimpathy - behavior here has changed - can you + * rewrite this? */ /* Avoid a crash at startup or even when toggling overlay in rgui */ - uint64_t memory_used = frontend_driver_get_used_memory(); - if (memory_used > (72 * 1024 * 1024)) + uint64_t memory_free = frontend_driver_get_free_memory(); + if (memory_free > (72 * 1024 * 1024)) return; +#endif #endif retroarch_overlay_deinit(); @@ -19152,7 +19157,7 @@ static void video_driver_frame(const void *data, unsigned width, if (video_info.memory_show) { char mem[128]; - uint64_t mem_bytes_used = frontend_driver_get_used_memory(); + uint64_t mem_bytes_used = frontend_driver_get_free_memory(); uint64_t mem_bytes_total = frontend_driver_get_total_memory(); mem[0] = '\0'; @@ -25598,10 +25603,10 @@ static bool rarch_write_debug_info(void) filestream_printf(file, "CPU Cores: %u\n", cpu_features_get_core_amount()); { - uint64_t memory_used = frontend_driver_get_used_memory(); + uint64_t memory_free = frontend_driver_get_free_memory(); uint64_t memory_total = frontend_driver_get_total_memory(); - filestream_printf(file, "Memory: %" PRIu64 "/%" PRIu64 " MB\n", memory_used / 1024 / 1024, memory_total / 1024 / 1024); + filestream_printf(file, "Memory: %" PRIu64 "/%" PRIu64 " MB\n", memory_free / 1024 / 1024, memory_total / 1024 / 1024); } filestream_printf(file, "GPU Device: %s\n", !string_is_empty(video_driver_get_gpu_device_string()) ?