Loading core/java/android/os/BatteryStats.java +114 −51 Original line number Diff line number Diff line Loading @@ -217,8 +217,10 @@ public abstract class BatteryStats implements Parcelable { * - Package wakeup alarms are now on screen-off timebase * New in version 26: * - Resource power manager (rpm) states [but screenOffRpm is disabled from working properly] * New in version 27: * - Always On Display (screen doze mode) time and power */ static final String CHECKIN_VERSION = "26"; static final String CHECKIN_VERSION = "27"; /** * Old version, we hit 9 and ran out of room, need to remove. Loading Loading @@ -1381,12 +1383,12 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE_PHONE_SCANNING_FLAG = 1<<21; public static final int STATE_SCREEN_ON_FLAG = 1<<20; // consider moving to states2 public static final int STATE_BATTERY_PLUGGED_FLAG = 1<<19; // consider moving to states2 // empty slot public static final int STATE_SCREEN_DOZE_FLAG = 1 << 18; // empty slot public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<16; public static final int MOST_INTERESTING_STATES = STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG; STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG | STATE_SCREEN_DOZE_FLAG; public static final int SETTLE_TO_ZERO_STATES = 0xffff0000 & ~MOST_INTERESTING_STATES; Loading Loading @@ -1863,6 +1865,21 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getScreenOnCount(int which); /** * Returns the time in microseconds that the screen has been dozing while the device was * running on battery. * * {@hide} */ public abstract long getScreenDozeTime(long elapsedRealtimeUs, int which); /** * Returns the number of times the screen was turned dozing. * * {@hide} */ public abstract int getScreenDozeCount(int which); public abstract long getInteractiveTime(long elapsedRealtimeUs, int which); public static final int SCREEN_BRIGHTNESS_DARK = 0; Loading Loading @@ -2116,8 +2133,7 @@ public abstract class BatteryStats implements Parcelable { "group", "compl", "dorm", "uninit" }; public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] { public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] { new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"), new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"), new BitDescription(HistoryItem.STATE_SENSOR_ON_FLAG, "sensor", "s"), Loading @@ -2131,6 +2147,7 @@ public abstract class BatteryStats implements Parcelable { new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio", "a"), new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen", "S"), new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged", "BP"), new BitDescription(HistoryItem.STATE_SCREEN_DOZE_FLAG, "screen_doze", "Sd"), new BitDescription(HistoryItem.STATE_DATA_CONNECTION_MASK, HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn", "Pcn", DATA_CONNECTION_NAMES, DATA_CONNECTION_NAMES), Loading Loading @@ -2466,6 +2483,18 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getDischargeAmountScreenOffSinceCharge(); /** * Get the amount the battery has discharged while the screen was doze, * since the last time power was unplugged. */ public abstract int getDischargeAmountScreenDoze(); /** * Get the amount the battery has discharged while the screen was doze, * since the last time the device was charged. */ public abstract int getDischargeAmountScreenDozeSinceCharge(); /** * Returns the total, last, or current battery uptime in microseconds. * Loading @@ -2483,7 +2512,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long computeBatteryRealtime(long curTime, int which); /** * Returns the total, last, or current battery screen off uptime in microseconds. * Returns the total, last, or current battery screen off/doze uptime in microseconds. * * @param curTime the elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. Loading @@ -2491,7 +2520,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long computeBatteryScreenOffUptime(long curTime, int which); /** * Returns the total, last, or current battery screen off realtime in microseconds. * Returns the total, last, or current battery screen off/doze realtime in microseconds. * * @param curTime the current elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. Loading Loading @@ -2590,18 +2619,24 @@ public abstract class BatteryStats implements Parcelable { }; /** * Return the counter keeping track of the amount of battery discharge while the screen was off, * measured in micro-Ampere-hours. This will be non-zero only if the device's battery has * Return the amount of battery discharge while the screen was off, measured in * micro-Ampere-hours. This will be non-zero only if the device's battery has * a coulomb counter. */ public abstract LongCounter getDischargeScreenOffCoulombCounter(); public abstract long getMahDischargeScreenOff(int which); /** * Return the counter keeping track of the amount of battery discharge measured in * Return the amount of battery discharge while the screen was in doze mode, measured in * micro-Ampere-hours. This will be non-zero only if the device's battery has * a coulomb counter. */ public abstract LongCounter getDischargeCoulombCounter(); public abstract long getMahDischargeScreenDoze(int which); /** * Return the amount of battery discharge measured in micro-Ampere-hours. This will be * non-zero only if the device's battery has a coulomb counter. */ public abstract long getMahDischarge(int which); /** * Returns the estimated real battery capacity, which may be less than the capacity Loading Loading @@ -3112,6 +3147,7 @@ public abstract class BatteryStats implements Parcelable { final long totalRealtime = computeRealtime(rawRealtime, which); final long totalUptime = computeUptime(rawUptime, which); final long screenOnTime = getScreenOnTime(rawRealtime, which); final long screenDozeTime = getScreenDozeTime(rawRealtime, which); final long interactiveTime = getInteractiveTime(rawRealtime, which); final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which); final long deviceIdleModeLightTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT, Loading @@ -3124,9 +3160,9 @@ public abstract class BatteryStats implements Parcelable { rawRealtime, which); final int connChanges = getNumConnectivityChange(which); final long phoneOnTime = getPhoneOnTime(rawRealtime, which); final long dischargeCount = getDischargeCoulombCounter().getCountLocked(which); final long dischargeScreenOffCount = getDischargeScreenOffCoulombCounter() .getCountLocked(which); final long dischargeCount = getMahDischarge(which); final long dischargeScreenOffCount = getMahDischargeScreenOff(which); final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); final StringBuilder sb = new StringBuilder(128); Loading @@ -3143,7 +3179,8 @@ public abstract class BatteryStats implements Parcelable { getStartClockTime(), whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000, getEstimatedBatteryCapacity(), getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity()); getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), screenDozeTime / 1000); // Calculate wakelock times across all uids. Loading Loading @@ -3295,13 +3332,15 @@ public abstract class BatteryStats implements Parcelable { getDischargeStartLevel()-getDischargeCurrentLevel(), getDischargeStartLevel()-getDischargeCurrentLevel(), getDischargeAmountScreenOn(), getDischargeAmountScreenOff(), dischargeCount / 1000, dischargeScreenOffCount / 1000); dischargeCount / 1000, dischargeScreenOffCount / 1000, getDischargeAmountScreenDoze(), dischargeScreenDozeCount / 1000); } else { dumpLine(pw, 0 /* uid */, category, BATTERY_DISCHARGE_DATA, getLowDischargeAmountSinceCharge(), getHighDischargeAmountSinceCharge(), getDischargeAmountScreenOnSinceCharge(), getDischargeAmountScreenOffSinceCharge(), dischargeCount / 1000, dischargeScreenOffCount / 1000); dischargeCount / 1000, dischargeScreenOffCount / 1000, getDischargeAmountScreenDozeSinceCharge(), dischargeScreenDozeCount / 1000); } if (reqUid < 0) { Loading Loading @@ -3831,6 +3870,7 @@ public abstract class BatteryStats implements Parcelable { which); final long batteryTimeRemaining = computeBatteryTimeRemaining(rawRealtime); final long chargeTimeRemaining = computeChargeTimeRemaining(rawRealtime); final long screenDozeTime = getScreenDozeTime(rawRealtime, which); final StringBuilder sb = new StringBuilder(128); Loading Loading @@ -3873,20 +3913,30 @@ public abstract class BatteryStats implements Parcelable { sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); sb.append(") realtime, "); formatTimeMs(sb, whichBatteryUptime / 1000); sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime)); sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, whichBatteryRealtime)); sb.append(") uptime"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); sb.append(" Time on battery screen off: "); formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("("); sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, totalRealtime)); sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, whichBatteryRealtime)); sb.append(") realtime, "); formatTimeMs(sb, whichBatteryScreenOffUptime / 1000); sb.append("("); sb.append(formatRatioLocked(whichBatteryScreenOffUptime, totalRealtime)); sb.append(formatRatioLocked(whichBatteryScreenOffUptime, whichBatteryRealtime)); sb.append(") uptime"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); sb.append(" Time on battery screen doze: "); formatTimeMs(sb, screenDozeTime / 1000); sb.append("("); sb.append(formatRatioLocked(screenDozeTime, whichBatteryRealtime)); sb.append(")"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); sb.append(" Total run time: "); Loading @@ -3910,8 +3960,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final LongCounter dischargeCounter = getDischargeCoulombCounter(); final long dischargeCount = dischargeCounter.getCountLocked(which); final long dischargeCount = getMahDischarge(which); if (dischargeCount >= 0) { sb.setLength(0); sb.append(prefix); Loading @@ -3921,8 +3970,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final LongCounter dischargeScreenOffCounter = getDischargeScreenOffCoulombCounter(); final long dischargeScreenOffCount = dischargeScreenOffCounter.getCountLocked(which); final long dischargeScreenOffCount = getMahDischargeScreenOff(which); if (dischargeScreenOffCount >= 0) { sb.setLength(0); sb.append(prefix); Loading @@ -3932,7 +3980,18 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final long dischargeScreenOnCount = dischargeCount - dischargeScreenOffCount; final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); if (dischargeScreenDozeCount >= 0) { sb.setLength(0); sb.append(prefix); sb.append(" Screen doze discharge: "); sb.append(BatteryStatsHelper.makemAh(dischargeScreenDozeCount / 1000.0)); sb.append(" mAh"); pw.println(sb.toString()); } final long dischargeScreenOnCount = dischargeCount - dischargeScreenOffCount - dischargeScreenDozeCount; if (dischargeScreenOnCount >= 0) { sb.setLength(0); sb.append(prefix); Loading Loading @@ -4343,6 +4402,8 @@ public abstract class BatteryStats implements Parcelable { pw.println(getDischargeAmountScreenOn()); pw.print(prefix); pw.print(" Amount discharged while screen off: "); pw.println(getDischargeAmountScreenOff()); pw.print(prefix); pw.print(" Amount discharged while screen doze: "); pw.println(getDischargeAmountScreenDoze()); pw.println(" "); } else { pw.print(prefix); pw.println(" Device battery use since last full charge"); Loading @@ -4354,6 +4415,8 @@ public abstract class BatteryStats implements Parcelable { pw.println(getDischargeAmountScreenOnSinceCharge()); pw.print(prefix); pw.print(" Amount discharged while screen off: "); pw.println(getDischargeAmountScreenOffSinceCharge()); pw.print(prefix); pw.print(" Amount discharged while screen doze: "); pw.println(getDischargeAmountScreenDozeSinceCharge()); pw.println(); } Loading core/java/com/android/internal/os/BatteryStatsImpl.java +204 −76 File changed.Preview size limit exceeded, changes collapsed. Show changes core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java +19 −18 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.BatteryStats; import android.os.WorkSource; import android.support.test.filters.SmallTest; import android.util.ArrayMap; import android.view.Display; import junit.framework.TestCase; Loading @@ -44,7 +45,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off-battery, non-existent clocks.realtime = clocks.uptime = 10; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(false, false, cur, cur); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); // off battery assertFalse(bgtb.isRunning()); assertEquals(0, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -65,7 +66,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On-battery, background clocks.realtime = clocks.uptime = 303; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(true, false, cur, cur); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur); // on battery // still in ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND assertTrue(bgtb.isRunning()); assertEquals(0, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -73,7 +74,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On-battery, background - but change screen state clocks.realtime = clocks.uptime = 409; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(true, true, cur, cur); // on battery (again) bi.updateTimeBasesLocked(true, Display.STATE_OFF, cur, cur); // on battery (again) assertTrue(bgtb.isRunning()); assertEquals(106_000, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -87,7 +88,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off-battery, foreground clocks.realtime = clocks.uptime = 530; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(false, false, cur, cur); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); // off battery bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); assertFalse(bgtb.isRunning()); assertEquals(227_000, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -112,17 +113,17 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // battery=off, screen=off, background=off cur = (clocks.realtime = clocks.uptime = 100) * 1000; bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); bi.updateTimeBasesLocked(false, false, cur, cur); bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=on, screen=off, background=off cur = (clocks.realtime = clocks.uptime = 200) * 1000; bi.updateTimeBasesLocked(true, false, cur, cur); bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=on, screen=on, background=off cur = (clocks.realtime = clocks.uptime = 300) * 1000; bi.updateTimeBasesLocked(true, true, cur, cur); bi.updateTimeBasesLocked(true, Display.STATE_OFF, cur, cur); assertFalse(bgtb.isRunning()); // battery=on, screen=on, background=on Loading @@ -133,12 +134,12 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // battery=on, screen=off, background=on cur = (clocks.realtime = clocks.uptime = 550) * 1000; bi.updateTimeBasesLocked(true, false, cur, cur); bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=off, screen=off, background=on cur = (clocks.realtime = clocks.uptime = 660) * 1000; bi.updateTimeBasesLocked(false, false, cur, cur); bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=off, screen=off, background=off Loading @@ -157,7 +158,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -171,7 +172,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Stop timer curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading Loading @@ -200,7 +201,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -215,7 +216,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Start timer (unoptimized) curr = 1000 * (clocks.realtime = clocks.uptime = 1000); Loading @@ -223,7 +224,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 2001); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // Move to foreground curr = 1000 * (clocks.realtime = clocks.uptime = 3004); Loading Loading @@ -270,7 +271,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -292,7 +293,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Stop timer curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading Loading @@ -331,7 +332,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -353,7 +354,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Stop timer curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java +47 −3 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ import static android.os.BatteryStats.STATS_SINCE_CHARGED; import static android.os.BatteryStats.WAKE_TYPE_PARTIAL; import android.app.ActivityManager; import android.os.BatteryManager; import android.os.BatteryStats; import android.os.WorkSource; import android.support.test.filters.SmallTest; import android.view.Display; import junit.framework.TestCase; Loading Loading @@ -50,7 +52,7 @@ public class BatteryStatsNoteTest extends TestCase{ @SmallTest public void testNoteBluetoothScanResultLocked() throws Exception { MockBatteryStatsImpl bi = new MockBatteryStatsImpl(new MockClocks()); bi.updateTimeBasesLocked(true, true, 0, 0); bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); bi.noteBluetoothScanResultsFromSourceLocked(WS, 1); Loading Loading @@ -82,7 +84,7 @@ public class BatteryStatsNoteTest extends TestCase{ int pid = 10; String name = "name"; bi.updateTimeBasesLocked(true, true, 0, 0); bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); bi.getUidStatsLocked(UID).noteStartWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime); Loading Loading @@ -124,7 +126,7 @@ public class BatteryStatsNoteTest extends TestCase{ stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT, 5309); stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_EMPTY, 42); bi.updateTimeBasesLocked(true, false, 0, 0); bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0); for (Map.Entry<Integer, Integer> entry : stateRuntimeMap.entrySet()) { bi.noteUidProcessStateLocked(UID, entry.getKey()); Loading Loading @@ -189,4 +191,46 @@ public class BatteryStatsNoteTest extends TestCase{ expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE); assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs); } /** Test BatteryStatsImpl.updateTimeBasesLocked. */ @SmallTest public void testUpdateTimeBasesLocked() throws Exception { final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); bi.updateTimeBasesLocked(false, Display.STATE_OFF, 0, 0); assertFalse(bi.getOnBatteryTimeBase().isRunning()); bi.updateTimeBasesLocked(false, Display.STATE_DOZE, 10, 10); assertFalse(bi.getOnBatteryTimeBase().isRunning()); bi.updateTimeBasesLocked(false, Display.STATE_ON, 20, 20); assertFalse(bi.getOnBatteryTimeBase().isRunning()); bi.updateTimeBasesLocked(true, Display.STATE_ON, 30, 30); assertTrue(bi.getOnBatteryTimeBase().isRunning()); assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning()); bi.updateTimeBasesLocked(true, Display.STATE_DOZE, 40, 40); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); bi.updateTimeBasesLocked(true, Display.STATE_OFF, 40, 40); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); } /** Test BatteryStatsImpl.noteScreenStateLocked. */ @SmallTest public void testNoteScreenStateLocked() throws Exception { final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0); bi.noteScreenStateLocked(Display.STATE_ON); bi.noteScreenStateLocked(Display.STATE_DOZE); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); assertEquals(bi.getScreenState(), Display.STATE_DOZE); bi.noteScreenStateLocked(Display.STATE_ON); assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning()); assertEquals(bi.getScreenState(), Display.STATE_ON); bi.noteScreenStateLocked(Display.STATE_OFF); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); assertEquals(bi.getScreenState(), Display.STATE_OFF); } } core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java +8 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.os; import android.app.ActivityManager; import android.os.BatteryStats; import android.support.test.filters.SmallTest; import android.view.Display; import junit.framework.TestCase; Loading Loading @@ -74,7 +75,7 @@ public class BatteryStatsSensorTest extends TestCase { // Plugged-in (battery=off, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(false, false, curr, curr); bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // Start sensor (battery=off, sensor=on) Loading Loading @@ -110,7 +111,7 @@ public class BatteryStatsSensorTest extends TestCase { // Unplugged (battery=on, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // Start sensor (battery=on, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 200); Loading Loading @@ -145,7 +146,7 @@ public class BatteryStatsSensorTest extends TestCase { // On battery (battery=on, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); // Start sensor (battery=on, sensor=on) Loading @@ -154,7 +155,7 @@ public class BatteryStatsSensorTest extends TestCase { // Off battery (battery=off, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // Stop sensor while off battery (battery=off, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading Loading @@ -191,7 +192,7 @@ public class BatteryStatsSensorTest extends TestCase { // Plugged-in (battery=off, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(false, false, curr, curr); bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // Start sensor (battery=off, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 200); Loading @@ -209,7 +210,7 @@ public class BatteryStatsSensorTest extends TestCase { // Unplug (battery=on, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); //Test situation curr = 1000 * (clocks.realtime = clocks.uptime = 410); Loading Loading @@ -243,7 +244,7 @@ public class BatteryStatsSensorTest extends TestCase { long curr = 0; // realtime in us // Entire test is on-battery curr = 1000 * (clocks.realtime = clocks.uptime = 1000); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // See below for a diagram of events. Loading Loading
core/java/android/os/BatteryStats.java +114 −51 Original line number Diff line number Diff line Loading @@ -217,8 +217,10 @@ public abstract class BatteryStats implements Parcelable { * - Package wakeup alarms are now on screen-off timebase * New in version 26: * - Resource power manager (rpm) states [but screenOffRpm is disabled from working properly] * New in version 27: * - Always On Display (screen doze mode) time and power */ static final String CHECKIN_VERSION = "26"; static final String CHECKIN_VERSION = "27"; /** * Old version, we hit 9 and ran out of room, need to remove. Loading Loading @@ -1381,12 +1383,12 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE_PHONE_SCANNING_FLAG = 1<<21; public static final int STATE_SCREEN_ON_FLAG = 1<<20; // consider moving to states2 public static final int STATE_BATTERY_PLUGGED_FLAG = 1<<19; // consider moving to states2 // empty slot public static final int STATE_SCREEN_DOZE_FLAG = 1 << 18; // empty slot public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<16; public static final int MOST_INTERESTING_STATES = STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG; STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG | STATE_SCREEN_DOZE_FLAG; public static final int SETTLE_TO_ZERO_STATES = 0xffff0000 & ~MOST_INTERESTING_STATES; Loading Loading @@ -1863,6 +1865,21 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getScreenOnCount(int which); /** * Returns the time in microseconds that the screen has been dozing while the device was * running on battery. * * {@hide} */ public abstract long getScreenDozeTime(long elapsedRealtimeUs, int which); /** * Returns the number of times the screen was turned dozing. * * {@hide} */ public abstract int getScreenDozeCount(int which); public abstract long getInteractiveTime(long elapsedRealtimeUs, int which); public static final int SCREEN_BRIGHTNESS_DARK = 0; Loading Loading @@ -2116,8 +2133,7 @@ public abstract class BatteryStats implements Parcelable { "group", "compl", "dorm", "uninit" }; public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] { public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] { new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"), new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"), new BitDescription(HistoryItem.STATE_SENSOR_ON_FLAG, "sensor", "s"), Loading @@ -2131,6 +2147,7 @@ public abstract class BatteryStats implements Parcelable { new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio", "a"), new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen", "S"), new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged", "BP"), new BitDescription(HistoryItem.STATE_SCREEN_DOZE_FLAG, "screen_doze", "Sd"), new BitDescription(HistoryItem.STATE_DATA_CONNECTION_MASK, HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn", "Pcn", DATA_CONNECTION_NAMES, DATA_CONNECTION_NAMES), Loading Loading @@ -2466,6 +2483,18 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getDischargeAmountScreenOffSinceCharge(); /** * Get the amount the battery has discharged while the screen was doze, * since the last time power was unplugged. */ public abstract int getDischargeAmountScreenDoze(); /** * Get the amount the battery has discharged while the screen was doze, * since the last time the device was charged. */ public abstract int getDischargeAmountScreenDozeSinceCharge(); /** * Returns the total, last, or current battery uptime in microseconds. * Loading @@ -2483,7 +2512,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long computeBatteryRealtime(long curTime, int which); /** * Returns the total, last, or current battery screen off uptime in microseconds. * Returns the total, last, or current battery screen off/doze uptime in microseconds. * * @param curTime the elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. Loading @@ -2491,7 +2520,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long computeBatteryScreenOffUptime(long curTime, int which); /** * Returns the total, last, or current battery screen off realtime in microseconds. * Returns the total, last, or current battery screen off/doze realtime in microseconds. * * @param curTime the current elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. Loading Loading @@ -2590,18 +2619,24 @@ public abstract class BatteryStats implements Parcelable { }; /** * Return the counter keeping track of the amount of battery discharge while the screen was off, * measured in micro-Ampere-hours. This will be non-zero only if the device's battery has * Return the amount of battery discharge while the screen was off, measured in * micro-Ampere-hours. This will be non-zero only if the device's battery has * a coulomb counter. */ public abstract LongCounter getDischargeScreenOffCoulombCounter(); public abstract long getMahDischargeScreenOff(int which); /** * Return the counter keeping track of the amount of battery discharge measured in * Return the amount of battery discharge while the screen was in doze mode, measured in * micro-Ampere-hours. This will be non-zero only if the device's battery has * a coulomb counter. */ public abstract LongCounter getDischargeCoulombCounter(); public abstract long getMahDischargeScreenDoze(int which); /** * Return the amount of battery discharge measured in micro-Ampere-hours. This will be * non-zero only if the device's battery has a coulomb counter. */ public abstract long getMahDischarge(int which); /** * Returns the estimated real battery capacity, which may be less than the capacity Loading Loading @@ -3112,6 +3147,7 @@ public abstract class BatteryStats implements Parcelable { final long totalRealtime = computeRealtime(rawRealtime, which); final long totalUptime = computeUptime(rawUptime, which); final long screenOnTime = getScreenOnTime(rawRealtime, which); final long screenDozeTime = getScreenDozeTime(rawRealtime, which); final long interactiveTime = getInteractiveTime(rawRealtime, which); final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which); final long deviceIdleModeLightTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT, Loading @@ -3124,9 +3160,9 @@ public abstract class BatteryStats implements Parcelable { rawRealtime, which); final int connChanges = getNumConnectivityChange(which); final long phoneOnTime = getPhoneOnTime(rawRealtime, which); final long dischargeCount = getDischargeCoulombCounter().getCountLocked(which); final long dischargeScreenOffCount = getDischargeScreenOffCoulombCounter() .getCountLocked(which); final long dischargeCount = getMahDischarge(which); final long dischargeScreenOffCount = getMahDischargeScreenOff(which); final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); final StringBuilder sb = new StringBuilder(128); Loading @@ -3143,7 +3179,8 @@ public abstract class BatteryStats implements Parcelable { getStartClockTime(), whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000, getEstimatedBatteryCapacity(), getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity()); getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), screenDozeTime / 1000); // Calculate wakelock times across all uids. Loading Loading @@ -3295,13 +3332,15 @@ public abstract class BatteryStats implements Parcelable { getDischargeStartLevel()-getDischargeCurrentLevel(), getDischargeStartLevel()-getDischargeCurrentLevel(), getDischargeAmountScreenOn(), getDischargeAmountScreenOff(), dischargeCount / 1000, dischargeScreenOffCount / 1000); dischargeCount / 1000, dischargeScreenOffCount / 1000, getDischargeAmountScreenDoze(), dischargeScreenDozeCount / 1000); } else { dumpLine(pw, 0 /* uid */, category, BATTERY_DISCHARGE_DATA, getLowDischargeAmountSinceCharge(), getHighDischargeAmountSinceCharge(), getDischargeAmountScreenOnSinceCharge(), getDischargeAmountScreenOffSinceCharge(), dischargeCount / 1000, dischargeScreenOffCount / 1000); dischargeCount / 1000, dischargeScreenOffCount / 1000, getDischargeAmountScreenDozeSinceCharge(), dischargeScreenDozeCount / 1000); } if (reqUid < 0) { Loading Loading @@ -3831,6 +3870,7 @@ public abstract class BatteryStats implements Parcelable { which); final long batteryTimeRemaining = computeBatteryTimeRemaining(rawRealtime); final long chargeTimeRemaining = computeChargeTimeRemaining(rawRealtime); final long screenDozeTime = getScreenDozeTime(rawRealtime, which); final StringBuilder sb = new StringBuilder(128); Loading Loading @@ -3873,20 +3913,30 @@ public abstract class BatteryStats implements Parcelable { sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); sb.append(") realtime, "); formatTimeMs(sb, whichBatteryUptime / 1000); sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime)); sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, whichBatteryRealtime)); sb.append(") uptime"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); sb.append(" Time on battery screen off: "); formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("("); sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, totalRealtime)); sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, whichBatteryRealtime)); sb.append(") realtime, "); formatTimeMs(sb, whichBatteryScreenOffUptime / 1000); sb.append("("); sb.append(formatRatioLocked(whichBatteryScreenOffUptime, totalRealtime)); sb.append(formatRatioLocked(whichBatteryScreenOffUptime, whichBatteryRealtime)); sb.append(") uptime"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); sb.append(" Time on battery screen doze: "); formatTimeMs(sb, screenDozeTime / 1000); sb.append("("); sb.append(formatRatioLocked(screenDozeTime, whichBatteryRealtime)); sb.append(")"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); sb.append(" Total run time: "); Loading @@ -3910,8 +3960,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final LongCounter dischargeCounter = getDischargeCoulombCounter(); final long dischargeCount = dischargeCounter.getCountLocked(which); final long dischargeCount = getMahDischarge(which); if (dischargeCount >= 0) { sb.setLength(0); sb.append(prefix); Loading @@ -3921,8 +3970,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final LongCounter dischargeScreenOffCounter = getDischargeScreenOffCoulombCounter(); final long dischargeScreenOffCount = dischargeScreenOffCounter.getCountLocked(which); final long dischargeScreenOffCount = getMahDischargeScreenOff(which); if (dischargeScreenOffCount >= 0) { sb.setLength(0); sb.append(prefix); Loading @@ -3932,7 +3980,18 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final long dischargeScreenOnCount = dischargeCount - dischargeScreenOffCount; final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); if (dischargeScreenDozeCount >= 0) { sb.setLength(0); sb.append(prefix); sb.append(" Screen doze discharge: "); sb.append(BatteryStatsHelper.makemAh(dischargeScreenDozeCount / 1000.0)); sb.append(" mAh"); pw.println(sb.toString()); } final long dischargeScreenOnCount = dischargeCount - dischargeScreenOffCount - dischargeScreenDozeCount; if (dischargeScreenOnCount >= 0) { sb.setLength(0); sb.append(prefix); Loading Loading @@ -4343,6 +4402,8 @@ public abstract class BatteryStats implements Parcelable { pw.println(getDischargeAmountScreenOn()); pw.print(prefix); pw.print(" Amount discharged while screen off: "); pw.println(getDischargeAmountScreenOff()); pw.print(prefix); pw.print(" Amount discharged while screen doze: "); pw.println(getDischargeAmountScreenDoze()); pw.println(" "); } else { pw.print(prefix); pw.println(" Device battery use since last full charge"); Loading @@ -4354,6 +4415,8 @@ public abstract class BatteryStats implements Parcelable { pw.println(getDischargeAmountScreenOnSinceCharge()); pw.print(prefix); pw.print(" Amount discharged while screen off: "); pw.println(getDischargeAmountScreenOffSinceCharge()); pw.print(prefix); pw.print(" Amount discharged while screen doze: "); pw.println(getDischargeAmountScreenDozeSinceCharge()); pw.println(); } Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +204 −76 File changed.Preview size limit exceeded, changes collapsed. Show changes
core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java +19 −18 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.BatteryStats; import android.os.WorkSource; import android.support.test.filters.SmallTest; import android.util.ArrayMap; import android.view.Display; import junit.framework.TestCase; Loading @@ -44,7 +45,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off-battery, non-existent clocks.realtime = clocks.uptime = 10; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(false, false, cur, cur); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); // off battery assertFalse(bgtb.isRunning()); assertEquals(0, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -65,7 +66,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On-battery, background clocks.realtime = clocks.uptime = 303; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(true, false, cur, cur); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur); // on battery // still in ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND assertTrue(bgtb.isRunning()); assertEquals(0, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -73,7 +74,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On-battery, background - but change screen state clocks.realtime = clocks.uptime = 409; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(true, true, cur, cur); // on battery (again) bi.updateTimeBasesLocked(true, Display.STATE_OFF, cur, cur); // on battery (again) assertTrue(bgtb.isRunning()); assertEquals(106_000, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -87,7 +88,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off-battery, foreground clocks.realtime = clocks.uptime = 530; cur = clocks.realtime * 1000; bi.updateTimeBasesLocked(false, false, cur, cur); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); // off battery bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); assertFalse(bgtb.isRunning()); assertEquals(227_000, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED)); Loading @@ -112,17 +113,17 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // battery=off, screen=off, background=off cur = (clocks.realtime = clocks.uptime = 100) * 1000; bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); bi.updateTimeBasesLocked(false, false, cur, cur); bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=on, screen=off, background=off cur = (clocks.realtime = clocks.uptime = 200) * 1000; bi.updateTimeBasesLocked(true, false, cur, cur); bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=on, screen=on, background=off cur = (clocks.realtime = clocks.uptime = 300) * 1000; bi.updateTimeBasesLocked(true, true, cur, cur); bi.updateTimeBasesLocked(true, Display.STATE_OFF, cur, cur); assertFalse(bgtb.isRunning()); // battery=on, screen=on, background=on Loading @@ -133,12 +134,12 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // battery=on, screen=off, background=on cur = (clocks.realtime = clocks.uptime = 550) * 1000; bi.updateTimeBasesLocked(true, false, cur, cur); bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=off, screen=off, background=on cur = (clocks.realtime = clocks.uptime = 660) * 1000; bi.updateTimeBasesLocked(false, false, cur, cur); bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); assertFalse(bgtb.isRunning()); // battery=off, screen=off, background=off Loading @@ -157,7 +158,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -171,7 +172,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Stop timer curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading Loading @@ -200,7 +201,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -215,7 +216,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Start timer (unoptimized) curr = 1000 * (clocks.realtime = clocks.uptime = 1000); Loading @@ -223,7 +224,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 2001); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // Move to foreground curr = 1000 * (clocks.realtime = clocks.uptime = 3004); Loading Loading @@ -270,7 +271,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -292,7 +293,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Stop timer curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading Loading @@ -331,7 +332,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // On battery curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); // on battery bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); Loading @@ -353,7 +354,7 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // Off battery curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); // off battery bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery // Stop timer curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading
core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java +47 −3 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ import static android.os.BatteryStats.STATS_SINCE_CHARGED; import static android.os.BatteryStats.WAKE_TYPE_PARTIAL; import android.app.ActivityManager; import android.os.BatteryManager; import android.os.BatteryStats; import android.os.WorkSource; import android.support.test.filters.SmallTest; import android.view.Display; import junit.framework.TestCase; Loading Loading @@ -50,7 +52,7 @@ public class BatteryStatsNoteTest extends TestCase{ @SmallTest public void testNoteBluetoothScanResultLocked() throws Exception { MockBatteryStatsImpl bi = new MockBatteryStatsImpl(new MockClocks()); bi.updateTimeBasesLocked(true, true, 0, 0); bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); bi.noteBluetoothScanResultsFromSourceLocked(WS, 1); Loading Loading @@ -82,7 +84,7 @@ public class BatteryStatsNoteTest extends TestCase{ int pid = 10; String name = "name"; bi.updateTimeBasesLocked(true, true, 0, 0); bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); bi.getUidStatsLocked(UID).noteStartWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime); Loading Loading @@ -124,7 +126,7 @@ public class BatteryStatsNoteTest extends TestCase{ stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT, 5309); stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_EMPTY, 42); bi.updateTimeBasesLocked(true, false, 0, 0); bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0); for (Map.Entry<Integer, Integer> entry : stateRuntimeMap.entrySet()) { bi.noteUidProcessStateLocked(UID, entry.getKey()); Loading Loading @@ -189,4 +191,46 @@ public class BatteryStatsNoteTest extends TestCase{ expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE); assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs); } /** Test BatteryStatsImpl.updateTimeBasesLocked. */ @SmallTest public void testUpdateTimeBasesLocked() throws Exception { final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); bi.updateTimeBasesLocked(false, Display.STATE_OFF, 0, 0); assertFalse(bi.getOnBatteryTimeBase().isRunning()); bi.updateTimeBasesLocked(false, Display.STATE_DOZE, 10, 10); assertFalse(bi.getOnBatteryTimeBase().isRunning()); bi.updateTimeBasesLocked(false, Display.STATE_ON, 20, 20); assertFalse(bi.getOnBatteryTimeBase().isRunning()); bi.updateTimeBasesLocked(true, Display.STATE_ON, 30, 30); assertTrue(bi.getOnBatteryTimeBase().isRunning()); assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning()); bi.updateTimeBasesLocked(true, Display.STATE_DOZE, 40, 40); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); bi.updateTimeBasesLocked(true, Display.STATE_OFF, 40, 40); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); } /** Test BatteryStatsImpl.noteScreenStateLocked. */ @SmallTest public void testNoteScreenStateLocked() throws Exception { final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0); bi.noteScreenStateLocked(Display.STATE_ON); bi.noteScreenStateLocked(Display.STATE_DOZE); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); assertEquals(bi.getScreenState(), Display.STATE_DOZE); bi.noteScreenStateLocked(Display.STATE_ON); assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning()); assertEquals(bi.getScreenState(), Display.STATE_ON); bi.noteScreenStateLocked(Display.STATE_OFF); assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning()); assertEquals(bi.getScreenState(), Display.STATE_OFF); } }
core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java +8 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.os; import android.app.ActivityManager; import android.os.BatteryStats; import android.support.test.filters.SmallTest; import android.view.Display; import junit.framework.TestCase; Loading Loading @@ -74,7 +75,7 @@ public class BatteryStatsSensorTest extends TestCase { // Plugged-in (battery=off, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(false, false, curr, curr); bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // Start sensor (battery=off, sensor=on) Loading Loading @@ -110,7 +111,7 @@ public class BatteryStatsSensorTest extends TestCase { // Unplugged (battery=on, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // Start sensor (battery=on, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 200); Loading Loading @@ -145,7 +146,7 @@ public class BatteryStatsSensorTest extends TestCase { // On battery (battery=on, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); // Start sensor (battery=on, sensor=on) Loading @@ -154,7 +155,7 @@ public class BatteryStatsSensorTest extends TestCase { // Off battery (battery=off, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(false, false, curr, curr); bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // Stop sensor while off battery (battery=off, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 409); Loading Loading @@ -191,7 +192,7 @@ public class BatteryStatsSensorTest extends TestCase { // Plugged-in (battery=off, sensor=off) curr = 1000 * (clocks.realtime = clocks.uptime = 100); bi.updateTimeBasesLocked(false, false, curr, curr); bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // Start sensor (battery=off, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 200); Loading @@ -209,7 +210,7 @@ public class BatteryStatsSensorTest extends TestCase { // Unplug (battery=on, sensor=on) curr = 1000 * (clocks.realtime = clocks.uptime = 305); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); //Test situation curr = 1000 * (clocks.realtime = clocks.uptime = 410); Loading Loading @@ -243,7 +244,7 @@ public class BatteryStatsSensorTest extends TestCase { long curr = 0; // realtime in us // Entire test is on-battery curr = 1000 * (clocks.realtime = clocks.uptime = 1000); bi.updateTimeBasesLocked(true, false, curr, curr); bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // See below for a diagram of events. Loading