summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java63
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 be94dbb53c69..4e515918a0cd 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -11240,6 +11240,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.
*/
@@ -11247,9 +11266,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;
@@ -11263,22 +11283,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) {
@@ -11287,14 +11291,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.
@@ -11302,16 +11306,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.
@@ -11387,11 +11392,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);
}
@@ -11399,7 +11404,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);
}