diff options
| author | 2018-02-14 20:12:52 -0800 | |
|---|---|---|
| committer | 2018-02-15 14:07:50 -0800 | |
| commit | a54e54dceed9056d8dbad126450ac7063dedfe08 (patch) | |
| tree | 794266dff45ae33a284f48e7e672209fc4ec2720 | |
| parent | 37a9dab651d8910e563339e0b8d25ecf6b34a08a (diff) | |
fix ModemActivityInfo should be delta
Test: manual test
Change-Id: Icc45f05541bc90b64831572ed5f10733bc2207a4
Fix: 73388886
| -rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 63 |
1 files changed, 34 insertions, 29 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 99e5a1841493..58749641f13b 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -11220,6 +11220,25 @@ public class BatteryStatsImpl extends BatteryStats { private ModemActivityInfo mLastModemActivityInfo = new ModemActivityInfo(0, 0, 0, new int[0], 0, 0); + private ModemActivityInfo getDeltaModemActivityInfo(ModemActivityInfo activityInfo) { + if (activityInfo == null) { + return null; + } + int[] txTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS]; + for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) { + txTimeMs[i] = activityInfo.getTxTimeMillis()[i] + - mLastModemActivityInfo.getTxTimeMillis()[i]; + } + ModemActivityInfo deltaInfo = new ModemActivityInfo(activityInfo.getTimestamp(), + activityInfo.getSleepTimeMillis() - mLastModemActivityInfo.getSleepTimeMillis(), + activityInfo.getIdleTimeMillis() - mLastModemActivityInfo.getIdleTimeMillis(), + txTimeMs, + activityInfo.getRxTimeMillis() - mLastModemActivityInfo.getRxTimeMillis(), + activityInfo.getEnergyUsed() - mLastModemActivityInfo.getEnergyUsed()); + mLastModemActivityInfo = activityInfo; + return deltaInfo; + } + /** * Distribute Cell radio energy info and network traffic to apps. */ @@ -11227,9 +11246,10 @@ public class BatteryStatsImpl extends BatteryStats { if (DEBUG_ENERGY) { Slog.d(TAG, "Updating mobile radio stats with " + activityInfo); } + ModemActivityInfo deltaInfo = getDeltaModemActivityInfo(activityInfo); // Add modem tx power to history. - addModemTxPowerToHistory(activityInfo); + addModemTxPowerToHistory(deltaInfo); // Grab a separate lock to acquire the network stats, which may do I/O. NetworkStats delta = null; @@ -11243,22 +11263,6 @@ public class BatteryStatsImpl extends BatteryStats { } } - int rxTimeMs = 0; - int[] txTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS]; - int idleTimeMs = 0; - int sleepTimeMs = 0; - if (activityInfo != null) { - rxTimeMs = activityInfo.getRxTimeMillis() - mLastModemActivityInfo.getRxTimeMillis(); - for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) { - txTimeMs[i] = activityInfo.getTxTimeMillis()[i] - - mLastModemActivityInfo.getTxTimeMillis()[i]; - } - idleTimeMs = - activityInfo.getIdleTimeMillis() - mLastModemActivityInfo.getIdleTimeMillis(); - sleepTimeMs = - activityInfo.getSleepTimeMillis() - mLastModemActivityInfo.getSleepTimeMillis(); - } - synchronized (this) { if (!mOnBatteryInternal) { if (delta != null) { @@ -11267,14 +11271,14 @@ public class BatteryStatsImpl extends BatteryStats { return; } - if (activityInfo != null) { + if (deltaInfo != null) { mHasModemReporting = true; mModemActivity.getIdleTimeCounter().addCountLocked( - idleTimeMs); - mModemActivity.getRxTimeCounter().addCountLocked(rxTimeMs); + deltaInfo.getIdleTimeMillis()); + mModemActivity.getRxTimeCounter().addCountLocked(deltaInfo.getRxTimeMillis()); for (int lvl = 0; lvl < ModemActivityInfo.TX_POWER_LEVELS; lvl++) { mModemActivity.getTxTimeCounters()[lvl] - .addCountLocked(txTimeMs[lvl]); + .addCountLocked(deltaInfo.getTxTimeMillis()[lvl]); } // POWER_MODEM_CONTROLLER_OPERATING_VOLTAGE is measured in mV, so convert to V. @@ -11282,16 +11286,17 @@ public class BatteryStatsImpl extends BatteryStats { PowerProfile.POWER_MODEM_CONTROLLER_OPERATING_VOLTAGE) / 1000.0; if (opVolt != 0) { double energyUsed = - sleepTimeMs * + deltaInfo.getSleepTimeMillis() * mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_SLEEP) - + idleTimeMs * + + deltaInfo.getIdleTimeMillis() * mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_IDLE) - + rxTimeMs * + + deltaInfo.getRxTimeMillis() * mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_RX); + int[] txTimeMs = deltaInfo.getTxTimeMillis(); for (int i = 0; i < Math.min(txTimeMs.length, - SignalStrength.NUM_SIGNAL_STRENGTH_BINS); i++) { + SignalStrength.NUM_SIGNAL_STRENGTH_BINS); i++) { energyUsed += txTimeMs[i] * mPowerProfile.getAveragePower( - PowerProfile.POWER_MODEM_CONTROLLER_TX, i); + PowerProfile.POWER_MODEM_CONTROLLER_TX, i); } // We store the power drain as mAms. @@ -11367,11 +11372,11 @@ public class BatteryStatsImpl extends BatteryStats { radioTime -= appRadioTime; totalPackets -= appPackets; - if (activityInfo != null) { + if (deltaInfo != null) { ControllerActivityCounterImpl activityCounter = u.getOrCreateModemControllerActivityLocked(); if (totalRxPackets > 0 && entry.rxPackets > 0) { - final long rxMs = (entry.rxPackets * rxTimeMs) + final long rxMs = (entry.rxPackets * deltaInfo.getRxTimeMillis()) / totalRxPackets; activityCounter.getRxTimeCounter().addCountLocked(rxMs); } @@ -11379,7 +11384,7 @@ public class BatteryStatsImpl extends BatteryStats { if (totalTxPackets > 0 && entry.txPackets > 0) { for (int lvl = 0; lvl < ModemActivityInfo.TX_POWER_LEVELS; lvl++) { long txMs = - entry.txPackets * txTimeMs[lvl]; + entry.txPackets * deltaInfo.getTxTimeMillis()[lvl]; txMs /= totalTxPackets; activityCounter.getTxTimeCounters()[lvl].addCountLocked(txMs); } |