summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/BatteryStats.java22
-rw-r--r--core/proto/android/os/batterystats.proto17
2 files changed, 39 insertions, 0 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 1e847c595df0..781fada131c6 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -7051,6 +7051,28 @@ public abstract class BatteryStats implements Parcelable {
}
}
}
+
+ for (int procState = 0; procState < Uid.NUM_PROCESS_STATE; ++procState) {
+ final long[] timesMs = u.getCpuFreqTimes(which, procState);
+ if (timesMs != null && timesMs.length == cpuFreqs.length) {
+ long[] screenOffTimesMs = u.getScreenOffCpuFreqTimes(which, procState);
+ if (screenOffTimesMs == null) {
+ screenOffTimesMs = new long[timesMs.length];
+ }
+ final long procToken = proto.start(UidProto.Cpu.BY_PROCESS_STATE);
+ proto.write(UidProto.Cpu.ByProcessState.PROCESS_STATE, procState);
+ for (int ic = 0; ic < timesMs.length; ++ic) {
+ long cToken = proto.start(UidProto.Cpu.ByProcessState.BY_FREQUENCY);
+ proto.write(UidProto.Cpu.ByFrequency.FREQUENCY_INDEX, ic + 1);
+ proto.write(UidProto.Cpu.ByFrequency.TOTAL_DURATION_MS,
+ timesMs[ic]);
+ proto.write(UidProto.Cpu.ByFrequency.SCREEN_OFF_DURATION_MS,
+ screenOffTimesMs[ic]);
+ proto.end(cToken);
+ }
+ proto.end(procToken);
+ }
+ }
proto.end(cpuToken);
// Flashlight (FLASHLIGHT_DATA)
diff --git a/core/proto/android/os/batterystats.proto b/core/proto/android/os/batterystats.proto
index 0fa428e9c114..da21258bc58a 100644
--- a/core/proto/android/os/batterystats.proto
+++ b/core/proto/android/os/batterystats.proto
@@ -537,7 +537,24 @@ message UidProto {
// Screen-off CPU time in milliseconds.
optional int64 screen_off_duration_ms = 3;
}
+ // CPU times accumulated across all process states.
repeated ByFrequency by_frequency = 3;
+
+ enum ProcessState {
+ TOP = 0;
+ FOREGROUND_SERVICE = 1;
+ FOREGROUND = 2;
+ BACKGROUND = 3;
+ TOP_SLEEPING = 4;
+ HEAVY_WEIGHT = 5;
+ CACHED = 6;
+ }
+ // CPU times at different process states.
+ message ByProcessState {
+ optional ProcessState process_state = 1;
+ repeated ByFrequency by_frequency = 2;
+ }
+ repeated ByProcessState by_process_state = 4;
}
optional Cpu cpu = 7;