diff options
| -rw-r--r-- | core/java/android/os/BatteryStats.java | 22 | ||||
| -rw-r--r-- | core/proto/android/os/batterystats.proto | 17 |
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; |