fix ModemActivityInfo should be delta
Test: manual test Change-Id: Icc45f05541bc90b64831572ed5f10733bc2207a4 Fix: 73388886
This commit is contained in:
committed by
Siddharth Ray
parent
37a9dab651
commit
a54e54dcee
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user