#define CPU_USAGE 2
#define kBtoKiB(val) (int)(((long long)val * 1024)/1000)
+#define pagetoKiB(val) (int)((long long)val * 4096 / 1000)
//LCOV_EXCL_START : system error
static int runtime_info_get_dbus_error(const char *err_name)
API int runtime_info_get_system_memory_info(runtime_memory_info_s *info)
{
- FILE *meminfo_fp;
+ FILE *fp;
char buf[256];
unsigned long swap_total, swap_free, value, mem_available;
swap_total = swap_free = mem_available = 0;
- meminfo_fp = fopen("/proc/meminfo", "r");
- if (meminfo_fp == NULL) {
+ fp = fopen("/proc/meminfo", "r");
+ if (fp == NULL) {
_E("IO_ERROR(0x%08x) : failed to open file to read memory usage",
RUNTIME_INFO_ERROR_IO_ERROR);
return RUNTIME_INFO_ERROR_IO_ERROR;
}
- while (fgets(buf, sizeof(buf), meminfo_fp) != NULL) {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
if (sscanf(buf, "MemTotal: %lu", &value) == 1)
info->total = kBtoKiB(value);
else if (sscanf(buf, "MemFree: %lu", &value) == 1)
else if (sscanf(buf, "SwapFree: %lu", &value) == 1)
swap_free = value;
}
- fclose(meminfo_fp);
+ fclose(fp);
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;
}