Loading core/java/com/android/internal/os/BatteryChargeCalculator.java +7 −2 Original line number Diff line number Diff line Loading @@ -63,10 +63,15 @@ public class BatteryChargeCalculator extends PowerCalculator { builder.setChargeTimeRemainingMs(chargeTimeRemainingMs / 1000); } long dischargeMah = batteryStats.getUahDischarge(BatteryStats.STATS_SINCE_CHARGED) / 1000; if (dischargeMah == 0) { dischargeMah = (long) ((dischargedPowerLowerBoundMah + dischargedPowerUpperBoundMah) / 2 + 0.5); } builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setConsumedPower( (dischargedPowerLowerBoundMah + dischargedPowerUpperBoundMah) / 2); .setConsumedPower(dischargeMah); } @Override Loading core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java +35 −3 Original line number Diff line number Diff line Loading @@ -35,11 +35,13 @@ public class BatteryChargeCalculatorTest { private static final double PRECISION = 0.00001; @Rule public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule() .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 1234.0); // Should be ignored public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule(); @Test public void testDischargeTotals() { // Nominal battery capacity should be ignored mStatsRule.setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 1234.0); final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, Loading @@ -56,7 +58,7 @@ public class BatteryChargeCalculatorTest { BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); assertThat(batteryUsageStats.getConsumedPower()) .isWithin(PRECISION).of(380.0); .isWithin(PRECISION).of(1200.0); // 3,600 - 2,400 assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10); assertThat(batteryUsageStats.getDischargedPowerRange().getLower()) .isWithin(PRECISION).of(360.0); Loading @@ -74,4 +76,34 @@ public class BatteryChargeCalculatorTest { assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(100_000); } @Test public void testDischargeTotals_chargeUahUnavailable() { mStatsRule.setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 4000.0); final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 90, 72, 3700, 0, 0, 0, 1_000_000, 1_000_000, 1_000_000); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 85, 72, 3700, 0, 0, 0, 1_500_000, 1_500_000, 1_500_000); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 80, 72, 3700, 0, 0, 0, 2_000_000, 2_000_000, 2_000_000); BatteryChargeCalculator calculator = new BatteryChargeCalculator(); BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); assertThat(batteryUsageStats.getConsumedPower()) .isWithin(PRECISION).of(380.0); // 9.5% of 4,000. assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10); assertThat(batteryUsageStats.getDischargedPowerRange().getLower()) .isWithin(PRECISION).of(360.0); // 9% of 4,000 assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()) .isWithin(PRECISION).of(400.0); // 10% of 4,000 assertThat(batteryUsageStats.getBatteryTimeRemainingMs()).isEqualTo(8_000_000); assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(-1); } } Loading
core/java/com/android/internal/os/BatteryChargeCalculator.java +7 −2 Original line number Diff line number Diff line Loading @@ -63,10 +63,15 @@ public class BatteryChargeCalculator extends PowerCalculator { builder.setChargeTimeRemainingMs(chargeTimeRemainingMs / 1000); } long dischargeMah = batteryStats.getUahDischarge(BatteryStats.STATS_SINCE_CHARGED) / 1000; if (dischargeMah == 0) { dischargeMah = (long) ((dischargedPowerLowerBoundMah + dischargedPowerUpperBoundMah) / 2 + 0.5); } builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setConsumedPower( (dischargedPowerLowerBoundMah + dischargedPowerUpperBoundMah) / 2); .setConsumedPower(dischargeMah); } @Override Loading
core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java +35 −3 Original line number Diff line number Diff line Loading @@ -35,11 +35,13 @@ public class BatteryChargeCalculatorTest { private static final double PRECISION = 0.00001; @Rule public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule() .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 1234.0); // Should be ignored public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule(); @Test public void testDischargeTotals() { // Nominal battery capacity should be ignored mStatsRule.setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 1234.0); final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, Loading @@ -56,7 +58,7 @@ public class BatteryChargeCalculatorTest { BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); assertThat(batteryUsageStats.getConsumedPower()) .isWithin(PRECISION).of(380.0); .isWithin(PRECISION).of(1200.0); // 3,600 - 2,400 assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10); assertThat(batteryUsageStats.getDischargedPowerRange().getLower()) .isWithin(PRECISION).of(360.0); Loading @@ -74,4 +76,34 @@ public class BatteryChargeCalculatorTest { assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(100_000); } @Test public void testDischargeTotals_chargeUahUnavailable() { mStatsRule.setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 4000.0); final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 90, 72, 3700, 0, 0, 0, 1_000_000, 1_000_000, 1_000_000); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 85, 72, 3700, 0, 0, 0, 1_500_000, 1_500_000, 1_500_000); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 80, 72, 3700, 0, 0, 0, 2_000_000, 2_000_000, 2_000_000); BatteryChargeCalculator calculator = new BatteryChargeCalculator(); BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); assertThat(batteryUsageStats.getConsumedPower()) .isWithin(PRECISION).of(380.0); // 9.5% of 4,000. assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10); assertThat(batteryUsageStats.getDischargedPowerRange().getLower()) .isWithin(PRECISION).of(360.0); // 9% of 4,000 assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()) .isWithin(PRECISION).of(400.0); // 10% of 4,000 assertThat(batteryUsageStats.getBatteryTimeRemainingMs()).isEqualTo(8_000_000); assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(-1); } }