Report cumulative data for modem controller activity
Test: will add cts test
Change-Id: I0f9fad77cf9701294fd53b9bb01efeae90ca20ef
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index fd7caaa..705991f 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -3474,20 +3474,50 @@
}
}
+ private final ModemActivityInfo mLastModemActivityInfo =
+ new ModemActivityInfo(0, 0, 0, new int[0], 0, 0);
+
/**
* Responds to the ResultReceiver with the {@link android.telephony.ModemActivityInfo} object
* representing the state of the modem.
*
- * NOTE: This clears the modem state, so there should only every be one caller.
+ * NOTE: The underlying implementation clears the modem state, so there should only ever be one
+ * caller to it. Everyone should call this class to get cumulative data.
* @hide
*/
@Override
public void requestModemActivityInfo(ResultReceiver result) {
enforceModifyPermission();
-
- ModemActivityInfo info = (ModemActivityInfo) sendRequest(CMD_GET_MODEM_ACTIVITY_INFO, null);
+ ModemActivityInfo ret = null;
+ synchronized (mLastModemActivityInfo) {
+ ModemActivityInfo info = (ModemActivityInfo) sendRequest(CMD_GET_MODEM_ACTIVITY_INFO,
+ null);
+ if (info != null) {
+ int[] mergedTxTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS];
+ for (int i = 0; i < mergedTxTimeMs.length; i++) {
+ mergedTxTimeMs[i] =
+ info.getTxTimeMillis()[i] + mLastModemActivityInfo.getTxTimeMillis()[i];
+ }
+ mLastModemActivityInfo.setTimestamp(info.getTimestamp());
+ mLastModemActivityInfo.setSleepTimeMillis(
+ info.getSleepTimeMillis() + mLastModemActivityInfo.getSleepTimeMillis());
+ mLastModemActivityInfo.setIdleTimeMillis(
+ info.getIdleTimeMillis() + mLastModemActivityInfo.getIdleTimeMillis());
+ mLastModemActivityInfo.setTxTimeMillis(mergedTxTimeMs);
+ mLastModemActivityInfo.setRxTimeMillis(
+ info.getRxTimeMillis() + mLastModemActivityInfo.getRxTimeMillis());
+ mLastModemActivityInfo.setEnergyUsed(
+ info.getEnergyUsed() + mLastModemActivityInfo.getEnergyUsed());
+ }
+ ret = new ModemActivityInfo(mLastModemActivityInfo.getTimestamp(),
+ mLastModemActivityInfo.getSleepTimeMillis(),
+ mLastModemActivityInfo.getIdleTimeMillis(),
+ mLastModemActivityInfo.getTxTimeMillis(),
+ mLastModemActivityInfo.getRxTimeMillis(),
+ mLastModemActivityInfo.getEnergyUsed());
+ }
Bundle bundle = new Bundle();
- bundle.putParcelable(TelephonyManager.MODEM_ACTIVITY_RESULT_KEY, info);
+ bundle.putParcelable(TelephonyManager.MODEM_ACTIVITY_RESULT_KEY, ret);
result.send(0, bundle);
}