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

Commit d322dccf authored by Michael Wachenschwanz's avatar Michael Wachenschwanz Committed by Android (Google) Code Review
Browse files

Merge "Update BatteryStatsImpl to handle multidisplay"

parents a3101b66 5f05b4ff
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
@@ -2308,6 +2308,38 @@ public abstract class BatteryStats implements Parcelable {
     */
    public abstract Timer getScreenBrightnessTimer(int brightnessBin);

    /**
     * Returns the number of physical displays on the device.
     *
     * {@hide}
     */
    public abstract int getDisplayCount();

    /**
     * Returns the time in microseconds that the screen has been on for a display while the
     * device was running on battery.
     *
     * {@hide}
     */
    public abstract long getDisplayScreenOnTime(int display, long elapsedRealtimeUs);

    /**
     * Returns the time in microseconds that a display has been dozing while the device was
     * running on battery.
     *
     * {@hide}
     */
    public abstract long getDisplayScreenDozeTime(int display, long elapsedRealtimeUs);

    /**
     * Returns the time in microseconds that a display has been on with the given brightness
     * level while the device was running on battery.
     *
     * {@hide}
     */
    public abstract long getDisplayScreenBrightnessTime(int display, int brightnessBin,
            long elapsedRealtimeUs);

    /**
     * Returns the time in microseconds that power save mode has been enabled while the device was
     * running on battery.
@@ -5044,6 +5076,71 @@ public abstract class BatteryStats implements Parcelable {
            pw.println(sb.toString());
        }

        final int numDisplays = getDisplayCount();
        if (numDisplays > 1) {
            pw.println("");
            pw.print(prefix);
            sb.setLength(0);
            sb.append(prefix);
            sb.append("  MULTI-DISPLAY POWER SUMMARY START");
            pw.println(sb.toString());

            for (int display = 0; display < numDisplays; display++) {
                sb.setLength(0);
                sb.append(prefix);
                sb.append("  Display ");
                sb.append(display);
                sb.append(" Statistics:");
                pw.println(sb.toString());

                final long displayScreenOnTime = getDisplayScreenOnTime(display, rawRealtime);
                sb.setLength(0);
                sb.append(prefix);
                sb.append("    Screen on: ");
                formatTimeMs(sb, displayScreenOnTime / 1000);
                sb.append("(");
                sb.append(formatRatioLocked(displayScreenOnTime, whichBatteryRealtime));
                sb.append(") ");
                pw.println(sb.toString());

                sb.setLength(0);
                sb.append("    Screen brightness levels:");
                didOne = false;
                for (int bin = 0; bin < NUM_SCREEN_BRIGHTNESS_BINS; bin++) {
                    final long timeUs = getDisplayScreenBrightnessTime(display, bin, rawRealtime);
                    if (timeUs == 0) {
                        continue;
                    }
                    didOne = true;
                    sb.append("\n      ");
                    sb.append(prefix);
                    sb.append(SCREEN_BRIGHTNESS_NAMES[bin]);
                    sb.append(" ");
                    formatTimeMs(sb, timeUs / 1000);
                    sb.append("(");
                    sb.append(formatRatioLocked(timeUs, displayScreenOnTime));
                    sb.append(")");
                }
                if (!didOne) sb.append(" (no activity)");
                pw.println(sb.toString());

                final long displayScreenDozeTimeUs = getDisplayScreenDozeTime(display, rawRealtime);
                sb.setLength(0);
                sb.append(prefix);
                sb.append("    Screen Doze: ");
                formatTimeMs(sb, displayScreenDozeTimeUs / 1000);
                sb.append("(");
                sb.append(formatRatioLocked(displayScreenDozeTimeUs, whichBatteryRealtime));
                sb.append(") ");
                pw.println(sb.toString());
            }
            pw.print(prefix);
            sb.setLength(0);
            sb.append(prefix);
            sb.append("  MULTI-DISPLAY POWER SUMMARY END");
            pw.println(sb.toString());
        }

        pw.println("");
        pw.print(prefix);
        sb.setLength(0);
+357 −30

File changed.

Preview size limit exceeded, changes collapsed.

+4 −4
Original line number Diff line number Diff line
@@ -47,13 +47,13 @@ public class AmbientDisplayPowerCalculatorTest {

        stats.updateDisplayMeasuredEnergyStatsLocked(300_000_000, Display.STATE_ON, 0);

        stats.noteScreenStateLocked(Display.STATE_DOZE, 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS,
        stats.noteScreenStateLocked(0, Display.STATE_DOZE, 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS,
                30 * MINUTE_IN_MS);

        stats.updateDisplayMeasuredEnergyStatsLocked(200_000_000, Display.STATE_DOZE,
                30 * MINUTE_IN_MS);

        stats.noteScreenStateLocked(Display.STATE_OFF, 120 * MINUTE_IN_MS, 120 * MINUTE_IN_MS,
        stats.noteScreenStateLocked(0, Display.STATE_OFF, 120 * MINUTE_IN_MS, 120 * MINUTE_IN_MS,
                120 * MINUTE_IN_MS);

        stats.updateDisplayMeasuredEnergyStatsLocked(100_000_000, Display.STATE_OFF,
@@ -78,9 +78,9 @@ public class AmbientDisplayPowerCalculatorTest {
    public void testPowerProfileBasedModel() {
        BatteryStatsImpl stats = mStatsRule.getBatteryStats();

        stats.noteScreenStateLocked(Display.STATE_DOZE, 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS,
        stats.noteScreenStateLocked(0, Display.STATE_DOZE, 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS,
                30 * MINUTE_IN_MS);
        stats.noteScreenStateLocked(Display.STATE_OFF, 120 * MINUTE_IN_MS, 120 * MINUTE_IN_MS,
        stats.noteScreenStateLocked(0, Display.STATE_OFF, 120 * MINUTE_IN_MS, 120 * MINUTE_IN_MS,
                120 * MINUTE_IN_MS);

        AmbientDisplayPowerCalculator calculator =
+429 −11

File changed.

Preview size limit exceeded, changes collapsed.

+13 −3
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import java.util.concurrent.Future;
public class MockBatteryStatsImpl extends BatteryStatsImpl {
    public boolean mForceOnBattery;
    private NetworkStats mNetworkStats;
    private DummyExternalStatsSync mExternalStatsSync = new DummyExternalStatsSync();

    MockBatteryStatsImpl() {
        this(new MockClock());
@@ -52,7 +53,7 @@ public class MockBatteryStatsImpl extends BatteryStatsImpl {
        super(clock, historyDirectory);
        initTimersAndCounters();

        setExternalStatsSyncLocked(new DummyExternalStatsSync());
        setExternalStatsSyncLocked(mExternalStatsSync);
        informThatAllExternalStatsAreFlushed();

        // A no-op handler.
@@ -185,7 +186,15 @@ public class MockBatteryStatsImpl extends BatteryStatsImpl {
        return mPendingUids;
    }

    public int getAndClearExternalStatsSyncFlags() {
        final int flags = mExternalStatsSync.flags;
        mExternalStatsSync.flags = 0;
        return flags;
    }

    private class DummyExternalStatsSync implements ExternalStatsSync {
        public int flags = 0;

        @Override
        public Future<?> scheduleSync(String reason, int flags) {
            return null;
@@ -219,8 +228,9 @@ public class MockBatteryStatsImpl extends BatteryStatsImpl {
        }

        @Override
        public Future<?> scheduleSyncDueToScreenStateChange(
                int flag, boolean onBattery, boolean onBatteryScreenOff, int screenState) {
        public Future<?> scheduleSyncDueToScreenStateChange(int flag, boolean onBattery,
                boolean onBatteryScreenOff, int screenState, int[] perDisplayScreenStates) {
            flags |= flag;
            return null;
        }

Loading