diff options
| author | 2018-05-23 14:39:24 -0700 | |
|---|---|---|
| committer | 2018-05-24 00:45:02 +0000 | |
| commit | 39b29bc2303c2bb346cba705c8903062af3ff031 (patch) | |
| tree | 1d7f690b448a4ea55f4fe32a322e1e99986b6a79 | |
| parent | 57f6932f29bfed9d42743c1a99a47779184dc7c5 (diff) | |
Calculate cellular radio value from modem.controller values.
Recently cellular radio related values {"radio.active", "radio.scanning",
"radio.on"} are removed from power_profile.xml, which causes inaccurate
radio power usage. We use following formula to calculate radio
values from modem.controller values.
radio.active = average of modem.controller.rx and modem.controller.tx values
radio.scanning = 0 (since this is already included in radio.on bin 0)
<array name="radio.on"> <!-- Strength 0 to BINS-1 -->
<value>modem.controller.idle * 25 / 180 </value> <!-- none -->
<value>max(1, modem.controller.idle/256) </value> <!-- poor -->
<value>max(1, modem.controller.idle/256) </value> <!-- moderate -->
<value>max(1, modem.controller.idle/256) </value> <!-- good -->
<value>max(1, modem.controller.idle/256) </value> <!-- great -->
</array>
Bug: 79379255
Test: use debugger to observe correct mPowerRadioOn, mPowerBins,
mPowerScan are calculated. "adb shell dumpsys batterystats", looking for
"radio=" in "Estimated power use" section.
Change-Id: Ic65a5c8a35a5b1f4ba05ddc150e29b00bc62689f
| -rw-r--r-- | core/java/com/android/internal/os/MobileRadioPowerCalculator.java | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java index 8586d76a75ee..9e8f06d994f0 100644 --- a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java +++ b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java @@ -50,11 +50,33 @@ public class MobileRadioPowerCalculator extends PowerCalculator { } public MobileRadioPowerCalculator(PowerProfile profile, BatteryStats stats) { - mPowerRadioOn = profile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE); - for (int i = 0; i < mPowerBins.length; i++) { - mPowerBins[i] = profile.getAveragePower(PowerProfile.POWER_RADIO_ON, i); + double temp = + profile.getAveragePowerOrDefault(PowerProfile.POWER_RADIO_ACTIVE, -1); + if (temp != -1) { + mPowerRadioOn = temp; + } else { + double sum = 0; + sum += profile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_RX); + for (int i = 0; i < mPowerBins.length; i++) { + sum += profile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_TX, i); + } + mPowerRadioOn = sum / (mPowerBins.length + 1); } - mPowerScan = profile.getAveragePower(PowerProfile.POWER_RADIO_SCANNING); + + temp = profile.getAveragePowerOrDefault(PowerProfile.POWER_RADIO_ON, -1); + if (temp != -1 ) { + for (int i = 0; i < mPowerBins.length; i++) { + mPowerBins[i] = profile.getAveragePower(PowerProfile.POWER_RADIO_ON, i); + } + } else { + double idle = profile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_IDLE); + mPowerBins[0] = idle * 25 / 180; + for (int i = 1; i < mPowerBins.length; i++) { + mPowerBins[i] = Math.max(1, idle / 256); + } + } + + mPowerScan = profile.getAveragePowerOrDefault(PowerProfile.POWER_RADIO_SCANNING, 0); mStats = stats; } |