blob: befc76e50ad55260adeb556e3fd24b42a3bb5013 [file] [log] [blame]
Bookatz50df7112017-08-04 14:53:26 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.internal.os;
17
18import android.util.ArrayMap;
19
20import java.util.Map;
21
22/**
23 * Container for Resource Power Manager states and their data.
24 * Values can be populated by the BatteryStatsService.fillLowPowerStats jni function.
25 */
26public final class RpmStats {
27 public Map<String, PowerStatePlatformSleepState> mPlatformLowPowerStats = new ArrayMap<>();
28 public Map<String, PowerStateSubsystem> mSubsystemLowPowerStats = new ArrayMap<>();
29
30 /**
31 * Finds the PowerStatePlatformSleepState with the given name (creating it if it doesn't exist),
32 * updates its timeMs and count, and returns it.
33 */
34 @SuppressWarnings("unused")
35 public PowerStatePlatformSleepState getAndUpdatePlatformState(
36 String name, long timeMs, int count) {
37
38 PowerStatePlatformSleepState e = mPlatformLowPowerStats.get(name);
39 if (e == null) {
40 e = new PowerStatePlatformSleepState();
41 mPlatformLowPowerStats.put(name, e);
42 }
43 e.mTimeMs = timeMs;
44 e.mCount = count;
45 return e;
46 }
47
48 /**
49 * Returns the PowerStateSubsystem with the given name (creating it if it doesn't exist).
50 */
51 public PowerStateSubsystem getSubsystem(String name) {
52 PowerStateSubsystem e = mSubsystemLowPowerStats.get(name);
53 if (e == null) {
54 e = new PowerStateSubsystem();
55 mSubsystemLowPowerStats.put(name, e);
56 }
57 return e;
58 }
59
60 /** Represents a subsystem state or a platform voter. */
61 public static class PowerStateElement {
62 public long mTimeMs; // totalTimeInMsecVotedForSinceBoot
63 public int mCount; // totalNumberOfTimesVotedSinceBoot
64
65 private PowerStateElement(long timeMs, int count) {
66 this.mTimeMs = timeMs;
67 this.mCount = count;
68 }
69 }
70
71 /** Represents a PowerStatePlatformSleepState, per hardware/interfaces/power/1.0/types.hal */
72 public static class PowerStatePlatformSleepState {
73 public long mTimeMs; // residencyInMsecSinceBoot
74 public int mCount; // totalTransitions
75 public Map<String, PowerStateElement> mVoters = new ArrayMap<>(); // voters for this platform-level sleep state
76
77 /**
78 * Updates (creating if necessary) the voter with the given name, with the given timeMs and
79 * count.
80 */
81 @SuppressWarnings("unused")
82 public void putVoter(String name, long timeMs, int count) {
83 PowerStateElement e = mVoters.get(name);
84 if (e == null) {
85 mVoters.put(name, new PowerStateElement(timeMs, count));
86 } else {
87 e.mTimeMs = timeMs;
88 e.mCount = count;
89 }
90 }
91 }
92
93 /** Represents a PowerStateSubsystem, per hardware/interfaces/power/1.1/types.hal */
94 public static class PowerStateSubsystem {
95 public Map<String, PowerStateElement> mStates = new ArrayMap<>(); // sleep states supported by this susbsystem
96
97 /**
98 * Updates (creating if necessary) the subsystem state with the given name, with the given
99 * timeMs and count.
100 */
101 @SuppressWarnings("unused")
102 public void putState(String name, long timeMs, int count) {
103 PowerStateElement e = mStates.get(name);
104 if (e == null) {
105 mStates.put(name, new PowerStateElement(timeMs, count));
106 } else {
107 e.mTimeMs = timeMs;
108 e.mCount = count;
109 }
110 }
111 }
112}