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

Commit 26ecf229 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Disable battery history auto-reset after charge

Bug: 381940953
Flag: com.android.server.power.optimization.extended_battery_history_continuous_collection_enabled
Test: atest PowerStatsTests; atest PowerStatsTestsRavenwood
Change-Id: Ied29a9120c3201f26de4e7878062a852322cc993
parent 2b060022
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -528,6 +528,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
    public void systemServicesReady() {
        mStats.saveBatteryUsageStatsOnReset(mBatteryUsageStatsProvider, mPowerStatsStore,
                isBatteryUsageStatsAccumulationSupported());
        mStats.resetBatteryHistoryOnNewSession(
                !Flags.extendedBatteryHistoryContinuousCollectionEnabled());

        MultiStatePowerAttributor attributor = (MultiStatePowerAttributor) mPowerAttributor;
        mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_CPU,
+13 −1
Original line number Diff line number Diff line
@@ -637,6 +637,7 @@ public class BatteryStatsImpl extends BatteryStats {
    }
    private boolean mSaveBatteryUsageStatsOnReset;
    private boolean mResetBatteryHistoryOnNewSession;
    private boolean mAccumulateBatteryUsageStats;
    private BatteryUsageStatsProvider mBatteryUsageStatsProvider;
    private PowerStatsStore mPowerStatsStore;
@@ -12152,6 +12153,13 @@ public class BatteryStatsImpl extends BatteryStats {
        mAccumulateBatteryUsageStats = accumulateBatteryUsageStats;
    }
    /**
     * Enables or disables battery history reset at the beginning of a battery stats session.
     */
    public void resetBatteryHistoryOnNewSession(boolean enabled) {
        mResetBatteryHistoryOnNewSession = enabled;
    }
    @GuardedBy("this")
    public void resetAllStatsAndHistoryLocked(int reason) {
        final long mSecUptime = mClock.uptimeMillis();
@@ -12346,7 +12354,11 @@ public class BatteryStatsImpl extends BatteryStats {
        initDischarge(elapsedRealtimeUs);
        if ((resetReason != RESET_REASON_FULL_CHARGE
                && resetReason != RESET_REASON_PLUGGED_IN_FOR_LONG_DURATION)
                || mResetBatteryHistoryOnNewSession) {
            mHistory.reset();
        }
        // Store the empty state to disk to ensure consistency
        writeSyncLocked();
+30 −0
Original line number Diff line number Diff line
@@ -114,6 +114,21 @@ public class BatteryStatsResetTest {

    @Test
    public void testResetOnUnplug_highBatteryLevel() {
        mBatteryStatsImpl.resetBatteryHistoryOnNewSession(false);
        long initialStartTime = mBatteryStatsImpl.getHistory().getStartTime();
        resetOnUnplug_highBatteryLevel();
        assertThat(mBatteryStatsImpl.getHistory().getStartTime()).isEqualTo(initialStartTime);
    }

    @Test
    public void testResetOnUnplug_highBatteryLevel_resetHistory() {
        mBatteryStatsImpl.resetBatteryHistoryOnNewSession(true);
        resetOnUnplug_highBatteryLevel();
        assertThat(mBatteryStatsImpl.getHistory().getStartTime())
                .isEqualTo(mBatteryStatsImpl.getMonotonicStartTime());
    }

    private void resetOnUnplug_highBatteryLevel() {
        when(mConfig.shouldResetOnUnplugHighBatteryLevel()).thenReturn(true);

        long expectedResetTimeUs = 0;
@@ -151,6 +166,21 @@ public class BatteryStatsResetTest {

    @Test
    public void testResetOnUnplug_significantCharge() {
        mBatteryStatsImpl.resetBatteryHistoryOnNewSession(false);
        long initialStartTime = mBatteryStatsImpl.getHistory().getStartTime();
        resetOnUnplug_significantCharge();
        assertThat(mBatteryStatsImpl.getHistory().getStartTime()).isEqualTo(initialStartTime);
    }

    @Test
    public void testResetOnUnplug_significantCharge_resetHistory() {
        mBatteryStatsImpl.resetBatteryHistoryOnNewSession(true);
        resetOnUnplug_significantCharge();
        assertThat(mBatteryStatsImpl.getHistory().getStartTime())
                .isEqualTo(mBatteryStatsImpl.getMonotonicStartTime());
    }

    private void resetOnUnplug_significantCharge() {
        when(mConfig.shouldResetOnUnplugAfterSignificantCharge()).thenReturn(true);
        long expectedResetTimeUs = 0;