Merge "Add more details to dumpsys meminfo -d"
am: 4ccf8b83a1
Change-Id: I54fadc1bd30cc508faccabe1553c2db4cc040904
This commit is contained in:
@@ -221,28 +221,69 @@ public final class Debug
|
||||
/** @hide */
|
||||
public static final int OTHER_OTHER_MEMTRACK = 16;
|
||||
|
||||
// Needs to be declared here for the DVK_STAT ranges below.
|
||||
/** @hide */
|
||||
public static final int NUM_OTHER_STATS = 17;
|
||||
|
||||
// Dalvik subsections.
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_NORMAL = 17;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_LARGE = 18;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_LINEARALLOC = 19;
|
||||
public static final int OTHER_DALVIK_ZYGOTE = 19;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_ACCOUNTING = 20;
|
||||
public static final int OTHER_DALVIK_NON_MOVING = 20;
|
||||
// Section begins and ends for dumpsys, relative to the DALVIK categories.
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_CODE_CACHE = 21;
|
||||
public static final int OTHER_DVK_STAT_DALVIK_START =
|
||||
OTHER_DALVIK_NORMAL - NUM_OTHER_STATS;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_ZYGOTE = 22;
|
||||
public static final int OTHER_DVK_STAT_DALVIK_END =
|
||||
OTHER_DALVIK_NON_MOVING - NUM_OTHER_STATS;
|
||||
|
||||
// Dalvik Other subsections.
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_NON_MOVING = 23;
|
||||
public static final int OTHER_DALVIK_OTHER_LINEARALLOC = 21;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_INDIRECT_REFERENCE_TABLE = 24;
|
||||
public static final int OTHER_DALVIK_OTHER_ACCOUNTING = 22;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_OTHER_CODE_CACHE = 23;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_OTHER_COMPILER_METADATA = 24;
|
||||
/** @hide */
|
||||
public static final int OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE = 25;
|
||||
/** @hide */
|
||||
public static final int OTHER_DVK_STAT_DALVIK_OTHER_START =
|
||||
OTHER_DALVIK_OTHER_LINEARALLOC - NUM_OTHER_STATS;
|
||||
/** @hide */
|
||||
public static final int OTHER_DVK_STAT_DALVIK_OTHER_END =
|
||||
OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE - NUM_OTHER_STATS;
|
||||
|
||||
// Dex subsections (Boot vdex, App dex, and App vdex).
|
||||
/** @hide */
|
||||
public static final int OTHER_DEX_BOOT_VDEX = 26;
|
||||
/** @hide */
|
||||
public static final int OTHER_DEX_APP_DEX = 27;
|
||||
/** @hide */
|
||||
public static final int OTHER_DEX_APP_VDEX = 28;
|
||||
/** @hide */
|
||||
public static final int OTHER_DVK_STAT_DEX_START = OTHER_DEX_BOOT_VDEX - NUM_OTHER_STATS;
|
||||
/** @hide */
|
||||
public static final int OTHER_DVK_STAT_DEX_END = OTHER_DEX_APP_VDEX - NUM_OTHER_STATS;
|
||||
|
||||
// Art subsections (App image, boot image).
|
||||
/** @hide */
|
||||
public static final int OTHER_ART_APP = 29;
|
||||
/** @hide */
|
||||
public static final int OTHER_ART_BOOT = 30;
|
||||
/** @hide */
|
||||
public static final int OTHER_DVK_STAT_ART_START = OTHER_ART_APP - NUM_OTHER_STATS;
|
||||
/** @hide */
|
||||
public static final int OTHER_DVK_STAT_ART_END = OTHER_ART_BOOT - NUM_OTHER_STATS;
|
||||
|
||||
/** @hide */
|
||||
public static final int NUM_OTHER_STATS = 17;
|
||||
|
||||
/** @hide */
|
||||
public static final int NUM_DVK_STATS = 8;
|
||||
public static final int NUM_DVK_STATS = 14;
|
||||
|
||||
/** @hide */
|
||||
public static final int NUM_CATEGORIES = 8;
|
||||
@@ -406,12 +447,18 @@ public final class Debug
|
||||
case OTHER_OTHER_MEMTRACK: return "Other mtrack";
|
||||
case OTHER_DALVIK_NORMAL: return ".Heap";
|
||||
case OTHER_DALVIK_LARGE: return ".LOS";
|
||||
case OTHER_DALVIK_LINEARALLOC: return ".LinearAlloc";
|
||||
case OTHER_DALVIK_ACCOUNTING: return ".GC";
|
||||
case OTHER_DALVIK_CODE_CACHE: return ".JITCache";
|
||||
case OTHER_DALVIK_ZYGOTE: return ".Zygote";
|
||||
case OTHER_DALVIK_NON_MOVING: return ".NonMoving";
|
||||
case OTHER_DALVIK_INDIRECT_REFERENCE_TABLE: return ".IndirectRef";
|
||||
case OTHER_DALVIK_OTHER_LINEARALLOC: return ".LinearAlloc";
|
||||
case OTHER_DALVIK_OTHER_ACCOUNTING: return ".GC";
|
||||
case OTHER_DALVIK_OTHER_CODE_CACHE: return ".JITCache";
|
||||
case OTHER_DALVIK_OTHER_COMPILER_METADATA: return ".CompilerMetadata";
|
||||
case OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE: return ".IndirectRef";
|
||||
case OTHER_DEX_BOOT_VDEX: return ".Boot vdex";
|
||||
case OTHER_DEX_APP_DEX: return ".App dex";
|
||||
case OTHER_DEX_APP_VDEX: return ".App vdex";
|
||||
case OTHER_ART_APP: return ".App art";
|
||||
case OTHER_ART_BOOT: return ".Boot art";
|
||||
default: return "????";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,14 +75,27 @@ enum {
|
||||
HEAP_GL,
|
||||
HEAP_OTHER_MEMTRACK,
|
||||
|
||||
// Dalvik extra sections (heap).
|
||||
HEAP_DALVIK_NORMAL,
|
||||
HEAP_DALVIK_LARGE,
|
||||
HEAP_DALVIK_LINEARALLOC,
|
||||
HEAP_DALVIK_ACCOUNTING,
|
||||
HEAP_DALVIK_CODE_CACHE,
|
||||
HEAP_DALVIK_ZYGOTE,
|
||||
HEAP_DALVIK_NON_MOVING,
|
||||
HEAP_DALVIK_INDIRECT_REFERENCE_TABLE,
|
||||
|
||||
// Dalvik other extra sections.
|
||||
HEAP_DALVIK_OTHER_LINEARALLOC,
|
||||
HEAP_DALVIK_OTHER_ACCOUNTING,
|
||||
HEAP_DALVIK_OTHER_CODE_CACHE,
|
||||
HEAP_DALVIK_OTHER_COMPILER_METADATA,
|
||||
HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE,
|
||||
|
||||
// Boot vdex / app dex / app vdex
|
||||
HEAP_DEX_BOOT_VDEX,
|
||||
HEAP_DEX_APP_DEX,
|
||||
HEAP_DEX_APP_VDEX,
|
||||
|
||||
// App art, boot art.
|
||||
HEAP_ART_APP,
|
||||
HEAP_ART_BOOT,
|
||||
|
||||
_NUM_HEAP,
|
||||
_NUM_EXCLUSIVE_HEAP = HEAP_OTHER_MEMTRACK+1,
|
||||
@@ -291,15 +304,30 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
|
||||
whichHeap = HEAP_TTF;
|
||||
is_swappable = true;
|
||||
} else if ((nameLen > 4 && strstr(name, ".dex") != NULL) ||
|
||||
(nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0) ||
|
||||
(nameLen > 5 && strcmp(name+nameLen-5, ".vdex") == 0)) {
|
||||
(nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0)) {
|
||||
whichHeap = HEAP_DEX;
|
||||
subHeap = HEAP_DEX_APP_DEX;
|
||||
is_swappable = true;
|
||||
} else if (nameLen > 5 && strcmp(name+nameLen-5, ".vdex") == 0) {
|
||||
whichHeap = HEAP_DEX;
|
||||
// Handle system@framework@boot* and system/framework/boot*
|
||||
if (strstr(name, "@boot") != NULL || strstr(name, "/boot") != NULL) {
|
||||
subHeap = HEAP_DEX_BOOT_VDEX;
|
||||
} else {
|
||||
subHeap = HEAP_DEX_APP_VDEX;
|
||||
}
|
||||
is_swappable = true;
|
||||
} else if (nameLen > 4 && strcmp(name+nameLen-4, ".oat") == 0) {
|
||||
whichHeap = HEAP_OAT;
|
||||
is_swappable = true;
|
||||
} else if (nameLen > 4 && strcmp(name+nameLen-4, ".art") == 0) {
|
||||
whichHeap = HEAP_ART;
|
||||
// Handle system@framework@boot* and system/framework/boot*
|
||||
if (strstr(name, "@boot") != NULL || strstr(name, "/boot") != NULL) {
|
||||
subHeap = HEAP_ART_BOOT;
|
||||
} else {
|
||||
subHeap = HEAP_ART_APP;
|
||||
}
|
||||
is_swappable = true;
|
||||
} else if (strncmp(name, "/dev/", 5) == 0) {
|
||||
if (strncmp(name, "/dev/kgsl-3d0", 13) == 0) {
|
||||
@@ -308,7 +336,7 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
|
||||
if (strncmp(name, "/dev/ashmem/dalvik-", 19) == 0) {
|
||||
whichHeap = HEAP_DALVIK_OTHER;
|
||||
if (strstr(name, "/dev/ashmem/dalvik-LinearAlloc") == name) {
|
||||
subHeap = HEAP_DALVIK_LINEARALLOC;
|
||||
subHeap = HEAP_DALVIK_OTHER_LINEARALLOC;
|
||||
} else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) ||
|
||||
(strstr(name, "/dev/ashmem/dalvik-main space") == name)) {
|
||||
// This is the regular Dalvik heap.
|
||||
@@ -326,13 +354,14 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
|
||||
whichHeap = HEAP_DALVIK;
|
||||
subHeap = HEAP_DALVIK_ZYGOTE;
|
||||
} else if (strstr(name, "/dev/ashmem/dalvik-indirect ref") == name) {
|
||||
subHeap = HEAP_DALVIK_INDIRECT_REFERENCE_TABLE;
|
||||
subHeap = HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE;
|
||||
} else if (strstr(name, "/dev/ashmem/dalvik-jit-code-cache") == name ||
|
||||
strstr(name, "/dev/ashmem/dalvik-data-code-cache") == name ||
|
||||
strstr(name, "/dev/ashmem/dalvik-CompilerMetadata") == name) {
|
||||
subHeap = HEAP_DALVIK_CODE_CACHE;
|
||||
strstr(name, "/dev/ashmem/dalvik-data-code-cache") == name) {
|
||||
subHeap = HEAP_DALVIK_OTHER_CODE_CACHE;
|
||||
} else if (strstr(name, "/dev/ashmem/dalvik-CompilerMetadata") == name) {
|
||||
subHeap = HEAP_DALVIK_OTHER_COMPILER_METADATA;
|
||||
} else {
|
||||
subHeap = HEAP_DALVIK_ACCOUNTING; // Default to accounting.
|
||||
subHeap = HEAP_DALVIK_OTHER_ACCOUNTING; // Default to accounting.
|
||||
}
|
||||
} else if (strncmp(name, "/dev/ashmem/CursorWindow", 24) == 0) {
|
||||
whichHeap = HEAP_CURSOR;
|
||||
@@ -417,7 +446,8 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
|
||||
stats[whichHeap].sharedClean += shared_clean;
|
||||
stats[whichHeap].swappedOut += swapped_out;
|
||||
stats[whichHeap].swappedOutPss += swapped_out_pss;
|
||||
if (whichHeap == HEAP_DALVIK || whichHeap == HEAP_DALVIK_OTHER) {
|
||||
if (whichHeap == HEAP_DALVIK || whichHeap == HEAP_DALVIK_OTHER ||
|
||||
whichHeap == HEAP_DEX || whichHeap == HEAP_ART) {
|
||||
stats[subHeap].pss += pss;
|
||||
stats[subHeap].swappablePss += swappable_pss;
|
||||
stats[subHeap].privateDirty += private_dirty;
|
||||
|
||||
@@ -17319,23 +17319,41 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
ArrayList<MemItem> catMems = new ArrayList<MemItem>();
|
||||
|
||||
catMems.add(new MemItem("Native", "Native", nativePss, nativeSwapPss, -1));
|
||||
final MemItem dalvikItem =
|
||||
new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, -2);
|
||||
if (dalvikSubitemPss.length > 0) {
|
||||
dalvikItem.subitems = new ArrayList<MemItem>();
|
||||
for (int j=0; j<dalvikSubitemPss.length; j++) {
|
||||
final String name = Debug.MemoryInfo.getOtherLabel(
|
||||
Debug.MemoryInfo.NUM_OTHER_STATS + j);
|
||||
dalvikItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
|
||||
dalvikSubitemSwapPss[j], j));
|
||||
}
|
||||
}
|
||||
catMems.add(dalvikItem);
|
||||
final int dalvikId = -2;
|
||||
catMems.add(new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, dalvikId));
|
||||
catMems.add(new MemItem("Unknown", "Unknown", otherPss, otherSwapPss, -3));
|
||||
for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
|
||||
String label = Debug.MemoryInfo.getOtherLabel(j);
|
||||
catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], j));
|
||||
}
|
||||
if (dalvikSubitemPss.length > 0) {
|
||||
// Add dalvik subitems.
|
||||
for (MemItem memItem : catMems) {
|
||||
int memItemStart = 0, memItemEnd = 0;
|
||||
if (memItem.id == dalvikId) {
|
||||
memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_START;
|
||||
memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_END;
|
||||
} else if (memItem.id == Debug.MemoryInfo.OTHER_DALVIK_OTHER) {
|
||||
memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_OTHER_START;
|
||||
memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_OTHER_END;
|
||||
} else if (memItem.id == Debug.MemoryInfo.OTHER_DEX) {
|
||||
memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DEX_START;
|
||||
memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DEX_END;
|
||||
} else if (memItem.id == Debug.MemoryInfo.OTHER_ART) {
|
||||
memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_ART_START;
|
||||
memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_ART_END;
|
||||
} else {
|
||||
continue; // No subitems, continue.
|
||||
}
|
||||
memItem.subitems = new ArrayList<MemItem>();
|
||||
for (int j=memItemStart; j<=memItemEnd; j++) {
|
||||
final String name = Debug.MemoryInfo.getOtherLabel(
|
||||
Debug.MemoryInfo.NUM_OTHER_STATS + j);
|
||||
memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
|
||||
dalvikSubitemSwapPss[j], j));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<MemItem> oomMems = new ArrayList<MemItem>();
|
||||
for (int j=0; j<oomPss.length; j++) {
|
||||
|
||||
Reference in New Issue
Block a user