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

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

Merge "Update BatteryStatsImpl to handle multidisplay" into sc-v2-dev

parents a367967c e031d509
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
@@ -2302,6 +2302,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.
@@ -5038,6 +5070,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,13 +39,14 @@ public class MockBatteryStatsImpl extends BatteryStatsImpl {
    public BatteryStatsImpl.Clocks clocks;
    public boolean mForceOnBattery;
    private NetworkStats mNetworkStats;
    private DummyExternalStatsSync mExternalStatsSync = new DummyExternalStatsSync();

    MockBatteryStatsImpl(Clocks clocks) {
        super(clocks);
        this.clocks = mClocks;
        initTimersAndCounters();

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

        // A no-op handler.
@@ -182,7 +183,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;
@@ -211,8 +220,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