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

Commit 42000356 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Make "high battery level" configurable for auto-reset of battery stats

Bug: 390509537
Test: PowerStatsTests
Flag: EXEMPT bug fix
Change-Id: Ic16d922ea23325b72acd077acb34804645bf7e6d
parent b4aa17da
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -24,6 +24,12 @@

    <!-- Whether to reset Battery Stats on unplug when the battery level is high. -->
    <bool name="config_batteryStatsResetOnUnplugHighBatteryLevel">true</bool>

    <!-- Battery level (as percent of battery) to consider as "high enough" to trigger
    a battery session reset.
    Only has an effect if config_batteryStatsResetOnUnplugHighBatteryLevel is true  -->
    <integer name="config_batteryStatsHighBatteryLevelAfterCharge">79</integer>

    <!-- Whether to reset Battery Stats on unplug if the battery was significantly charged -->
    <bool name="config_batteryStatsResetOnUnplugAfterSignificantCharge">true</bool>

+1 −0
Original line number Diff line number Diff line
@@ -5457,6 +5457,7 @@
  <java-symbol type="string" name="screen_not_shared_sensitive_content"/>

  <java-symbol type="bool" name="config_batteryStatsResetOnUnplugHighBatteryLevel" />
  <java-symbol type="integer" name="config_batteryStatsHighBatteryLevelAfterCharge" />
  <java-symbol type="bool" name="config_batteryStatsResetOnUnplugAfterSignificantCharge" />
  <java-symbol type="string" name="config_powerStatsThrottlePeriods" />
  <java-symbol type="integer" name="config_powerStatsAggregationPeriod" />
+3 −0
Original line number Diff line number Diff line
@@ -370,6 +370,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub

        final boolean resetOnUnplugHighBatteryLevel = context.getResources().getBoolean(
                com.android.internal.R.bool.config_batteryStatsResetOnUnplugHighBatteryLevel);
        final int highBatteryLevelAfterCharge = context.getResources().getInteger(
                com.android.internal.R.integer.config_batteryStatsHighBatteryLevelAfterCharge);
        final boolean resetOnUnplugAfterSignificantCharge = context.getResources().getBoolean(
                com.android.internal.R.bool.config_batteryStatsResetOnUnplugAfterSignificantCharge);
        final int batteryHistoryStorageSize = context.getResources().getInteger(
@@ -377,6 +379,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        BatteryStatsImpl.BatteryStatsConfig.Builder batteryStatsConfigBuilder =
                new BatteryStatsImpl.BatteryStatsConfig.Builder()
                        .setResetOnUnplugHighBatteryLevel(resetOnUnplugHighBatteryLevel)
                        .setHighBatteryLevelAfterCharge(highBatteryLevelAfterCharge)
                        .setResetOnUnplugAfterSignificantCharge(
                                resetOnUnplugAfterSignificantCharge)
                        .setMaxHistorySizeBytes(batteryHistoryStorageSize);
+22 −3
Original line number Diff line number Diff line
@@ -663,6 +663,7 @@ public class BatteryStatsImpl extends BatteryStats {
        private final Long mDefaultPowerStatsThrottlePeriod;
        private final Map<String, Long> mPowerStatsThrottlePeriods;
        private final int mMaxHistorySizeBytes;
        private final int mHighBatteryLevelAfterCharge;
        private BatteryStatsConfig(Builder builder) {
            int flags = 0;
@@ -676,6 +677,7 @@ public class BatteryStatsImpl extends BatteryStats {
            mDefaultPowerStatsThrottlePeriod = builder.mDefaultPowerStatsThrottlePeriod;
            mPowerStatsThrottlePeriods = builder.mPowerStatsThrottlePeriods;
            mMaxHistorySizeBytes = builder.mMaxHistorySizeBytes;
            mHighBatteryLevelAfterCharge = builder.mHighBatteryLevelAfterCharge;
        }
        /**
@@ -687,6 +689,13 @@ public class BatteryStatsImpl extends BatteryStats {
                    == RESET_ON_UNPLUG_HIGH_BATTERY_LEVEL_FLAG;
        }
        /** Returns battery level (as percent of battery) to consider as "high enough" to trigger
         *  a battery session reset.
         *  Only has an effect if {@link #shouldResetOnUnplugHighBatteryLevel} is true */
        public int getHighBatteryLevelAfterCharge() {
            return mHighBatteryLevelAfterCharge;
        }
        /**
         * Returns whether a BatteryStats reset should occur on unplug if the battery charge a
         * significant amount since it has been plugged in.
@@ -713,16 +722,19 @@ public class BatteryStatsImpl extends BatteryStats {
         * Builder for BatteryStatsConfig
         */
        public static class Builder {
            private boolean mResetOnUnplugHighBatteryLevel;
            private boolean mResetOnUnplugAfterSignificantCharge;
            private static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD =
                    TimeUnit.HOURS.toMillis(1);
            private static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD_CPU =
                    TimeUnit.MINUTES.toMillis(1);
            private static final int DEFAULT_MAX_HISTORY_SIZE = 4 * 1024 * 1024;
            private static final int DEFAULT_HIGH_BATTERY_LEVEL_AFTER_CHARGE = 90;
            private boolean mResetOnUnplugHighBatteryLevel;
            private boolean mResetOnUnplugAfterSignificantCharge;
            private long mDefaultPowerStatsThrottlePeriod = DEFAULT_POWER_STATS_THROTTLE_PERIOD;
            private final Map<String, Long> mPowerStatsThrottlePeriods = new HashMap<>();
            private int mMaxHistorySizeBytes = DEFAULT_MAX_HISTORY_SIZE;
            private int mHighBatteryLevelAfterCharge = DEFAULT_HIGH_BATTERY_LEVEL_AFTER_CHARGE;
            public Builder() {
                mResetOnUnplugHighBatteryLevel = true;
@@ -784,6 +796,13 @@ public class BatteryStatsImpl extends BatteryStats {
                mMaxHistorySizeBytes = maxHistorySizeBytes;
                return this;
            }
            /** Sets battery level (as percent of battery) to consider as "high enough" to
             * trigger a battery session reset.*/
            public Builder setHighBatteryLevelAfterCharge(int highBatteryLevelAfterCharge) {
                mHighBatteryLevelAfterCharge = highBatteryLevelAfterCharge;
                return this;
            }
        }
    }
@@ -13484,7 +13503,7 @@ public class BatteryStatsImpl extends BatteryStats {
        if (mBatteryStatsConfig.shouldResetOnUnplugHighBatteryLevel()) {
            // Allow resetting due to currently being at high battery level
            if (batteryStatus == BatteryManager.BATTERY_STATUS_FULL) return true;
            if (batteryLevel >= 90) return true;
            if (batteryLevel >= mBatteryStatsConfig.getHighBatteryLevelAfterCharge()) return true;
        }
        if (mBatteryStatsConfig.shouldResetOnUnplugAfterSignificantCharge()) {
            // Allow resetting after a significant charge (from a very low level to a now very
+3 −2
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ public class BatteryStatsResetTest {
    public void testResetOnUnplug_highBatteryLevel() {
        long initialStartTime = mBatteryStatsImpl.getHistory().getStartTime();
        when(mConfig.shouldResetOnUnplugHighBatteryLevel()).thenReturn(true);
        when(mConfig.getHighBatteryLevelAfterCharge()).thenReturn(94);

        long expectedResetTimeUs = 0;

@@ -117,9 +118,9 @@ public class BatteryStatsResetTest {
        dischargeToLevel(60);

        plugBattery(BatteryManager.BATTERY_PLUGGED_USB);
        chargeToLevel(80);
        chargeToLevel(93);
        unplugBattery();
        // Reset should not occur until battery level above 90.
        // Reset should not occur until battery level above getHighBatteryLevelAfterCharge.
        assertThat(mBatteryStatsImpl.getStatsStartRealtime()).isEqualTo(expectedResetTimeUs);

        plugBattery(BatteryManager.BATTERY_PLUGGED_USB);