From 6b8a522f16213a70f35a7bbb6db5c5ce8bdc1af7 Mon Sep 17 00:00:00 2001 From: Martijn Coenen Date: Wed, 27 Apr 2016 14:28:17 +0200 Subject: [PATCH] Don't count vm_map_ram as used memory in vmallocinfo. Bug: 28378463 Change-Id: I1f22464dbd31bc9ee7f2307ce7eec4a0e2bbad06 --- core/jni/android_os_Debug.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp index f870a891b0946..e0bfecb140407 100644 --- a/core/jni/android_os_Debug.cpp +++ b/core/jni/android_os_Debug.cpp @@ -597,6 +597,13 @@ static jlong android_os_Debug_getPss(JNIEnv *env, jobject clazz) static long get_allocated_vmalloc_memory() { char line[1024]; + // Ignored tags that don't actually consume memory (ie remappings) + static const char* const ignored_tags[] = { + "ioremap", + "map_lowmem", + "vm_map_ram", + NULL + }; long size, vmalloc_allocated_size = 0; FILE* fp = fopen("/proc/vmallocinfo", "r"); if (fp == NULL) { @@ -606,12 +613,17 @@ static long get_allocated_vmalloc_memory() { if (fgets(line, 1024, fp) == NULL) { break; } - - if (!strstr(line, "ioremap") && !strstr(line, "map_lowmem")) { - // Ignore ioremap and map_lowmem regions, since they don't actually consume memory - if (sscanf(line, "%*x-%*x %ld", &size) == 1) { - vmalloc_allocated_size += size; + bool valid_line = true; + int i = 0; + while (ignored_tags[i]) { + if (strstr(line, ignored_tags[i]) != NULL) { + valid_line = false; + break; } + i++; + } + if (valid_line && (sscanf(line, "%*x-%*x %ld", &size) == 1)) { + vmalloc_allocated_size += size; } } fclose(fp);