Loading core/res/res/values/config_battery_stats.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -5458,6 +5458,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" /> Loading services/core/java/com/android/server/am/BatteryStatsService.java +3 −0 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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); Loading services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +22 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -676,6 +677,7 @@ public class BatteryStatsImpl extends BatteryStats { mDefaultPowerStatsThrottlePeriod = builder.mDefaultPowerStatsThrottlePeriod; mPowerStatsThrottlePeriods = builder.mPowerStatsThrottlePeriods; mMaxHistorySizeBytes = builder.mMaxHistorySizeBytes; mHighBatteryLevelAfterCharge = builder.mHighBatteryLevelAfterCharge; } /** Loading @@ -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. Loading @@ -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; Loading Loading @@ -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; } } } Loading Loading @@ -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 services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading
core/res/res/values/config_battery_stats.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -5458,6 +5458,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" /> Loading
services/core/java/com/android/server/am/BatteryStatsService.java +3 −0 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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); Loading
services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +22 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -676,6 +677,7 @@ public class BatteryStatsImpl extends BatteryStats { mDefaultPowerStatsThrottlePeriod = builder.mDefaultPowerStatsThrottlePeriod; mPowerStatsThrottlePeriods = builder.mPowerStatsThrottlePeriods; mMaxHistorySizeBytes = builder.mMaxHistorySizeBytes; mHighBatteryLevelAfterCharge = builder.mHighBatteryLevelAfterCharge; } /** Loading @@ -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. Loading @@ -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; Loading Loading @@ -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; } } } Loading Loading @@ -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
services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading