summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hui Yu <huiyu@google.com> 2018-05-23 14:39:24 -0700
committer Hui Yu <huiyu@google.com> 2018-05-24 00:45:02 +0000
commit39b29bc2303c2bb346cba705c8903062af3ff031 (patch)
tree1d7f690b448a4ea55f4fe32a322e1e99986b6a79
parent57f6932f29bfed9d42743c1a99a47779184dc7c5 (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.java30
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;
}