summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/util/proto/ProtoUtils.java12
-rw-r--r--core/java/com/android/internal/app/procstats/DumpUtils.java2
-rw-r--r--core/java/com/android/internal/app/procstats/ProcessState.java18
3 files changed, 23 insertions, 9 deletions
diff --git a/core/java/android/util/proto/ProtoUtils.java b/core/java/android/util/proto/ProtoUtils.java
index a71561b7614b..8464d2d808d6 100644
--- a/core/java/android/util/proto/ProtoUtils.java
+++ b/core/java/android/util/proto/ProtoUtils.java
@@ -32,15 +32,25 @@ public class ProtoUtils {
* Dump AggStats to ProtoOutputStream
*/
public static void toAggStatsProto(ProtoOutputStream proto, long fieldId,
- long min, long average, long max) {
+ long min, long average, long max, int meanKb, int maxKb) {
final long aggStatsToken = proto.start(fieldId);
proto.write(AggStats.MIN, min);
proto.write(AggStats.AVERAGE, average);
proto.write(AggStats.MAX, max);
+ proto.write(AggStats.MEAN_KB, meanKb);
+ proto.write(AggStats.MAX_KB, maxKb);
proto.end(aggStatsToken);
}
/**
+ * Dump AggStats to ProtoOutputStream
+ */
+ public static void toAggStatsProto(ProtoOutputStream proto, long fieldId,
+ long min, long average, long max) {
+ toAggStatsProto(proto, fieldId, min, average, max, 0, 0);
+ }
+
+ /**
* Dump Duration to ProtoOutputStream
*/
public static void toDuration(ProtoOutputStream proto, long fieldId, long startMs, long endMs) {
diff --git a/core/java/com/android/internal/app/procstats/DumpUtils.java b/core/java/com/android/internal/app/procstats/DumpUtils.java
index 9bdbdc70d74d..b476a17fa9b1 100644
--- a/core/java/com/android/internal/app/procstats/DumpUtils.java
+++ b/core/java/com/android/internal/app/procstats/DumpUtils.java
@@ -550,7 +550,7 @@ public final class DumpUtils {
// screen state is in lowest 0xf bits, process state is in next 0xf bits up
try {
- proto.write(stateId, STATE_PROTO_ENUMS[state >> 0xf]);
+ proto.write(stateId, state >> 0xf);
} catch (IndexOutOfBoundsException e) {
proto.write(stateId, ProcessStatsEnums.PROCESS_STATE_UNKNOWN);
}
diff --git a/core/java/com/android/internal/app/procstats/ProcessState.java b/core/java/com/android/internal/app/procstats/ProcessState.java
index 79ff5948f32b..fe4138584fa7 100644
--- a/core/java/com/android/internal/app/procstats/ProcessState.java
+++ b/core/java/com/android/internal/app/procstats/ProcessState.java
@@ -1459,16 +1459,16 @@ public final class ProcessState {
for (int i = 0; i < mPssTable.getKeyCount(); i++) {
final int key = mPssTable.getKeyAt(i);
final int type = SparseMappingTable.getIdFromKey(key);
- if (durationByState.indexOfKey(type) < 0) {
+ final int aggregatedType = DumpUtils.aggregateCurrentProcessState(type);
+ if (durationByState.indexOfKey(aggregatedType) < 0) {
// state without duration should not have stats!
continue;
}
- final int aggregatedType = DumpUtils.aggregateCurrentProcessState(type);
long[] rssMeanAndMax = mPssTable.getRssMeanAndMax(key);
// compute mean * duration, then store sum of that in meanRssByState
- long meanTimesDuration = rssMeanAndMax[0] * mDurations.getValue(key);
+ long meanTimesDuration = rssMeanAndMax[0] * mDurations.getValueForId((byte) type);
if (meanRssByState.indexOfKey(aggregatedType) >= 0) {
meanRssByState.put(aggregatedType,
meanTimesDuration + meanRssByState.get(aggregatedType));
@@ -1492,8 +1492,10 @@ public final class ProcessState {
// these data structures should be consistent
continue;
}
+ final long duration = durationByState.get(aggregatedKey);
meanRssByState.put(aggregatedKey,
- meanRssByState.get(aggregatedKey) / durationByState.get(aggregatedKey));
+ duration > 0 ? (meanRssByState.get(aggregatedKey) / duration)
+ : meanRssByState.get(aggregatedKey));
}
// build the output
@@ -1508,14 +1510,16 @@ public final class ProcessState {
DumpUtils.printAggregatedProcStateTagProto(proto,
ProcessStatsStateProto.SCREEN_STATE,
- ProcessStatsStateProto.PROCESS_STATE,
+ ProcessStatsStateProto.PROCESS_STATE_AGGREGATED,
aggregatedKey);
proto.write(ProcessStatsStateProto.DURATION_MS, durationByState.get(aggregatedKey));
ProtoUtils.toAggStatsProto(proto, ProcessStatsStateProto.RSS,
0, /* do not output a minimum value */
- meanRssByState.get(aggregatedKey),
- maxRssByState.get(aggregatedKey));
+ 0, /* do not output an average value */
+ 0, /* do not output a max value */
+ (int) meanRssByState.get(aggregatedKey),
+ (int) maxRssByState.get(aggregatedKey));
proto.end(stateToken);
}