fix ModemActivityInfo should be delta

Test: manual test
Change-Id: Icc45f05541bc90b64831572ed5f10733bc2207a4
Fix: 73388886
This commit is contained in:
Chenjie Yu
2018-02-14 20:12:52 -08:00
committed by Siddharth Ray
parent 37a9dab651
commit a54e54dcee

View File

@@ -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);
}