• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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  */
16 
17 package com.android.internal.os;
18 
19 import static org.mockito.ArgumentMatchers.any;
20 import static org.mockito.Mockito.mock;
21 import static org.mockito.Mockito.when;
22 
23 import android.annotation.NonNull;
24 import android.app.usage.NetworkStatsManager;
25 import android.net.NetworkStats;
26 import android.os.Handler;
27 import android.os.Looper;
28 
29 import com.android.internal.annotations.GuardedBy;
30 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader;
31 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader;
32 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
33 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader;
34 import com.android.internal.power.MeasuredEnergyStats;
35 
36 import java.io.File;
37 import java.util.ArrayList;
38 import java.util.Arrays;
39 import java.util.Queue;
40 import java.util.concurrent.Future;
41 
42 /**
43  * Mocks a BatteryStatsImpl object.
44  */
45 public class MockBatteryStatsImpl extends BatteryStatsImpl {
46     public boolean mForceOnBattery;
47     // The mNetworkStats will be used for both wifi and mobile categories
48     private NetworkStats mNetworkStats;
49     private DummyExternalStatsSync mExternalStatsSync = new DummyExternalStatsSync();
50 
MockBatteryStatsImpl()51     MockBatteryStatsImpl() {
52         this(new MockClock());
53     }
54 
MockBatteryStatsImpl(Clock clock)55     MockBatteryStatsImpl(Clock clock) {
56         this(clock, null);
57     }
58 
MockBatteryStatsImpl(Clock clock, File historyDirectory)59     MockBatteryStatsImpl(Clock clock, File historyDirectory) {
60         super(clock, historyDirectory);
61         initTimersAndCounters();
62 
63         setExternalStatsSyncLocked(mExternalStatsSync);
64         informThatAllExternalStatsAreFlushed();
65 
66         // A no-op handler.
67         mHandler = new Handler(Looper.getMainLooper()) {
68         };
69 
70         mCpuUidFreqTimeReader = mock(KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader.class);
71         when(mCpuUidFreqTimeReader.readFreqs(any())).thenReturn(new long[]{100, 200});
72     }
73 
initMeasuredEnergyStats(String[] customBucketNames)74     public void initMeasuredEnergyStats(String[] customBucketNames) {
75         final boolean[] supportedStandardBuckets =
76                 new boolean[MeasuredEnergyStats.NUMBER_STANDARD_POWER_BUCKETS];
77         Arrays.fill(supportedStandardBuckets, true);
78         mMeasuredEnergyStatsConfig = new MeasuredEnergyStats.Config(supportedStandardBuckets,
79                 customBucketNames, new int[0], new String[]{""});
80         mGlobalMeasuredEnergyStats = new MeasuredEnergyStats(mMeasuredEnergyStatsConfig);
81     }
82 
getOnBatteryTimeBase()83     public TimeBase getOnBatteryTimeBase() {
84         return mOnBatteryTimeBase;
85     }
86 
getOnBatteryScreenOffTimeBase()87     public TimeBase getOnBatteryScreenOffTimeBase() {
88         return mOnBatteryScreenOffTimeBase;
89     }
90 
getScreenState()91     public int getScreenState() {
92         return mScreenState;
93     }
94 
getPendingRemovedUids()95     public Queue<UidToRemove> getPendingRemovedUids() {
96         return mPendingRemovedUids;
97     }
98 
isOnBattery()99     public boolean isOnBattery() {
100         return mForceOnBattery ? true : super.isOnBattery();
101     }
102 
forceRecordAllHistory()103     public void forceRecordAllHistory() {
104         mHaveBatteryLevel = true;
105         mRecordingHistory = true;
106         mRecordAllHistory = true;
107     }
108 
getOnBatteryBackgroundTimeBase(int uid)109     public TimeBase getOnBatteryBackgroundTimeBase(int uid) {
110         return getUidStatsLocked(uid).mOnBatteryBackgroundTimeBase;
111     }
112 
getOnBatteryScreenOffBackgroundTimeBase(int uid)113     public TimeBase getOnBatteryScreenOffBackgroundTimeBase(int uid) {
114         return getUidStatsLocked(uid).mOnBatteryScreenOffBackgroundTimeBase;
115     }
116 
getMobileRadioPowerStateUpdateRateLimit()117     public long getMobileRadioPowerStateUpdateRateLimit() {
118         return MOBILE_RADIO_POWER_STATE_UPDATE_FREQ_MS;
119     }
120 
setNetworkStats(NetworkStats networkStats)121     public MockBatteryStatsImpl setNetworkStats(NetworkStats networkStats) {
122         mNetworkStats = networkStats;
123         return this;
124     }
125 
126     @Override
readMobileNetworkStatsLocked( @onNull NetworkStatsManager networkStatsManager)127     protected NetworkStats readMobileNetworkStatsLocked(
128             @NonNull NetworkStatsManager networkStatsManager) {
129         return mNetworkStats;
130     }
131 
132     @Override
readWifiNetworkStatsLocked( @onNull NetworkStatsManager networkStatsManager)133     protected NetworkStats readWifiNetworkStatsLocked(
134             @NonNull NetworkStatsManager networkStatsManager) {
135         return mNetworkStats;
136     }
setPowerProfile(PowerProfile powerProfile)137     public MockBatteryStatsImpl setPowerProfile(PowerProfile powerProfile) {
138         mPowerProfile = powerProfile;
139         return this;
140     }
141 
setKernelCpuUidFreqTimeReader(KernelCpuUidFreqTimeReader reader)142     public MockBatteryStatsImpl setKernelCpuUidFreqTimeReader(KernelCpuUidFreqTimeReader reader) {
143         mCpuUidFreqTimeReader = reader;
144         return this;
145     }
146 
setKernelCpuUidActiveTimeReader( KernelCpuUidActiveTimeReader reader)147     public MockBatteryStatsImpl setKernelCpuUidActiveTimeReader(
148             KernelCpuUidActiveTimeReader reader) {
149         mCpuUidActiveTimeReader = reader;
150         return this;
151     }
152 
setKernelCpuUidClusterTimeReader( KernelCpuUidClusterTimeReader reader)153     public MockBatteryStatsImpl setKernelCpuUidClusterTimeReader(
154             KernelCpuUidClusterTimeReader reader) {
155         mCpuUidClusterTimeReader = reader;
156         return this;
157     }
158 
setKernelCpuUidUserSysTimeReader( KernelCpuUidUserSysTimeReader reader)159     public MockBatteryStatsImpl setKernelCpuUidUserSysTimeReader(
160             KernelCpuUidUserSysTimeReader reader) {
161         mCpuUidUserSysTimeReader = reader;
162         return this;
163     }
164 
setKernelSingleUidTimeReader(KernelSingleUidTimeReader reader)165     public MockBatteryStatsImpl setKernelSingleUidTimeReader(KernelSingleUidTimeReader reader) {
166         mKernelSingleUidTimeReader = reader;
167         return this;
168     }
169 
setKernelCpuSpeedReaders(KernelCpuSpeedReader[] readers)170     public MockBatteryStatsImpl setKernelCpuSpeedReaders(KernelCpuSpeedReader[] readers) {
171         mKernelCpuSpeedReaders = readers;
172         return this;
173     }
174 
setSystemServerCpuThreadReader( SystemServerCpuThreadReader systemServerCpuThreadReader)175     public MockBatteryStatsImpl setSystemServerCpuThreadReader(
176             SystemServerCpuThreadReader systemServerCpuThreadReader) {
177         mSystemServerCpuThreadReader = systemServerCpuThreadReader;
178         return this;
179     }
180 
setUserInfoProvider(UserInfoProvider provider)181     public MockBatteryStatsImpl setUserInfoProvider(UserInfoProvider provider) {
182         mUserInfoProvider = provider;
183         return this;
184     }
185 
setPartialTimers(ArrayList<StopwatchTimer> partialTimers)186     public MockBatteryStatsImpl setPartialTimers(ArrayList<StopwatchTimer> partialTimers) {
187         mPartialTimers = partialTimers;
188         return this;
189     }
190 
setLastPartialTimers(ArrayList<StopwatchTimer> lastPartialTimers)191     public MockBatteryStatsImpl setLastPartialTimers(ArrayList<StopwatchTimer> lastPartialTimers) {
192         mLastPartialTimers = lastPartialTimers;
193         return this;
194     }
195 
setOnBatteryInternal(boolean onBatteryInternal)196     public MockBatteryStatsImpl setOnBatteryInternal(boolean onBatteryInternal) {
197         mOnBatteryInternal = onBatteryInternal;
198         return this;
199     }
200 
201     @GuardedBy("this")
setMaxHistoryFiles(int maxHistoryFiles)202     public MockBatteryStatsImpl setMaxHistoryFiles(int maxHistoryFiles) {
203         mConstants.MAX_HISTORY_FILES = maxHistoryFiles;
204         return this;
205     }
206 
207     @GuardedBy("this")
setMaxHistoryBuffer(int maxHistoryBuffer)208     public MockBatteryStatsImpl setMaxHistoryBuffer(int maxHistoryBuffer) {
209         mConstants.MAX_HISTORY_BUFFER = maxHistoryBuffer;
210         return this;
211     }
212 
getAndClearExternalStatsSyncFlags()213     public int getAndClearExternalStatsSyncFlags() {
214         final int flags = mExternalStatsSync.flags;
215         mExternalStatsSync.flags = 0;
216         return flags;
217     }
218 
setDummyExternalStatsSync(DummyExternalStatsSync externalStatsSync)219     public void setDummyExternalStatsSync(DummyExternalStatsSync externalStatsSync) {
220         mExternalStatsSync = externalStatsSync;
221         setExternalStatsSyncLocked(mExternalStatsSync);
222     }
223 
224     public static class DummyExternalStatsSync implements ExternalStatsSync {
225         public int flags = 0;
226 
227         @Override
scheduleSync(String reason, int flags)228         public Future<?> scheduleSync(String reason, int flags) {
229             return null;
230         }
231 
232         @Override
scheduleCleanupDueToRemovedUser(int userId)233         public Future<?> scheduleCleanupDueToRemovedUser(int userId) {
234             return null;
235         }
236 
237         @Override
scheduleCpuSyncDueToRemovedUid(int uid)238         public Future<?> scheduleCpuSyncDueToRemovedUid(int uid) {
239             return null;
240         }
241 
242         @Override
scheduleCpuSyncDueToSettingChange()243         public Future<?> scheduleCpuSyncDueToSettingChange() {
244             return null;
245         }
246 
247         @Override
scheduleSyncDueToScreenStateChange(int flag, boolean onBattery, boolean onBatteryScreenOff, int screenState, int[] perDisplayScreenStates)248         public Future<?> scheduleSyncDueToScreenStateChange(int flag, boolean onBattery,
249                 boolean onBatteryScreenOff, int screenState, int[] perDisplayScreenStates) {
250             flags |= flag;
251             return null;
252         }
253 
254         @Override
scheduleCpuSyncDueToWakelockChange(long delayMillis)255         public Future<?> scheduleCpuSyncDueToWakelockChange(long delayMillis) {
256             return null;
257         }
258 
259         @Override
cancelCpuSyncDueToWakelockChange()260         public void cancelCpuSyncDueToWakelockChange() {
261         }
262 
263         @Override
scheduleSyncDueToBatteryLevelChange(long delayMillis)264         public Future<?> scheduleSyncDueToBatteryLevelChange(long delayMillis) {
265             return null;
266         }
267 
268         @Override
scheduleSyncDueToProcessStateChange(int flags, long delayMillis)269         public void scheduleSyncDueToProcessStateChange(int flags, long delayMillis) {
270         }
271     }
272 }
273 
274