merge in nyc-mr1-release history after reset to nyc-mr1-dev
diff --git a/libraries/aupt-lib/src/android/support/test/aupt/AuptTestCase.java b/libraries/aupt-lib/src/android/support/test/aupt/AuptTestCase.java
index d7f95b6..5ec427c 100644
--- a/libraries/aupt-lib/src/android/support/test/aupt/AuptTestCase.java
+++ b/libraries/aupt-lib/src/android/support/test/aupt/AuptTestCase.java
@@ -93,14 +93,52 @@
private final long mDalvikHeap;
private final long mNativeHeap;
private final long mPss;
+
+ // App summary metrics
+ private final long mAsJavaHeap; // Private java heap
+ private final long mAsNativeHeap; // Private native heap
+ private final long mAsCode; // Private code
+ private final long mAsStack; // Private stack
+ private final long mAsGraphics; // Private graphics
+ private final long mAsOther; // Private other
+ private final long mAsSystem; // System
+ private final long mAsOverallPss; // Overall PSS
+
private final Context mContext;
public MemHealthRecord(long timeMs, long dalvikHeap, long nativeHeap, long pss,
+ long asJavaHeap, long asNativeHeap, long asCode, long asStack,
+ long asGraphics, long asOther, long asSystem, long asOverallPss,
+ Context context) {
+ mTimeMs = timeMs;
+ mDalvikHeap = dalvikHeap;
+ mNativeHeap = nativeHeap;
+ mPss = pss;
+ mAsJavaHeap = asJavaHeap;
+ mAsNativeHeap = asNativeHeap;
+ mAsCode = asCode;
+ mAsStack = asStack;
+ mAsGraphics = asGraphics;
+ mAsOther = asOther;
+ mAsSystem = asSystem;
+ mAsOverallPss = asOverallPss;
+ mContext = context;
+ }
+
+ public MemHealthRecord(long timeMs, long dalvikHeap, long nativeHeap, long pss,
Context context) {
mTimeMs = timeMs;
mDalvikHeap = dalvikHeap;
mNativeHeap = nativeHeap;
mPss = pss;
+ mAsJavaHeap = 0;
+ mAsNativeHeap = 0;
+ mAsCode = 0;
+ mAsStack = 0;
+ mAsGraphics = 0;
+ mAsOther = 0;
+ mAsSystem = 0;
+ mAsOverallPss = 0;
mContext = context;
}
@@ -164,6 +202,170 @@
return ret;
}
+ public static List<Long> getForegroundSummaryJavaHeap(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsJavaHeap);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummaryJavaHeap(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsJavaHeap);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getForegroundSummaryNativeHeap(
+ Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsNativeHeap);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummaryNativeHeap(
+ Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsNativeHeap);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getForegroundSummaryCode(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsCode);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummaryCode(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsCode);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getForegroundSummaryStack(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsStack);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummaryStack(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsStack);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getForegroundSummaryGraphics(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsGraphics);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummaryGraphics(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsGraphics);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getForegroundSummaryOther(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsOther);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummaryOther(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsOther);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getForegroundSummarySystem(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsSystem);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummarySystem(Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsSystem);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getForegroundSummaryOverallPss(
+ Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.FOREGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsOverallPss);
+ }
+ }
+ return ret;
+ }
+
+ public static List<Long> getBackgroundSummaryOverallPss(
+ Collection<MemHealthRecord> samples) {
+ List<Long> ret = new ArrayList<>(samples.size());
+ for (MemHealthRecord sample : samples) {
+ if (Context.BACKGROUND.equals(sample.mContext)) {
+ ret.add(sample.mAsOverallPss);
+ }
+ }
+ return ret;
+ }
+
private static Long getMax(Collection<Long> samples) {
Long max = null;
for (Long sample : samples) {
@@ -346,6 +548,19 @@
List<Long> dalvikHeap = MemHealthRecord.getForegroundDalvikHeap(record.getValue());
List<Long> pss = MemHealthRecord.getForegroundPss(record.getValue());
+ List<Long> asJavaHeap = MemHealthRecord.getForegroundSummaryJavaHeap(
+ record.getValue());
+ List<Long> asNativeHeap = MemHealthRecord.getForegroundSummaryNativeHeap(
+ record.getValue());
+ List<Long> asCode = MemHealthRecord.getForegroundSummaryCode(record.getValue());
+ List<Long> asStack = MemHealthRecord.getForegroundSummaryStack(record.getValue());
+ List<Long> asGraphics = MemHealthRecord.getForegroundSummaryGraphics(
+ record.getValue());
+ List<Long> asOther = MemHealthRecord.getForegroundSummaryOther(record.getValue());
+ List<Long> asSystem = MemHealthRecord.getForegroundSummarySystem(record.getValue());
+ List<Long> asOverallPss = MemHealthRecord.getForegroundSummaryOverallPss(
+ record.getValue());
+
// nativeHeap, dalvikHeap, and pss all have the same size, just use one
if (nativeHeap.size() == 0) {
continue;
@@ -359,6 +574,19 @@
out.printf("Peak Dalvik Heap: %d\n", MemHealthRecord.getMax(dalvikHeap));
out.printf("Peak PSS: %d\n", MemHealthRecord.getMax(pss));
out.printf("Count %d\n", nativeHeap.size());
+
+ out.printf("Average Summary Java Heap: %d\n", MemHealthRecord.getAverage(
+ asJavaHeap));
+ out.printf("Average Summary Native Heap: %d\n", MemHealthRecord.getAverage(
+ asNativeHeap));
+ out.printf("Average Summary Code: %d\n", MemHealthRecord.getAverage(asCode));
+ out.printf("Average Summary Stack: %d\n", MemHealthRecord.getAverage(asStack));
+ out.printf("Average Summary Graphics: %d\n", MemHealthRecord.getAverage(
+ asGraphics));
+ out.printf("Average Summary Other: %d\n", MemHealthRecord.getAverage(asOther));
+ out.printf("Average Summary System: %d\n", MemHealthRecord.getAverage(asSystem));
+ out.printf("Average Summary Overall Pss: %d\n", MemHealthRecord.getAverage(
+ asOverallPss));
}
out.println("Background");
for (Map.Entry<String, List<MemHealthRecord>> record : mMemHealthRecords.entrySet()) {
@@ -366,6 +594,19 @@
List<Long> dalvikHeap = MemHealthRecord.getBackgroundDalvikHeap(record.getValue());
List<Long> pss = MemHealthRecord.getBackgroundPss(record.getValue());
+ List<Long> asJavaHeap = MemHealthRecord.getBackgroundSummaryJavaHeap(
+ record.getValue());
+ List<Long> asNativeHeap = MemHealthRecord.getBackgroundSummaryNativeHeap(
+ record.getValue());
+ List<Long> asCode = MemHealthRecord.getBackgroundSummaryCode(record.getValue());
+ List<Long> asStack = MemHealthRecord.getBackgroundSummaryStack(record.getValue());
+ List<Long> asGraphics = MemHealthRecord.getBackgroundSummaryGraphics(
+ record.getValue());
+ List<Long> asOther = MemHealthRecord.getBackgroundSummaryOther(record.getValue());
+ List<Long> asSystem = MemHealthRecord.getBackgroundSummarySystem(record.getValue());
+ List<Long> asOverallPss = MemHealthRecord.getBackgroundSummaryOverallPss(
+ record.getValue());
+
// nativeHeap, dalvikHeap, and pss all have the same size, just use one
if (nativeHeap.size() == 0) {
continue;
@@ -379,6 +620,19 @@
out.printf("Peak Dalvik Heap: %d\n", MemHealthRecord.getMax(dalvikHeap));
out.printf("Peak PSS: %d\n", MemHealthRecord.getMax(pss));
out.printf("Count %d\n", nativeHeap.size());
+
+ out.printf("Average Summary Java Heap: %d\n", MemHealthRecord.getAverage(
+ asJavaHeap));
+ out.printf("Average Summary Native Heap: %d\n", MemHealthRecord.getAverage(
+ asNativeHeap));
+ out.printf("Average Summary Code: %d\n", MemHealthRecord.getAverage(asCode));
+ out.printf("Average Summary Stack: %d\n", MemHealthRecord.getAverage(asStack));
+ out.printf("Average Summary Graphics: %d\n", MemHealthRecord.getAverage(
+ asGraphics));
+ out.printf("Average Summary Other: %d\n", MemHealthRecord.getAverage(asOther));
+ out.printf("Average Summary System: %d\n", MemHealthRecord.getAverage(asSystem));
+ out.printf("Average Summary Overall Pss: %d\n", MemHealthRecord.getAverage(
+ asOverallPss));
}
out.close();
} catch (IOException e) {
@@ -421,6 +675,15 @@
int dalvikHeap = parseMeminfoLine(meminfo, "Dalvik Heap\\s+\\d+\\s+(\\d+)");
int pss = parseMeminfoLine(meminfo, "TOTAL\\s+(\\d+)");
+ int asJavaHeap = parseMeminfoLine(meminfo, "Java Heap:\\s+(\\d+)");
+ int asNativeHeap = parseMeminfoLine(meminfo, "Native Heap:\\s+(\\d+)");
+ int asCode = parseMeminfoLine(meminfo, "Code:\\s+(\\d+)");
+ int asStack = parseMeminfoLine(meminfo, "Stack:\\s+(\\d+)");
+ int asGraphics = parseMeminfoLine(meminfo, "Graphics:\\s+(\\d+)");
+ int asOther = parseMeminfoLine(meminfo, "Private Other:\\s+(\\d+)");
+ int asSystem = parseMeminfoLine(meminfo, "System:\\s+(\\d+)");
+ int asOverallPss = parseMeminfoLine(meminfo, "TOTAL:\\s+(\\d+)");
+
if (nativeHeap < 0 || dalvikHeap < 0 || pss < 0) {
return;
}
@@ -430,7 +693,9 @@
mMemHealthRecords.put(proc, new ArrayList<MemHealthRecord>());
}
mMemHealthRecords.get(proc).add(
- new MemHealthRecord(timeMs, dalvikHeap, nativeHeap, pss, context));
+ new MemHealthRecord(timeMs, dalvikHeap, nativeHeap, pss, asJavaHeap,
+ asNativeHeap, asCode, asStack, asGraphics, asOther, asSystem,
+ asOverallPss, context));
recordDumpheap(proc, pss);
} catch (IOException e) {
Log.e(TAG, "exception while memory stats", e);