| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.android.internal.os; |
| |
| import static android.os.BatteryStats.STATS_SINCE_CHARGED; |
| import static android.os.BatteryStats.WAKE_TYPE_PARTIAL; |
| |
| import android.app.ActivityManager; |
| import android.os.BatteryStats; |
| import android.os.WorkSource; |
| import android.support.test.filters.SmallTest; |
| |
| import junit.framework.TestCase; |
| |
| /** |
| * Test various BatteryStatsImpl noteStart methods. |
| */ |
| public class BatteryStatsNoteTest extends TestCase{ |
| private static final int UID = 10500; |
| private static final WorkSource WS = new WorkSource(UID); |
| |
| /** Test BatteryStatsImpl.Uid.noteBluetoothScanResultLocked. */ |
| @SmallTest |
| public void testNoteBluetoothScanResultLocked() throws Exception { |
| MockBatteryStatsImpl bi = new MockBatteryStatsImpl(new MockClocks()); |
| bi.updateTimeBasesLocked(true, true, 0, 0); |
| bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); |
| |
| bi.noteBluetoothScanResultsFromSourceLocked(WS, 1); |
| bi.noteBluetoothScanResultsFromSourceLocked(WS, 100); |
| assertEquals(101, |
| bi.getUidStats().get(UID).getBluetoothScanResultCounter() |
| .getCountLocked(STATS_SINCE_CHARGED)); |
| BatteryStats.Counter bgCntr = bi.getUidStats().get(UID).getBluetoothScanResultBgCounter(); |
| if (bgCntr != null) { |
| assertEquals(0, bgCntr.getCountLocked(STATS_SINCE_CHARGED)); |
| } |
| |
| bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND); |
| bi.noteBluetoothScanResultsFromSourceLocked(WS, 17); |
| assertEquals(101 + 17, |
| bi.getUidStats().get(UID).getBluetoothScanResultCounter() |
| .getCountLocked(STATS_SINCE_CHARGED)); |
| assertEquals(17, |
| bi.getUidStats().get(UID).getBluetoothScanResultBgCounter() |
| .getCountLocked(STATS_SINCE_CHARGED)); |
| } |
| |
| /** Test BatteryStatsImpl.Uid.noteStartWakeLocked. */ |
| @SmallTest |
| public void testNoteStartWakeLocked() throws Exception { |
| final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms |
| MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); |
| |
| int pid = 10; |
| String name = "name"; |
| |
| bi.updateTimeBasesLocked(true, true, 0, 0); |
| bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); |
| bi.getUidStatsLocked(UID).noteStartWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime); |
| |
| clocks.realtime = clocks.uptime = 100; |
| bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND); |
| |
| clocks.realtime = clocks.uptime = 220; |
| bi.getUidStatsLocked(UID).noteStopWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime); |
| |
| BatteryStats.Timer aggregTimer = bi.getUidStats().get(UID).getAggregatedPartialWakelockTimer(); |
| long actualTime = aggregTimer.getTotalTimeLocked(300_000, STATS_SINCE_CHARGED); |
| long bgTime = aggregTimer.getSubTimer().getTotalTimeLocked(300_000, STATS_SINCE_CHARGED); |
| assertEquals(220_000, actualTime); |
| assertEquals(120_000, bgTime); |
| } |
| } |