Loading core/java/android/os/Debug.java +59 −12 Original line number Diff line number Diff line Loading @@ -223,28 +223,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_NON_MOVING = 20; // Section begins and ends for dumpsys, relative to the DALVIK categories. /** @hide */ public static final int OTHER_DVK_STAT_DALVIK_START = OTHER_DALVIK_NORMAL - NUM_OTHER_STATS; /** @hide */ public static final int OTHER_DALVIK_ACCOUNTING = 20; 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_OTHER_LINEARALLOC = 21; /** @hide */ public static final int OTHER_DALVIK_OTHER_ACCOUNTING = 22; /** @hide */ public static final int OTHER_DALVIK_CODE_CACHE = 21; public static final int OTHER_DALVIK_OTHER_CODE_CACHE = 23; /** @hide */ public static final int OTHER_DALVIK_ZYGOTE = 22; public static final int OTHER_DALVIK_OTHER_COMPILER_METADATA = 24; /** @hide */ public static final int OTHER_DALVIK_NON_MOVING = 23; public static final int OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE = 25; /** @hide */ public static final int OTHER_DALVIK_INDIRECT_REFERENCE_TABLE = 24; 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 NUM_OTHER_STATS = 17; 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_DVK_STATS = 8; public static final int NUM_DVK_STATS = 14; /** @hide */ public static final int NUM_CATEGORIES = 8; Loading Loading @@ -408,12 +449,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 "????"; } } Loading core/jni/android_os_Debug.cpp +43 −13 Original line number Diff line number Diff line Loading @@ -81,14 +81,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, Loading Loading @@ -297,15 +310,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) { Loading @@ -314,7 +342,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. Loading @@ -332,13 +360,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; Loading Loading @@ -423,7 +452,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; Loading services/core/java/com/android/server/am/ActivityManagerService.java +30 −12 Original line number Diff line number Diff line Loading @@ -17368,22 +17368,40 @@ 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); 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) { dalvikItem.subitems = new ArrayList<MemItem>(); for (int j=0; j<dalvikSubitemPss.length; j++) { // 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); dalvikItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j], memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j], dalvikSubitemSwapPss[j], j)); } } catMems.add(dalvikItem); 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)); } ArrayList<MemItem> oomMems = new ArrayList<MemItem>(); Loading
core/java/android/os/Debug.java +59 −12 Original line number Diff line number Diff line Loading @@ -223,28 +223,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_NON_MOVING = 20; // Section begins and ends for dumpsys, relative to the DALVIK categories. /** @hide */ public static final int OTHER_DVK_STAT_DALVIK_START = OTHER_DALVIK_NORMAL - NUM_OTHER_STATS; /** @hide */ public static final int OTHER_DALVIK_ACCOUNTING = 20; 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_OTHER_LINEARALLOC = 21; /** @hide */ public static final int OTHER_DALVIK_OTHER_ACCOUNTING = 22; /** @hide */ public static final int OTHER_DALVIK_CODE_CACHE = 21; public static final int OTHER_DALVIK_OTHER_CODE_CACHE = 23; /** @hide */ public static final int OTHER_DALVIK_ZYGOTE = 22; public static final int OTHER_DALVIK_OTHER_COMPILER_METADATA = 24; /** @hide */ public static final int OTHER_DALVIK_NON_MOVING = 23; public static final int OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE = 25; /** @hide */ public static final int OTHER_DALVIK_INDIRECT_REFERENCE_TABLE = 24; 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 NUM_OTHER_STATS = 17; 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_DVK_STATS = 8; public static final int NUM_DVK_STATS = 14; /** @hide */ public static final int NUM_CATEGORIES = 8; Loading Loading @@ -408,12 +449,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 "????"; } } Loading
core/jni/android_os_Debug.cpp +43 −13 Original line number Diff line number Diff line Loading @@ -81,14 +81,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, Loading Loading @@ -297,15 +310,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) { Loading @@ -314,7 +342,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. Loading @@ -332,13 +360,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; Loading Loading @@ -423,7 +452,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; Loading
services/core/java/com/android/server/am/ActivityManagerService.java +30 −12 Original line number Diff line number Diff line Loading @@ -17368,22 +17368,40 @@ 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); 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) { dalvikItem.subitems = new ArrayList<MemItem>(); for (int j=0; j<dalvikSubitemPss.length; j++) { // 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); dalvikItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j], memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j], dalvikSubitemSwapPss[j], j)); } } catMems.add(dalvikItem); 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)); } ArrayList<MemItem> oomMems = new ArrayList<MemItem>();