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 android.net.NetworkStats; 20 import android.os.Handler; 21 import android.os.Looper; 22 import android.util.SparseIntArray; 23 24 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader; 25 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader; 26 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader; 27 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader; 28 import com.android.internal.power.MeasuredEnergyStats; 29 30 import java.util.ArrayList; 31 import java.util.Arrays; 32 import java.util.Queue; 33 import java.util.concurrent.Future; 34 35 /** 36 * Mocks a BatteryStatsImpl object. 37 */ 38 public class MockBatteryStatsImpl extends BatteryStatsImpl { 39 public BatteryStatsImpl.Clocks clocks; 40 public boolean mForceOnBattery; 41 private NetworkStats mNetworkStats; 42 private DummyExternalStatsSync mExternalStatsSync = new DummyExternalStatsSync(); 43 MockBatteryStatsImpl(Clocks clocks)44 MockBatteryStatsImpl(Clocks clocks) { 45 super(clocks); 46 this.clocks = mClocks; 47 initTimersAndCounters(); 48 49 setExternalStatsSyncLocked(mExternalStatsSync); 50 informThatAllExternalStatsAreFlushed(); 51 52 // A no-op handler. 53 mHandler = new Handler(Looper.getMainLooper()) { 54 }; 55 } 56 MockBatteryStatsImpl()57 MockBatteryStatsImpl() { 58 this(new MockClocks()); 59 } 60 initMeasuredEnergyStats(String[] customBucketNames)61 public void initMeasuredEnergyStats(String[] customBucketNames) { 62 final boolean[] supportedStandardBuckets = 63 new boolean[MeasuredEnergyStats.NUMBER_STANDARD_POWER_BUCKETS]; 64 Arrays.fill(supportedStandardBuckets, true); 65 mGlobalMeasuredEnergyStats = 66 new MeasuredEnergyStats(supportedStandardBuckets, customBucketNames); 67 } 68 getOnBatteryTimeBase()69 public TimeBase getOnBatteryTimeBase() { 70 return mOnBatteryTimeBase; 71 } 72 getOnBatteryScreenOffTimeBase()73 public TimeBase getOnBatteryScreenOffTimeBase() { 74 return mOnBatteryScreenOffTimeBase; 75 } 76 getScreenState()77 public int getScreenState() { 78 return mScreenState; 79 } 80 getPendingRemovedUids()81 public Queue<UidToRemove> getPendingRemovedUids() { 82 return mPendingRemovedUids; 83 } 84 isOnBattery()85 public boolean isOnBattery() { 86 return mForceOnBattery ? true : super.isOnBattery(); 87 } 88 forceRecordAllHistory()89 public void forceRecordAllHistory() { 90 mHaveBatteryLevel = true; 91 mRecordingHistory = true; 92 mRecordAllHistory = true; 93 } 94 getOnBatteryBackgroundTimeBase(int uid)95 public TimeBase getOnBatteryBackgroundTimeBase(int uid) { 96 return getUidStatsLocked(uid).mOnBatteryBackgroundTimeBase; 97 } 98 getOnBatteryScreenOffBackgroundTimeBase(int uid)99 public TimeBase getOnBatteryScreenOffBackgroundTimeBase(int uid) { 100 return getUidStatsLocked(uid).mOnBatteryScreenOffBackgroundTimeBase; 101 } 102 setNetworkStats(NetworkStats networkStats)103 public MockBatteryStatsImpl setNetworkStats(NetworkStats networkStats) { 104 mNetworkStats = networkStats; 105 return this; 106 } 107 108 @Override readNetworkStatsLocked(String[] ifaces)109 protected NetworkStats readNetworkStatsLocked(String[] ifaces) { 110 return mNetworkStats; 111 } 112 setPowerProfile(PowerProfile powerProfile)113 public MockBatteryStatsImpl setPowerProfile(PowerProfile powerProfile) { 114 mPowerProfile = powerProfile; 115 return this; 116 } 117 setKernelCpuUidFreqTimeReader(KernelCpuUidFreqTimeReader reader)118 public MockBatteryStatsImpl setKernelCpuUidFreqTimeReader(KernelCpuUidFreqTimeReader reader) { 119 mCpuUidFreqTimeReader = reader; 120 return this; 121 } 122 setKernelCpuUidActiveTimeReader( KernelCpuUidActiveTimeReader reader)123 public MockBatteryStatsImpl setKernelCpuUidActiveTimeReader( 124 KernelCpuUidActiveTimeReader reader) { 125 mCpuUidActiveTimeReader = reader; 126 return this; 127 } 128 setKernelCpuUidClusterTimeReader( KernelCpuUidClusterTimeReader reader)129 public MockBatteryStatsImpl setKernelCpuUidClusterTimeReader( 130 KernelCpuUidClusterTimeReader reader) { 131 mCpuUidClusterTimeReader = reader; 132 return this; 133 } 134 setKernelCpuUidUserSysTimeReader( KernelCpuUidUserSysTimeReader reader)135 public MockBatteryStatsImpl setKernelCpuUidUserSysTimeReader( 136 KernelCpuUidUserSysTimeReader reader) { 137 mCpuUidUserSysTimeReader = reader; 138 return this; 139 } 140 setKernelSingleUidTimeReader(KernelSingleUidTimeReader reader)141 public MockBatteryStatsImpl setKernelSingleUidTimeReader(KernelSingleUidTimeReader reader) { 142 mKernelSingleUidTimeReader = reader; 143 return this; 144 } 145 setKernelCpuSpeedReaders(KernelCpuSpeedReader[] readers)146 public MockBatteryStatsImpl setKernelCpuSpeedReaders(KernelCpuSpeedReader[] readers) { 147 mKernelCpuSpeedReaders = readers; 148 return this; 149 } 150 setSystemServerCpuThreadReader( SystemServerCpuThreadReader systemServerCpuThreadReader)151 public MockBatteryStatsImpl setSystemServerCpuThreadReader( 152 SystemServerCpuThreadReader systemServerCpuThreadReader) { 153 mSystemServerCpuThreadReader = systemServerCpuThreadReader; 154 return this; 155 } 156 setUserInfoProvider(UserInfoProvider provider)157 public MockBatteryStatsImpl setUserInfoProvider(UserInfoProvider provider) { 158 mUserInfoProvider = provider; 159 return this; 160 } 161 setPartialTimers(ArrayList<StopwatchTimer> partialTimers)162 public MockBatteryStatsImpl setPartialTimers(ArrayList<StopwatchTimer> partialTimers) { 163 mPartialTimers = partialTimers; 164 return this; 165 } 166 setLastPartialTimers(ArrayList<StopwatchTimer> lastPartialTimers)167 public MockBatteryStatsImpl setLastPartialTimers(ArrayList<StopwatchTimer> lastPartialTimers) { 168 mLastPartialTimers = lastPartialTimers; 169 return this; 170 } 171 setOnBatteryInternal(boolean onBatteryInternal)172 public MockBatteryStatsImpl setOnBatteryInternal(boolean onBatteryInternal) { 173 mOnBatteryInternal = onBatteryInternal; 174 return this; 175 } 176 setTrackingCpuByProcStateEnabled(boolean enabled)177 public MockBatteryStatsImpl setTrackingCpuByProcStateEnabled(boolean enabled) { 178 mConstants.TRACK_CPU_TIMES_BY_PROC_STATE = enabled; 179 return this; 180 } 181 getPendingUids()182 public SparseIntArray getPendingUids() { 183 return mPendingUids; 184 } 185 getAndClearExternalStatsSyncFlags()186 public int getAndClearExternalStatsSyncFlags() { 187 final int flags = mExternalStatsSync.flags; 188 mExternalStatsSync.flags = 0; 189 return flags; 190 } 191 192 private class DummyExternalStatsSync implements ExternalStatsSync { 193 public int flags = 0; 194 195 @Override scheduleSync(String reason, int flags)196 public Future<?> scheduleSync(String reason, int flags) { 197 return null; 198 } 199 200 @Override scheduleCpuSyncDueToRemovedUid(int uid)201 public Future<?> scheduleCpuSyncDueToRemovedUid(int uid) { 202 return null; 203 } 204 205 @Override scheduleCpuSyncDueToSettingChange()206 public Future<?> scheduleCpuSyncDueToSettingChange() { 207 return null; 208 } 209 210 @Override scheduleReadProcStateCpuTimes(boolean onBattery, boolean onBatteryScreenOff, long delayMillis)211 public Future<?> scheduleReadProcStateCpuTimes(boolean onBattery, 212 boolean onBatteryScreenOff, long delayMillis) { 213 return null; 214 } 215 216 @Override scheduleCopyFromAllUidsCpuTimes( boolean onBattery, boolean onBatteryScreenOff)217 public Future<?> scheduleCopyFromAllUidsCpuTimes( 218 boolean onBattery, boolean onBatteryScreenOff) { 219 return null; 220 } 221 222 @Override scheduleSyncDueToScreenStateChange(int flag, boolean onBattery, boolean onBatteryScreenOff, int screenState, int[] perDisplayScreenStates)223 public Future<?> scheduleSyncDueToScreenStateChange(int flag, boolean onBattery, 224 boolean onBatteryScreenOff, int screenState, int[] perDisplayScreenStates) { 225 flags |= flag; 226 return null; 227 } 228 229 @Override scheduleCpuSyncDueToWakelockChange(long delayMillis)230 public Future<?> scheduleCpuSyncDueToWakelockChange(long delayMillis) { 231 return null; 232 } 233 234 @Override cancelCpuSyncDueToWakelockChange()235 public void cancelCpuSyncDueToWakelockChange() { 236 } 237 238 @Override scheduleSyncDueToBatteryLevelChange(long delayMillis)239 public Future<?> scheduleSyncDueToBatteryLevelChange(long delayMillis) { 240 return null; 241 } 242 } 243 } 244 245