Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6204a60c authored by Mike Ma's avatar Mike Ma Committed by Android (Google) Code Review
Browse files

Merge "Add AOD metrics in batterystats" into oc-mr1-dev

parents 106aeb32 1ce1d3a4
Loading
Loading
Loading
Loading
+114 −51
Original line number Diff line number Diff line
@@ -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.
@@ -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;

@@ -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;
@@ -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"),
@@ -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),
@@ -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.
     *
@@ -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.
@@ -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.
@@ -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
@@ -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,
@@ -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);

@@ -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.
@@ -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) {
@@ -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);

@@ -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: ");
@@ -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);
@@ -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);
@@ -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);
@@ -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");
@@ -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();
        }

+204 −76

File changed.

Preview size limit exceeded, changes collapsed.

+19 −18
Original line number Diff line number Diff line
@@ -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;

@@ -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));

@@ -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));
@@ -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));

@@ -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));
@@ -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
@@ -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
@@ -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);

@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);

@@ -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);
@@ -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);

@@ -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);
+47 −3
Original line number Diff line number Diff line
@@ -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;

@@ -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);
@@ -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);

@@ -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());
@@ -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);
    }

}
+8 −7
Original line number Diff line number Diff line
@@ -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;

@@ -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)
@@ -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);
@@ -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)
@@ -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);
@@ -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);
@@ -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);
@@ -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