diff options
Diffstat (limited to 'core/java')
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); } |
