Merge "Don't count vm_map_ram as used memory in vmallocinfo." into nyc-dev

This commit is contained in:
Martijn Coenen
2016-04-28 09:40:11 +00:00
committed by Android (Google) Code Review

View File

@@ -597,6 +597,13 @@ static jlong android_os_Debug_getPss(JNIEnv *env, jobject clazz)
static long get_allocated_vmalloc_memory() { static long get_allocated_vmalloc_memory() {
char line[1024]; 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; long size, vmalloc_allocated_size = 0;
FILE* fp = fopen("/proc/vmallocinfo", "r"); FILE* fp = fopen("/proc/vmallocinfo", "r");
if (fp == NULL) { if (fp == NULL) {
@@ -606,12 +613,17 @@ static long get_allocated_vmalloc_memory() {
if (fgets(line, 1024, fp) == NULL) { if (fgets(line, 1024, fp) == NULL) {
break; break;
} }
bool valid_line = true;
if (!strstr(line, "ioremap") && !strstr(line, "map_lowmem")) { int i = 0;
// Ignore ioremap and map_lowmem regions, since they don't actually consume memory while (ignored_tags[i]) {
if (sscanf(line, "%*x-%*x %ld", &size) == 1) { if (strstr(line, ignored_tags[i]) != NULL) {
vmalloc_allocated_size += size; valid_line = false;
break;
} }
i++;
}
if (valid_line && (sscanf(line, "%*x-%*x %ld", &size) == 1)) {
vmalloc_allocated_size += size;
} }
} }
fclose(fp); fclose(fp);