Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit c892758

Browse files
Sarah ChinGerrit Code Review
Sarah Chin
authored and
Gerrit Code Review
committed
Merge "Update and expose ModemActivityInfo"
2 parents 733dd0f + f4fe3ac commit c892758

File tree

6 files changed

+241
-166
lines changed

6 files changed

+241
-166
lines changed

core/api/system-current.txt

+19
Original file line numberDiff line numberDiff line change
@@ -9671,6 +9671,25 @@ package android.telephony {
96719671
field public static final String MBMS_STREAMING_SERVICE_ACTION = "android.telephony.action.EmbmsStreaming";
96729672
}
96739673

9674+
public final class ModemActivityInfo implements android.os.Parcelable {
9675+
method public int describeContents();
9676+
method @NonNull public android.telephony.ModemActivityInfo getDelta(@NonNull android.telephony.ModemActivityInfo);
9677+
method public long getIdleTimeMillis();
9678+
method public static int getNumTxPowerLevels();
9679+
method public long getReceiveTimeMillis();
9680+
method public long getSleepTimeMillis();
9681+
method public long getTimestampMillis();
9682+
method public long getTransmitDurationMillisAtPowerLevel(int);
9683+
method @NonNull public android.util.Range<java.lang.Integer> getTransmitPowerRange(int);
9684+
method public void writeToParcel(@NonNull android.os.Parcel, int);
9685+
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
9686+
field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
9687+
field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
9688+
field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
9689+
field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
9690+
field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
9691+
}
9692+
96749693
public final class NetworkRegistrationInfo implements android.os.Parcelable {
96759694
method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo();
96769695
method public int getRegistrationState();

core/api/test-current.txt

+21
Original file line numberDiff line numberDiff line change
@@ -1649,6 +1649,27 @@ package android.telephony {
16491649
field public static final String MBMS_STREAMING_SERVICE_OVERRIDE_METADATA = "mbms-streaming-service-override";
16501650
}
16511651

1652+
public final class ModemActivityInfo implements android.os.Parcelable {
1653+
ctor public ModemActivityInfo(long, int, int, @NonNull int[], int);
1654+
method public int describeContents();
1655+
method @NonNull public android.telephony.ModemActivityInfo getDelta(@NonNull android.telephony.ModemActivityInfo);
1656+
method public long getIdleTimeMillis();
1657+
method public static int getNumTxPowerLevels();
1658+
method public long getReceiveTimeMillis();
1659+
method public long getSleepTimeMillis();
1660+
method public long getTimestampMillis();
1661+
method public long getTransmitDurationMillisAtPowerLevel(int);
1662+
method @NonNull public android.util.Range<java.lang.Integer> getTransmitPowerRange(int);
1663+
method public boolean isValid();
1664+
method public void writeToParcel(@NonNull android.os.Parcel, int);
1665+
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
1666+
field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
1667+
field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
1668+
field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
1669+
field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
1670+
field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
1671+
}
1672+
16521673
public class PhoneNumberUtils {
16531674
method public static int getMinMatchForTest();
16541675
method public static void setMinMatchForTest(int);

core/java/android/os/connectivity/CellularBatteryStats.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public CellularBatteryStats(long loggingDurationMs, long kernelActiveTimeMs, lon
109109
CellSignalStrength.getNumSignalStrengthLevels()));
110110
mTxTimeMs = Arrays.copyOfRange(
111111
txTimeMs, 0,
112-
Math.min(txTimeMs.length, ModemActivityInfo.TX_POWER_LEVELS));
112+
Math.min(txTimeMs.length, ModemActivityInfo.getNumTxPowerLevels()));
113113
mMonitoredRailChargeConsumedMaMs = monitoredRailChargeConsumedMaMs;
114114
}
115115

core/java/com/android/internal/os/BatteryStatsImpl.java

+23-46
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666
import android.telephony.CellSignalStrength;
6767
import android.telephony.DataConnectionRealTimeInfo;
6868
import android.telephony.ModemActivityInfo;
69-
import android.telephony.ModemActivityInfo.TransmitPower;
7069
import android.telephony.ServiceState;
7170
import android.telephony.SignalStrength;
7271
import android.telephony.TelephonyManager;
@@ -7205,7 +7204,7 @@ public ControllerActivityCounterImpl getOrCreateBluetoothControllerActivityLocke
72057204
public ControllerActivityCounterImpl getOrCreateModemControllerActivityLocked() {
72067205
if (mModemControllerActivity == null) {
72077206
mModemControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase,
7208-
ModemActivityInfo.TX_POWER_LEVELS);
7207+
ModemActivityInfo.getNumTxPowerLevels());
72097208
}
72107209
return mModemControllerActivity;
72117210
}
@@ -8687,7 +8686,7 @@ void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, Parcel
86878686

86888687
if (in.readInt() != 0) {
86898688
mModemControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase,
8690-
ModemActivityInfo.TX_POWER_LEVELS, in);
8689+
ModemActivityInfo.getNumTxPowerLevels(), in);
86918690
} else {
86928691
mModemControllerActivity = null;
86938692
}
@@ -9953,7 +9952,7 @@ private BatteryStatsImpl(Clocks clocks, File systemDir, Handler handler,
99539952
mBluetoothActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase,
99549953
NUM_BT_TX_LEVELS);
99559954
mModemActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase,
9956-
ModemActivityInfo.TX_POWER_LEVELS);
9955+
ModemActivityInfo.getNumTxPowerLevels());
99579956
mMobileRadioActiveTimer = new StopwatchTimer(mClocks, null, -400, null, mOnBatteryTimeBase);
99589957
mMobileRadioActivePerAppTimer = new StopwatchTimer(mClocks, null, -401, null,
99599958
mOnBatteryTimeBase);
@@ -11131,26 +11130,7 @@ public void updateWifiState(@Nullable final WifiActivityEnergyInfo info) {
1113111130
}
1113211131
}
1113311132

11134-
private ModemActivityInfo mLastModemActivityInfo =
11135-
new ModemActivityInfo(0, 0, 0, new int[0], 0);
11136-
11137-
private ModemActivityInfo getDeltaModemActivityInfo(ModemActivityInfo activityInfo) {
11138-
if (activityInfo == null) {
11139-
return null;
11140-
}
11141-
int[] txTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS];
11142-
for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) {
11143-
txTimeMs[i] = activityInfo.getTransmitPowerInfo().get(i).getTimeInMillis()
11144-
- mLastModemActivityInfo.getTransmitPowerInfo().get(i).getTimeInMillis();
11145-
}
11146-
ModemActivityInfo deltaInfo = new ModemActivityInfo(activityInfo.getTimestamp(),
11147-
activityInfo.getSleepTimeMillis() - mLastModemActivityInfo.getSleepTimeMillis(),
11148-
activityInfo.getIdleTimeMillis() - mLastModemActivityInfo.getIdleTimeMillis(),
11149-
txTimeMs,
11150-
activityInfo.getReceiveTimeMillis() - mLastModemActivityInfo.getReceiveTimeMillis());
11151-
mLastModemActivityInfo = activityInfo;
11152-
return deltaInfo;
11153-
}
11133+
private ModemActivityInfo mLastModemActivityInfo = null;
1115411134

1115511135
/**
1115611136
* Distribute Cell radio energy info and network traffic to apps.
@@ -11159,7 +11139,9 @@ public void updateMobileRadioState(@Nullable final ModemActivityInfo activityInf
1115911139
if (DEBUG_ENERGY) {
1116011140
Slog.d(TAG, "Updating mobile radio stats with " + activityInfo);
1116111141
}
11162-
ModemActivityInfo deltaInfo = getDeltaModemActivityInfo(activityInfo);
11142+
ModemActivityInfo deltaInfo = mLastModemActivityInfo == null ? activityInfo
11143+
: mLastModemActivityInfo.getDelta(activityInfo);
11144+
mLastModemActivityInfo = activityInfo;
1116311145

1116411146
// Add modem tx power to history.
1116511147
addModemTxPowerToHistory(deltaInfo);
@@ -11191,10 +11173,9 @@ public void updateMobileRadioState(@Nullable final ModemActivityInfo activityInf
1119111173
mModemActivity.getSleepTimeCounter().addCountLocked(
1119211174
deltaInfo.getSleepTimeMillis());
1119311175
mModemActivity.getRxTimeCounter().addCountLocked(deltaInfo.getReceiveTimeMillis());
11194-
for (int lvl = 0; lvl < ModemActivityInfo.TX_POWER_LEVELS; lvl++) {
11176+
for (int lvl = 0; lvl < ModemActivityInfo.getNumTxPowerLevels(); lvl++) {
1119511177
mModemActivity.getTxTimeCounters()[lvl]
11196-
.addCountLocked(deltaInfo.getTransmitPowerInfo()
11197-
.get(lvl).getTimeInMillis());
11178+
.addCountLocked(deltaInfo.getTransmitDurationMillisAtPowerLevel(lvl));
1119811179
}
1119911180

1120011181
// POWER_MODEM_CONTROLLER_OPERATING_VOLTAGE is measured in mV, so convert to V.
@@ -11208,11 +11189,11 @@ public void updateMobileRadioState(@Nullable final ModemActivityInfo activityInf
1120811189
mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_IDLE)
1120911190
+ deltaInfo.getReceiveTimeMillis() *
1121011191
mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_RX);
11211-
List<TransmitPower> txPowerInfo = deltaInfo.getTransmitPowerInfo();
11212-
for (int i = 0; i < Math.min(txPowerInfo.size(),
11192+
for (int i = 0; i < Math.min(ModemActivityInfo.getNumTxPowerLevels(),
1121311193
CellSignalStrength.getNumSignalStrengthLevels()); i++) {
11214-
energyUsed += txPowerInfo.get(i).getTimeInMillis() * mPowerProfile
11215-
.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_TX, i);
11194+
energyUsed += deltaInfo.getTransmitDurationMillisAtPowerLevel(i)
11195+
* mPowerProfile.getAveragePower(
11196+
PowerProfile.POWER_MODEM_CONTROLLER_TX, i);
1121611197
}
1121711198

1121811199
// We store the power drain as mAms.
@@ -11307,10 +11288,10 @@ public void updateMobileRadioState(@Nullable final ModemActivityInfo activityInf
1130711288
}
1130811289

1130911290
if (totalTxPackets > 0 && entry.txPackets > 0) {
11310-
for (int lvl = 0; lvl < ModemActivityInfo.TX_POWER_LEVELS; lvl++) {
11311-
long txMs =
11312-
entry.txPackets * deltaInfo.getTransmitPowerInfo()
11313-
.get(lvl).getTimeInMillis();
11291+
for (int lvl = 0; lvl < ModemActivityInfo.getNumTxPowerLevels();
11292+
lvl++) {
11293+
long txMs = entry.txPackets
11294+
* deltaInfo.getTransmitDurationMillisAtPowerLevel(lvl);
1131411295
txMs /= totalTxPackets;
1131511296
activityCounter.getTxTimeCounters()[lvl].addCountLocked(txMs);
1131611297
}
@@ -11341,20 +11322,16 @@ private synchronized void addModemTxPowerToHistory(final ModemActivityInfo activ
1134111322
if (activityInfo == null) {
1134211323
return;
1134311324
}
11344-
List<TransmitPower> txPowerInfo = activityInfo.getTransmitPowerInfo();
11345-
if (txPowerInfo == null || txPowerInfo.size() != ModemActivityInfo.TX_POWER_LEVELS) {
11346-
return;
11347-
}
1134811325
final long elapsedRealtime = mClocks.elapsedRealtime();
1134911326
final long uptime = mClocks.uptimeMillis();
1135011327
int levelMaxTimeSpent = 0;
11351-
for (int i = 1; i < txPowerInfo.size(); i++) {
11352-
if (txPowerInfo.get(i).getTimeInMillis() > txPowerInfo.get(levelMaxTimeSpent)
11353-
.getTimeInMillis()) {
11328+
for (int i = 1; i < ModemActivityInfo.getNumTxPowerLevels(); i++) {
11329+
if (activityInfo.getTransmitDurationMillisAtPowerLevel(i)
11330+
> activityInfo.getTransmitDurationMillisAtPowerLevel(levelMaxTimeSpent)) {
1135411331
levelMaxTimeSpent = i;
1135511332
}
1135611333
}
11357-
if (levelMaxTimeSpent == ModemActivityInfo.TX_POWER_LEVELS - 1) {
11334+
if (levelMaxTimeSpent == ModemActivityInfo.getNumTxPowerLevels() - 1) {
1135811335
mHistoryCur.states2 |= HistoryItem.STATE2_CELLULAR_HIGH_TX_POWER_FLAG;
1135911336
addHistoryRecordLocked(elapsedRealtime, uptime);
1136011337
}
@@ -12771,7 +12748,7 @@ public CellularBatteryStats getCellularBatteryStats() {
1277112748
timeInRxSignalStrengthLevelMs[i]
1277212749
= getPhoneSignalStrengthTime(i, rawRealTime, which) / 1000;
1277312750
}
12774-
long[] txTimeMs = new long[Math.min(ModemActivityInfo.TX_POWER_LEVELS,
12751+
long[] txTimeMs = new long[Math.min(ModemActivityInfo.getNumTxPowerLevels(),
1277512752
counter.getTxTimeCounters().length)];
1277612753
long totalTxTimeMs = 0;
1277712754
for (int i = 0; i < txTimeMs.length; i++) {
@@ -14817,7 +14794,7 @@ void readFromParcelLocked(Parcel in) {
1481714794
mBluetoothActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase,
1481814795
NUM_BT_TX_LEVELS, in);
1481914796
mModemActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase,
14820-
ModemActivityInfo.TX_POWER_LEVELS, in);
14797+
ModemActivityInfo.getNumTxPowerLevels(), in);
1482114798
mHasWifiReporting = in.readInt() != 0;
1482214799
mHasBluetoothReporting = in.readInt() != 0;
1482314800
mHasModemReporting = in.readInt() != 0;

services/core/java/com/android/server/stats/pull/StatsPullAtomService.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -1739,14 +1739,14 @@ int pullModemActivityInfoLocked(int atomTag, List<StatsEvent> pulledData) {
17391739
}
17401740
StatsEvent e = StatsEvent.newBuilder()
17411741
.setAtomId(atomTag)
1742-
.writeLong(modemInfo.getTimestamp())
1742+
.writeLong(modemInfo.getTimestampMillis())
17431743
.writeLong(modemInfo.getSleepTimeMillis())
17441744
.writeLong(modemInfo.getIdleTimeMillis())
1745-
.writeLong(modemInfo.getTransmitPowerInfo().get(0).getTimeInMillis())
1746-
.writeLong(modemInfo.getTransmitPowerInfo().get(1).getTimeInMillis())
1747-
.writeLong(modemInfo.getTransmitPowerInfo().get(2).getTimeInMillis())
1748-
.writeLong(modemInfo.getTransmitPowerInfo().get(3).getTimeInMillis())
1749-
.writeLong(modemInfo.getTransmitPowerInfo().get(4).getTimeInMillis())
1745+
.writeLong(modemInfo.getTransmitDurationMillisAtPowerLevel(0))
1746+
.writeLong(modemInfo.getTransmitDurationMillisAtPowerLevel(1))
1747+
.writeLong(modemInfo.getTransmitDurationMillisAtPowerLevel(2))
1748+
.writeLong(modemInfo.getTransmitDurationMillisAtPowerLevel(3))
1749+
.writeLong(modemInfo.getTransmitDurationMillisAtPowerLevel(4))
17501750
.writeLong(modemInfo.getReceiveTimeMillis())
17511751
.build();
17521752
pulledData.add(e);

0 commit comments

Comments
 (0)