From 4ef04d0e7f166dd18e39de82ada4b0978d57e05e Mon Sep 17 00:00:00 2001 From: Kichan Kwon Date: Mon, 6 Mar 2017 16:56:44 +0900 Subject: [PATCH] Add new API for getting physical memory size - /proc/meminfo supports the memory size except kernel reserved memory - However, somebody want to get physical(total) memory size - Therefore, we have to support two kinds of memory size - Physical memory size = number of page * page size Change-Id: I72711f1980dc8ade60578edb0ab7360f2d3f8aa5 Signed-off-by: Kichan Kwon --- include/runtime_info.h | 12 +++++++++++ src/runtime_info_usage.c | 53 +++++++++++++++++++++++++++--------------------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/include/runtime_info.h b/include/runtime_info.h index 6aa5143..1abb9b4 100644 --- a/include/runtime_info.h +++ b/include/runtime_info.h @@ -412,6 +412,18 @@ int runtime_info_get_processor_current_frequency(int core_idx, int *cpu_freq); int runtime_info_get_processor_max_frequency(int core_idx, int *cpu_freq); /** + * @brief Gets the physical memory size. + * @since_tizen 4.0 + * + * @param[out] size Physical memory size (KiB) + * + * @retval #RUNTIME_INFO_ERROR_NONE Successful + * @retval #RUNTIME_INFO_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #RUNTIME_INFO_ERROR_IO_ERROR An I/O error occurred (during file open operation) + */ +int runtime_info_get_physical_memory_size(int *size); + +/** * @} */ diff --git a/src/runtime_info_usage.c b/src/runtime_info_usage.c index 4a05400..2699e2b 100644 --- a/src/runtime_info_usage.c +++ b/src/runtime_info_usage.c @@ -196,29 +196,6 @@ API int runtime_info_get_system_memory_info(runtime_memory_info_s *info) info->used = mem_available ? (info->total - mem_available) : (info->total - info->free - info->cache); info->swap = kBtoKiB(((swap_total > swap_free) ? (int)(swap_total - swap_free) : 0)); - /* - * Get total memory size from zoneinfo - * - * meminfo show the total memory size - * except kernel reserved memory - * - * Therefore, we will use (the number of page * page size) - */ - fp = fopen("/proc/zoneinfo", "r"); - if (fp == NULL) { - _E("IO_ERROR(0x%08x) : failed to open file to read memory size", - RUNTIME_INFO_ERROR_IO_ERROR); - return RUNTIME_INFO_ERROR_IO_ERROR; - } - - info->total = 0; - while (fgets(buf, sizeof(buf), fp) != NULL) - if (sscanf(buf, " spanned %lu", &value) == 1) - info->total += value; - info->total = pagetoKiB(info->total); - - fclose(fp); - return RUNTIME_INFO_ERROR_NONE; } @@ -552,3 +529,33 @@ API int runtime_info_get_processor_max_frequency(int core_idx, int *cpu_freq) return RUNTIME_INFO_ERROR_NONE; } + +API int runtime_info_get_physical_memory_size(int *size) +{ + char buf[256]; + unsigned long value; + int sum; + FILE *fp = fopen("/proc/zoneinfo", "r"); + if (!fp) { + _E("IO_ERROR(0x%08x) : failed to open file to read memory size", + RUNTIME_INFO_ERROR_IO_ERROR); + return RUNTIME_INFO_ERROR_IO_ERROR; + } + + if (!size) { + _E("INVALID PARAMETER(0x%08x) : invalid output parameter", + RUNTIME_INFO_ERROR_INVALID_PARAMETER); + fclose(fp); + return RUNTIME_INFO_ERROR_INVALID_PARAMETER; + } + + sum = 0; + while (fgets(buf, sizeof(buf), fp) != NULL) + if (sscanf(buf, " spanned %lu", &value) == 1) + sum += value; + *size = pagetoKiB(sum); + + fclose(fp); + + return RUNTIME_INFO_ERROR_NONE; +} -- 2.7.4