Loading core/java/com/android/internal/os/BatteryStatsImpl.java +34 −29 Original line number Diff line number Diff line Loading @@ -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. */ Loading @@ -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; Loading @@ -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) { Loading @@ -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. Loading @@ -11302,12 +11306,13 @@ 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++) { energyUsed += txTimeMs[i] * mPowerProfile.getAveragePower( Loading Loading @@ -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); } Loading @@ -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); } Loading Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +34 −29 Original line number Diff line number Diff line Loading @@ -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. */ Loading @@ -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; Loading @@ -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) { Loading @@ -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. Loading @@ -11302,12 +11306,13 @@ 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++) { energyUsed += txTimeMs[i] * mPowerProfile.getAveragePower( Loading Loading @@ -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); } Loading @@ -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); } Loading