Merge "ActivityManager: Include Private Dirty Pages in Meminfo" into main
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index c0da30d..6c840a5 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1690,19 +1690,23 @@
     private static final int INDEX_NATIVE_PSS = 0;
     private static final int INDEX_NATIVE_SWAP_PSS = 1;
     private static final int INDEX_NATIVE_RSS = 2;
-    private static final int INDEX_DALVIK_PSS = 3;
-    private static final int INDEX_DALVIK_SWAP_PSS = 4;
-    private static final int INDEX_DALVIK_RSS = 5;
-    private static final int INDEX_OTHER_PSS = 6;
-    private static final int INDEX_OTHER_SWAP_PSS = 7;
-    private static final int INDEX_OTHER_RSS = 8;
-    private static final int INDEX_TOTAL_PSS = 9;
-    private static final int INDEX_TOTAL_SWAP_PSS = 10;
-    private static final int INDEX_TOTAL_RSS = 11;
-    private static final int INDEX_TOTAL_NATIVE_PSS = 12;
-    private static final int INDEX_TOTAL_MEMTRACK_GRAPHICS = 13;
-    private static final int INDEX_TOTAL_MEMTRACK_GL = 14;
-    private static final int INDEX_LAST = 15;
+    private static final int INDEX_NATIVE_PRIVATE_DIRTY = 3;
+    private static final int INDEX_DALVIK_PSS = 4;
+    private static final int INDEX_DALVIK_SWAP_PSS = 5;
+    private static final int INDEX_DALVIK_RSS = 6;
+    private static final int INDEX_DALVIK_PRIVATE_DIRTY = 7;
+    private static final int INDEX_OTHER_PSS = 8;
+    private static final int INDEX_OTHER_SWAP_PSS = 9;
+    private static final int INDEX_OTHER_RSS = 10;
+    private static final int INDEX_OTHER_PRIVATE_DIRTY = 11;
+    private static final int INDEX_TOTAL_PSS = 12;
+    private static final int INDEX_TOTAL_SWAP_PSS = 13;
+    private static final int INDEX_TOTAL_RSS = 14;
+    private static final int INDEX_TOTAL_PRIVATE_DIRTY = 15;
+    private static final int INDEX_TOTAL_NATIVE_PSS = 16;
+    private static final int INDEX_TOTAL_MEMTRACK_GRAPHICS = 17;
+    private static final int INDEX_TOTAL_MEMTRACK_GL = 18;
+    private static final int INDEX_LAST = 19;
 
     /**
      * Used to notify activity lifecycle events.
@@ -11355,13 +11359,14 @@
         final long pss;
         final long swapPss;
         final long mRss;
+        final long mPrivateDirty;
         final int id; // pid
         final int userId;
         final boolean hasActivities;
         ArrayList<MemItem> subitems;
 
-        MemItem(String label, String shortLabel, long pss, long swapPss, long rss, int id,
-                @UserIdInt int userId,
+        MemItem(String label, String shortLabel, long pss, long swapPss, long rss,
+                long privateDirty, int id, @UserIdInt int userId,
                 boolean hasActivities) {
             this.isProc = true;
             this.label = label;
@@ -11369,18 +11374,21 @@
             this.pss = pss;
             this.swapPss = swapPss;
             this.mRss = rss;
+            this.mPrivateDirty = privateDirty;
             this.id = id;
             this.userId = userId;
             this.hasActivities = hasActivities;
         }
 
-        MemItem(String label, String shortLabel, long pss, long swapPss, long rss, int id) {
+        MemItem(String label, String shortLabel, long pss, long swapPss, long rss,
+                long privateDirty, int id) {
             this.isProc = false;
             this.label = label;
             this.shortLabel = shortLabel;
             this.pss = pss;
             this.swapPss = swapPss;
             this.mRss = rss;
+            this.mPrivateDirty = privateDirty;
             this.id = id;
             this.userId = UserHandle.USER_SYSTEM;
             this.hasActivities = false;
@@ -11405,7 +11413,7 @@
 
     static final void dumpMemItems(PrintWriter pw, String prefix, String tag,
             ArrayList<MemItem> items, boolean sort, boolean isCompact, boolean dumpPss,
-            boolean dumpSwapPss) {
+            boolean dumpSwapPss, boolean dumpPrivateDirty) {
         if (sort && !isCompact) {
             sortMemItems(items, dumpPss);
         }
@@ -11413,14 +11421,18 @@
         for (int i=0; i<items.size(); i++) {
             MemItem mi = items.get(i);
             if (!isCompact) {
-                if (dumpPss && dumpSwapPss) {
-                    pw.printf("%s%s: %-60s (%s in swap)\n", prefix, stringifyKBSize(mi.pss),
-                            mi.label, stringifyKBSize(mi.swapPss));
-                } else {
-                    pw.printf("%s%s: %s%s\n", prefix, stringifyKBSize(dumpPss ? mi.pss : mi.mRss),
+                pw.printf("%s%s: %s%s\n", prefix, stringifyKBSize(dumpPss ? mi.pss : mi.mRss),
                             mi.label,
                             mi.userId != UserHandle.USER_SYSTEM ? " (user " + mi.userId + ")" : "");
+                if (dumpPss && dumpSwapPss) {
+                    pw.printf("(%s in swap%s", stringifyKBSize(mi.swapPss),
+                            dumpPrivateDirty ? ", " : ")");
                 }
+                if (dumpPrivateDirty) {
+                    pw.printf("%s%s private dirty)", dumpSwapPss ? "" : "(",
+                            stringifyKBSize(mi.mPrivateDirty));
+                }
+                pw.printf("\n");
             } else if (mi.isProc) {
                 pw.print("proc,"); pw.print(tag); pw.print(","); pw.print(mi.shortLabel);
                 pw.print(","); pw.print(mi.id); pw.print(",");
@@ -11434,7 +11446,7 @@
             }
             if (mi.subitems != null) {
                 dumpMemItems(pw, prefix + "    ", mi.shortLabel, mi.subitems,
-                        true, isCompact, dumpPss, dumpSwapPss);
+                        true, isCompact, dumpPss, dumpSwapPss, dumpPrivateDirty);
             }
         }
     }
@@ -11602,6 +11614,7 @@
         boolean isCheckinRequest;
         boolean dumpSwapPss;
         boolean dumpProto;
+        boolean mDumpPrivateDirty;
     }
 
     @NeverCompile // Avoid size overhead of debugging code.
@@ -11620,6 +11633,7 @@
         opts.isCheckinRequest = false;
         opts.dumpSwapPss = false;
         opts.dumpProto = asProto;
+        opts.mDumpPrivateDirty = false;
 
         int opti = 0;
         while (opti < args.length) {
@@ -11642,6 +11656,8 @@
                 opts.dumpSummaryOnly = true;
             } else if ("-S".equals(opt)) {
                 opts.dumpSwapPss = true;
+            } else if ("-p".equals(opt)) {
+                opts.mDumpPrivateDirty = true;
             } else if ("--unreachable".equals(opt)) {
                 opts.dumpUnreachable = true;
             } else if ("--oom".equals(opt)) {
@@ -11662,6 +11678,7 @@
                 pw.println("  -c: dump in a compact machine-parseable representation.");
                 pw.println("  -s: dump only summary of application memory usage.");
                 pw.println("  -S: dump also SwapPss.");
+                pw.println("  -p: dump also private dirty memory usage.");
                 pw.println("  --oom: only show processes organized by oom adj.");
                 pw.println("  --local: only collect details locally, don't call process.");
                 pw.println("  --package: interpret process arg as package, dumping all");
@@ -11780,14 +11797,18 @@
                 EmptyArray.LONG;
         long[] dalvikSubitemRss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] :
                 EmptyArray.LONG;
+        long[] dalvikSubitemPrivateDirty = opts.dumpDalvik
+                ? new long[Debug.MemoryInfo.NUM_DVK_STATS] : EmptyArray.LONG;
         long[] miscPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
         long[] miscSwapPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
         long[] miscRss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
+        long[] miscPrivateDirty = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
         long[] memtrackTmp = new long[4];
 
         long oomPss[] = new long[DUMP_MEM_OOM_LABEL.length];
         long oomSwapPss[] = new long[DUMP_MEM_OOM_LABEL.length];
         long[] oomRss = new long[DUMP_MEM_OOM_LABEL.length];
+        long[] oomPrivateDirty = new long[DUMP_MEM_OOM_LABEL.length];
         ArrayList<MemItem>[] oomProcs = (ArrayList<MemItem>[])
                 new ArrayList[DUMP_MEM_OOM_LABEL.length];
 
@@ -11883,6 +11904,7 @@
                 final long myTotalUss = mi.getTotalUss();
                 final long myTotalRss = mi.getTotalRss();
                 final long myTotalSwapPss = mi.getTotalSwappedOutPss();
+                final long myTotalPrivateDirty = mi.getTotalPrivateDirty();
 
                 synchronized (mProcLock) {
                     if (r.getThread() != null && oomAdj == r.mState.getSetAdjWithServices()) {
@@ -11896,29 +11918,36 @@
                     ss[INDEX_TOTAL_PSS] += myTotalPss;
                     ss[INDEX_TOTAL_SWAP_PSS] += myTotalSwapPss;
                     ss[INDEX_TOTAL_RSS] += myTotalRss;
+                    ss[INDEX_TOTAL_PRIVATE_DIRTY] += myTotalPrivateDirty;
                     ss[INDEX_TOTAL_MEMTRACK_GRAPHICS] += memtrackGraphics;
                     ss[INDEX_TOTAL_MEMTRACK_GL] += memtrackGl;
                     MemItem pssItem = new MemItem(r.processName + " (pid " + pid +
                             (hasActivities ? " / activities)" : ")"), r.processName, myTotalPss,
-                            myTotalSwapPss, myTotalRss, pid, r.userId, hasActivities);
+                            myTotalSwapPss, myTotalRss, myTotalPrivateDirty,
+                            pid, r.userId, hasActivities);
                     procMems.add(pssItem);
                     procMemsMap.put(pid, pssItem);
 
                     ss[INDEX_NATIVE_PSS] += mi.nativePss;
                     ss[INDEX_NATIVE_SWAP_PSS] += mi.nativeSwappedOutPss;
                     ss[INDEX_NATIVE_RSS] += mi.nativeRss;
+                    ss[INDEX_NATIVE_PRIVATE_DIRTY] += mi.nativePrivateDirty;
                     ss[INDEX_DALVIK_PSS] += mi.dalvikPss;
                     ss[INDEX_DALVIK_SWAP_PSS] += mi.dalvikSwappedOutPss;
                     ss[INDEX_DALVIK_RSS] += mi.dalvikRss;
+                    ss[INDEX_DALVIK_PRIVATE_DIRTY] += mi.dalvikPrivateDirty;
                     for (int j=0; j<dalvikSubitemPss.length; j++) {
                         dalvikSubitemPss[j] += mi.getOtherPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
                         dalvikSubitemSwapPss[j] +=
                                 mi.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
+                        dalvikSubitemPrivateDirty[j] +=
+                                mi.getOtherPrivateDirty(Debug.MemoryInfo.NUM_OTHER_STATS + j);
                         dalvikSubitemRss[j] += mi.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
                     }
                     ss[INDEX_OTHER_PSS] += mi.otherPss;
                     ss[INDEX_OTHER_RSS] += mi.otherRss;
                     ss[INDEX_OTHER_SWAP_PSS] += mi.otherSwappedOutPss;
+                    ss[INDEX_OTHER_PRIVATE_DIRTY] += mi.otherPrivateDirty;
                     for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
                         long mem = mi.getOtherPss(j);
                         miscPss[j] += mem;
@@ -11926,6 +11955,9 @@
                         mem = mi.getOtherSwappedOutPss(j);
                         miscSwapPss[j] += mem;
                         ss[INDEX_OTHER_SWAP_PSS] -= mem;
+                        mem = mi.getOtherPrivateDirty(j);
+                        miscPrivateDirty[j] += mem;
+                        ss[INDEX_OTHER_PRIVATE_DIRTY] -= mem;
                         mem = mi.getOtherRss(j);
                         miscRss[j] += mem;
                         ss[INDEX_OTHER_RSS] -= mem;
@@ -11942,6 +11974,7 @@
                                         && oomAdj < DUMP_MEM_OOM_ADJ[oomIndex + 1])) {
                             oomPss[oomIndex] += myTotalPss;
                             oomSwapPss[oomIndex] += myTotalSwapPss;
+                            oomPrivateDirty[oomIndex] += myTotalPrivateDirty;
                             if (oomProcs[oomIndex] == null) {
                                 oomProcs[oomIndex] = new ArrayList<MemItem>();
                             }
@@ -11988,6 +12021,7 @@
                     final long myTotalPss = info.getTotalPss();
                     final long myTotalSwapPss = info.getTotalSwappedOutPss();
                     final long myTotalRss = info.getTotalRss();
+                    final long myTotalPrivateDirty = info.getTotalPrivateDirty();
                     ss[INDEX_TOTAL_PSS] += myTotalPss;
                     ss[INDEX_TOTAL_SWAP_PSS] += myTotalSwapPss;
                     ss[INDEX_TOTAL_RSS] += myTotalRss;
@@ -11997,15 +12031,17 @@
 
                     MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")",
                             st.name, myTotalPss, info.getSummaryTotalSwapPss(), myTotalRss,
-                            st.pid, UserHandle.getUserId(st.uid), false);
+                            myTotalPrivateDirty, st.pid, UserHandle.getUserId(st.uid), false);
                     procMems.add(pssItem);
 
                     ss[INDEX_NATIVE_PSS] += info.nativePss;
                     ss[INDEX_NATIVE_SWAP_PSS] += info.nativeSwappedOutPss;
                     ss[INDEX_NATIVE_RSS] += info.nativeRss;
+                    ss[INDEX_NATIVE_PRIVATE_DIRTY] += info.nativePrivateDirty;
                     ss[INDEX_DALVIK_PSS] += info.dalvikPss;
                     ss[INDEX_DALVIK_SWAP_PSS] += info.dalvikSwappedOutPss;
                     ss[INDEX_DALVIK_RSS] += info.dalvikRss;
+                    ss[INDEX_DALVIK_PRIVATE_DIRTY] += info.dalvikPrivateDirty;
                     for (int j = 0; j < dalvikSubitemPss.length; j++) {
                         dalvikSubitemPss[j] += info.getOtherPss(
                                 Debug.MemoryInfo.NUM_OTHER_STATS + j);
@@ -12013,10 +12049,13 @@
                                 info.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
                         dalvikSubitemRss[j] += info.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS
                                 + j);
+                        dalvikSubitemPrivateDirty[j] +=
+                                info.getOtherPrivateDirty(Debug.MemoryInfo.NUM_OTHER_STATS + j);
                     }
                     ss[INDEX_OTHER_PSS] += info.otherPss;
                     ss[INDEX_OTHER_SWAP_PSS] += info.otherSwappedOutPss;
                     ss[INDEX_OTHER_RSS] += info.otherRss;
+                    ss[INDEX_OTHER_PRIVATE_DIRTY] += info.otherPrivateDirty;
                     for (int j = 0; j < Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
                         long mem = info.getOtherPss(j);
                         miscPss[j] += mem;
@@ -12027,6 +12066,9 @@
                         mem = info.getOtherRss(j);
                         miscRss[j] += mem;
                         ss[INDEX_OTHER_RSS] -= mem;
+                        mem = info.getOtherPrivateDirty(j);
+                        miscPrivateDirty[j] += mem;
+                        ss[INDEX_OTHER_PRIVATE_DIRTY] -= mem;
                     }
                     oomPss[0] += myTotalPss;
                     oomSwapPss[0] += myTotalSwapPss;
@@ -12035,21 +12077,26 @@
                     }
                     oomProcs[0].add(pssItem);
                     oomRss[0] += myTotalRss;
+                    oomPrivateDirty[0] += myTotalPrivateDirty;
                 }
             });
 
             ArrayList<MemItem> catMems = new ArrayList<MemItem>();
 
             catMems.add(new MemItem("Native", "Native",
-                    ss[INDEX_NATIVE_PSS], ss[INDEX_NATIVE_SWAP_PSS], ss[INDEX_NATIVE_RSS], -1));
+                    ss[INDEX_NATIVE_PSS], ss[INDEX_NATIVE_SWAP_PSS],
+                    ss[INDEX_NATIVE_RSS], ss[INDEX_NATIVE_PRIVATE_DIRTY], -1));
             final int dalvikId = -2;
             catMems.add(new MemItem("Dalvik", "Dalvik", ss[INDEX_DALVIK_PSS],
-                    ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS], dalvikId));
+                    ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS],
+                    ss[INDEX_DALVIK_PRIVATE_DIRTY], dalvikId));
             catMems.add(new MemItem("Unknown", "Unknown", ss[INDEX_OTHER_PSS],
-                    ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS], -3));
+                    ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS],
+                    ss[INDEX_OTHER_PRIVATE_DIRTY], -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], miscRss[j],  j));
+                catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], miscRss[j],
+                        miscPrivateDirty[j], j));
             }
             if (dalvikSubitemPss.length > 0) {
                 // Add dalvik subitems.
@@ -12075,7 +12122,8 @@
                         final String name = Debug.MemoryInfo.getOtherLabel(
                                 Debug.MemoryInfo.NUM_OTHER_STATS + j);
                         memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
-                                dalvikSubitemSwapPss[j], dalvikSubitemRss[j], j));
+                                dalvikSubitemSwapPss[j], dalvikSubitemRss[j],
+                                dalvikSubitemPrivateDirty[j], j));
                     }
                 }
             }
@@ -12086,7 +12134,7 @@
                     String label = opts.isCompact ? DUMP_MEM_OOM_COMPACT_LABEL[j]
                             : DUMP_MEM_OOM_LABEL[j];
                     MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j],
-                            DUMP_MEM_OOM_ADJ[j]);
+                            oomPrivateDirty[j], DUMP_MEM_OOM_ADJ[j]);
                     item.subitems = oomProcs[j];
                     oomMems.add(item);
                 }
@@ -12097,33 +12145,34 @@
             if (!brief && !opts.oomOnly && !opts.isCompact) {
                 pw.println();
                 pw.println("Total RSS by process:");
-                dumpMemItems(pw, "  ", "proc", procMems, true, opts.isCompact, false, false);
+                dumpMemItems(pw, "  ", "proc", procMems, true, opts.isCompact, false, false, false);
                 pw.println();
             }
             if (!opts.isCompact) {
                 pw.println("Total RSS by OOM adjustment:");
             }
-            dumpMemItems(pw, "  ", "oom", oomMems, false, opts.isCompact, false, false);
+            dumpMemItems(pw, "  ", "oom", oomMems, false, opts.isCompact, false, false, false);
             if (!brief && !opts.oomOnly) {
                 PrintWriter out = categoryPw != null ? categoryPw : pw;
                 if (!opts.isCompact) {
                     out.println();
                     out.println("Total RSS by category:");
                 }
-                dumpMemItems(out, "  ", "cat", catMems, true, opts.isCompact, false, false);
+                dumpMemItems(out, "  ", "cat", catMems, true, opts.isCompact, false, false, false);
             }
             opts.dumpSwapPss = opts.dumpSwapPss && hasSwapPss && ss[INDEX_TOTAL_SWAP_PSS] != 0;
             if (!brief && !opts.oomOnly && !opts.isCompact) {
                 pw.println();
                 pw.println("Total PSS by process:");
                 dumpMemItems(pw, "  ", "proc", procMems, true, opts.isCompact, true,
-                        opts.dumpSwapPss);
+                        opts.dumpSwapPss, opts.mDumpPrivateDirty);
                 pw.println();
             }
             if (!opts.isCompact) {
                 pw.println("Total PSS by OOM adjustment:");
             }
-            dumpMemItems(pw, "  ", "oom", oomMems, false, opts.isCompact, true, opts.dumpSwapPss);
+            dumpMemItems(pw, "  ", "oom", oomMems, false, opts.isCompact, true, opts.dumpSwapPss,
+                    opts.mDumpPrivateDirty);
             if (!brief && !opts.oomOnly) {
                 PrintWriter out = categoryPw != null ? categoryPw : pw;
                 if (!opts.isCompact) {
@@ -12131,7 +12180,7 @@
                     out.println("Total PSS by category:");
                 }
                 dumpMemItems(out, "  ", "cat", catMems, true, opts.isCompact, true,
-                        opts.dumpSwapPss);
+                        opts.dumpSwapPss, opts.mDumpPrivateDirty);
             }
             if (!opts.isCompact) {
                 pw.println();
@@ -12533,7 +12582,7 @@
                 ss[INDEX_TOTAL_RSS] += myTotalRss;
                 MemItem pssItem = new MemItem(r.processName + " (pid " + pid +
                         (hasActivities ? " / activities)" : ")"), r.processName, myTotalPss,
-                        myTotalSwapPss, myTotalRss, pid, r.userId, hasActivities);
+                        myTotalSwapPss, myTotalRss, 0, pid, r.userId, hasActivities);
                 procMems.add(pssItem);
                 procMemsMap.put(pid, pssItem);
 
@@ -12620,7 +12669,7 @@
                     ss[INDEX_TOTAL_NATIVE_PSS] += myTotalPss;
 
                     MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")",
-                            st.name, myTotalPss, info.getSummaryTotalSwapPss(), myTotalRss,
+                            st.name, myTotalPss, info.getSummaryTotalSwapPss(), myTotalRss, 0,
                             st.pid, UserHandle.getUserId(st.uid), false);
                     procMems.add(pssItem);
 
@@ -12665,15 +12714,16 @@
             ArrayList<MemItem> catMems = new ArrayList<MemItem>();
 
             catMems.add(new MemItem("Native", "Native", ss[INDEX_NATIVE_PSS],
-                    ss[INDEX_NATIVE_SWAP_PSS], ss[INDEX_NATIVE_RSS], -1));
+                    ss[INDEX_NATIVE_SWAP_PSS], ss[INDEX_NATIVE_RSS], 0, -1));
             final int dalvikId = -2;
             catMems.add(new MemItem("Dalvik", "Dalvik", ss[INDEX_DALVIK_PSS],
-                    ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS], dalvikId));
+                    ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS], 0, dalvikId));
             catMems.add(new MemItem("Unknown", "Unknown", ss[INDEX_OTHER_PSS],
-                    ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS], -3));
+                    ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS], 0, -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], miscRss[j], j));
+                catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j],
+                        miscRss[j], 0, j));
             }
             if (dalvikSubitemPss.length > 0) {
                 // Add dalvik subitems.
@@ -12699,7 +12749,7 @@
                         final String name = Debug.MemoryInfo.getOtherLabel(
                                 Debug.MemoryInfo.NUM_OTHER_STATS + j);
                         memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
-                                dalvikSubitemSwapPss[j], dalvikSubitemRss[j], j));
+                                dalvikSubitemSwapPss[j], dalvikSubitemRss[j], 0, j));
                     }
                 }
             }
@@ -12709,7 +12759,7 @@
                 if (oomPss[j] != 0) {
                     String label = opts.isCompact ? DUMP_MEM_OOM_COMPACT_LABEL[j]
                             : DUMP_MEM_OOM_LABEL[j];
-                    MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j],
+                    MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j], 0,
                             DUMP_MEM_OOM_ADJ[j]);
                     item.subitems = oomProcs[j];
                     oomMems.add(item);