diff --git a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java index d0df45c9af657..525004a8b4158 100644 --- a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java +++ b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java @@ -111,9 +111,9 @@ public class MobileRadioPowerCalculator extends PowerCalculator { calculateApp(app, uid, total, query, keys); } - final long consumptionUC = batteryStats.getMobileRadioMeasuredBatteryConsumptionUC(); - final int powerModel = getPowerModel(consumptionUC, query); - calculateRemaining(total, powerModel, batteryStats, rawRealtimeUs, consumptionUC); + final long totalConsumptionUC = batteryStats.getMobileRadioMeasuredBatteryConsumptionUC(); + final int powerModel = getPowerModel(totalConsumptionUC, query); + calculateRemaining(total, powerModel, batteryStats, rawRealtimeUs, totalConsumptionUC); if (total.remainingPowerMah != 0 || total.totalAppPowerMah != 0) { builder.getAggregateBatteryConsumerBuilder( @@ -187,12 +187,13 @@ public class MobileRadioPowerCalculator extends PowerCalculator { private void calculateRemaining(PowerAndDuration total, @BatteryConsumer.PowerModel int powerModel, BatteryStats batteryStats, - long rawRealtimeUs, long consumptionUC) { + long rawRealtimeUs, long totalConsumptionUC) { long signalTimeMs = 0; double powerMah = 0; if (powerModel == BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) { - powerMah = uCtoMah(consumptionUC); + powerMah = uCtoMah(totalConsumptionUC) - total.totalAppPowerMah; + if (powerMah < 0) powerMah = 0; } for (int i = 0; i < NUM_SIGNAL_STRENGTH_LEVELS; i++) { diff --git a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java index 95225b2e4f396..00ac1985f897d 100644 --- a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java @@ -269,8 +269,9 @@ public class MobileRadioPowerCalculatorTest { .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer(); + // 10_000_000 micro-Coulomb * 1/1000 milli/micro * 1/3600 hour/second = 2.77778 mAh assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) - .isWithin(PRECISION).of(4.31711); + .isWithin(PRECISION).of(2.77778); assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);