Merge "CellularBatteryStats: Address API council feedback" into rvc-dev am: be50af2116 am: ae84ef6cc1 am: 681a49f45f
Change-Id: I62563ef0a7c9dc2383a299b4b65a7d63e3fa0cb9
This commit is contained in:
@@ -8859,9 +8859,9 @@ package android.os.connectivity {
|
||||
method public long getNumPacketsTx();
|
||||
method public long getRxTimeMillis();
|
||||
method public long getSleepTimeMillis();
|
||||
method @NonNull public long[] getTimeInRatMicros();
|
||||
method @NonNull public long[] getTimeInRxSignalStrengthLevelMicros();
|
||||
method @NonNull public long[] getTxTimeMillis();
|
||||
method @NonNull public long getTimeInRatMicros(int);
|
||||
method @NonNull public long getTimeInRxSignalStrengthLevelMicros(@IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) int);
|
||||
method @NonNull public long getTxTimeMillis(@IntRange(from=android.telephony.ModemActivityInfo.TX_POWER_LEVEL_0, to=android.telephony.ModemActivityInfo.TX_POWER_LEVEL_4) int);
|
||||
method public void writeToParcel(@NonNull android.os.Parcel, int);
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.CellularBatteryStats> CREATOR;
|
||||
}
|
||||
@@ -11178,6 +11178,11 @@ package android.telephony {
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
|
||||
field public static final int TX_POWER_LEVELS = 5; // 0x5
|
||||
field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
|
||||
field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
|
||||
field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
|
||||
field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
|
||||
field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
|
||||
}
|
||||
|
||||
public class ModemActivityInfo.TransmitPower {
|
||||
|
||||
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
package android.os.connectivity;
|
||||
|
||||
import android.annotation.IntRange;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.annotation.SystemApi;
|
||||
import android.os.BatteryStats;
|
||||
import android.os.Parcel;
|
||||
@@ -36,26 +38,44 @@ import java.util.Objects;
|
||||
@SystemApi
|
||||
public final class CellularBatteryStats implements Parcelable {
|
||||
|
||||
private long mLoggingDurationMs = 0;
|
||||
private long mKernelActiveTimeMs = 0;
|
||||
private long mNumPacketsTx = 0;
|
||||
private long mNumBytesTx = 0;
|
||||
private long mNumPacketsRx = 0;
|
||||
private long mNumBytesRx = 0;
|
||||
private long mSleepTimeMs = 0;
|
||||
private long mIdleTimeMs = 0;
|
||||
private long mRxTimeMs = 0;
|
||||
private long mEnergyConsumedMaMs = 0;
|
||||
private long[] mTimeInRatMs = new long[BatteryStats.NUM_DATA_CONNECTION_TYPES];
|
||||
private long[] mTimeInRxSignalStrengthLevelMs =
|
||||
new long[CellSignalStrength.getNumSignalStrengthLevels()];
|
||||
private long[] mTxTimeMs = new long[ModemActivityInfo.TX_POWER_LEVELS];
|
||||
private long mMonitoredRailChargeConsumedMaMs = 0;
|
||||
private final long mLoggingDurationMs;
|
||||
private final long mKernelActiveTimeMs;
|
||||
private final long mNumPacketsTx;
|
||||
private final long mNumBytesTx;
|
||||
private final long mNumPacketsRx;
|
||||
private final long mNumBytesRx;
|
||||
private final long mSleepTimeMs;
|
||||
private final long mIdleTimeMs;
|
||||
private final long mRxTimeMs;
|
||||
private final long mEnergyConsumedMaMs;
|
||||
private final long[] mTimeInRatMs;
|
||||
private final long[] mTimeInRxSignalStrengthLevelMs;
|
||||
private final long[] mTxTimeMs;
|
||||
private final long mMonitoredRailChargeConsumedMaMs;
|
||||
|
||||
public static final @NonNull Parcelable.Creator<CellularBatteryStats> CREATOR =
|
||||
new Parcelable.Creator<CellularBatteryStats>() {
|
||||
public CellularBatteryStats createFromParcel(Parcel in) {
|
||||
return new CellularBatteryStats(in);
|
||||
long loggingDurationMs = in.readLong();
|
||||
long kernelActiveTimeMs = in.readLong();
|
||||
long numPacketsTx = in.readLong();
|
||||
long numBytesTx = in.readLong();
|
||||
long numPacketsRx = in.readLong();
|
||||
long numBytesRx = in.readLong();
|
||||
long sleepTimeMs = in.readLong();
|
||||
long idleTimeMs = in.readLong();
|
||||
long rxTimeMs = in.readLong();
|
||||
long energyConsumedMaMs = in.readLong();
|
||||
long[] timeInRatMs = in.createLongArray();
|
||||
long[] timeInRxSignalStrengthLevelMs = in.createLongArray();
|
||||
long[] txTimeMs = in.createLongArray();
|
||||
long monitoredRailChargeConsumedMaMs = in.readLong();
|
||||
|
||||
return new CellularBatteryStats(loggingDurationMs, kernelActiveTimeMs,
|
||||
numPacketsTx, numBytesTx, numPacketsRx, numBytesRx, sleepTimeMs,
|
||||
idleTimeMs, rxTimeMs, energyConsumedMaMs, timeInRatMs,
|
||||
timeInRxSignalStrengthLevelMs, txTimeMs,
|
||||
monitoredRailChargeConsumedMaMs);
|
||||
}
|
||||
|
||||
public CellularBatteryStats[] newArray(int size) {
|
||||
@@ -64,7 +84,34 @@ public final class CellularBatteryStats implements Parcelable {
|
||||
};
|
||||
|
||||
/** @hide **/
|
||||
public CellularBatteryStats() {}
|
||||
public CellularBatteryStats(long loggingDurationMs, long kernelActiveTimeMs, long numPacketsTx,
|
||||
long numBytesTx, long numPacketsRx, long numBytesRx, long sleepTimeMs, long idleTimeMs,
|
||||
long rxTimeMs, Long energyConsumedMaMs, long[] timeInRatMs,
|
||||
long[] timeInRxSignalStrengthLevelMs, long[] txTimeMs,
|
||||
long monitoredRailChargeConsumedMaMs) {
|
||||
|
||||
mLoggingDurationMs = loggingDurationMs;
|
||||
mKernelActiveTimeMs = kernelActiveTimeMs;
|
||||
mNumPacketsTx = numPacketsTx;
|
||||
mNumBytesTx = numBytesTx;
|
||||
mNumPacketsRx = numPacketsRx;
|
||||
mNumBytesRx = numBytesRx;
|
||||
mSleepTimeMs = sleepTimeMs;
|
||||
mIdleTimeMs = idleTimeMs;
|
||||
mRxTimeMs = rxTimeMs;
|
||||
mEnergyConsumedMaMs = energyConsumedMaMs;
|
||||
mTimeInRatMs = Arrays.copyOfRange(
|
||||
timeInRatMs, 0,
|
||||
Math.min(timeInRatMs.length, BatteryStats.NUM_DATA_CONNECTION_TYPES));
|
||||
mTimeInRxSignalStrengthLevelMs = Arrays.copyOfRange(
|
||||
timeInRxSignalStrengthLevelMs, 0,
|
||||
Math.min(timeInRxSignalStrengthLevelMs.length,
|
||||
CellSignalStrength.getNumSignalStrengthLevels()));
|
||||
mTxTimeMs = Arrays.copyOfRange(
|
||||
txTimeMs, 0,
|
||||
Math.min(txTimeMs.length, ModemActivityInfo.TX_POWER_LEVELS));
|
||||
mMonitoredRailChargeConsumedMaMs = monitoredRailChargeConsumedMaMs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel out, int flags) {
|
||||
@@ -84,23 +131,6 @@ public final class CellularBatteryStats implements Parcelable {
|
||||
out.writeLong(mMonitoredRailChargeConsumedMaMs);
|
||||
}
|
||||
|
||||
private void readFromParcel(Parcel in) {
|
||||
mLoggingDurationMs = in.readLong();
|
||||
mKernelActiveTimeMs = in.readLong();
|
||||
mNumPacketsTx = in.readLong();
|
||||
mNumBytesTx = in.readLong();
|
||||
mNumPacketsRx = in.readLong();
|
||||
mNumBytesRx = in.readLong();
|
||||
mSleepTimeMs = in.readLong();
|
||||
mIdleTimeMs = in.readLong();
|
||||
mRxTimeMs = in.readLong();
|
||||
mEnergyConsumedMaMs = in.readLong();
|
||||
in.readLongArray(mTimeInRatMs);
|
||||
in.readLongArray(mTimeInRxSignalStrengthLevelMs);
|
||||
in.readLongArray(mTxTimeMs);
|
||||
mMonitoredRailChargeConsumedMaMs = in.readLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object other) {
|
||||
if (!(other instanceof CellularBatteryStats)) return false;
|
||||
@@ -118,10 +148,10 @@ public final class CellularBatteryStats implements Parcelable {
|
||||
&& this.mEnergyConsumedMaMs == otherStats.mEnergyConsumedMaMs
|
||||
&& Arrays.equals(this.mTimeInRatMs, otherStats.mTimeInRatMs)
|
||||
&& Arrays.equals(this.mTimeInRxSignalStrengthLevelMs,
|
||||
otherStats.mTimeInRxSignalStrengthLevelMs)
|
||||
otherStats.mTimeInRxSignalStrengthLevelMs)
|
||||
&& Arrays.equals(this.mTxTimeMs, otherStats.mTxTimeMs)
|
||||
&& this.mMonitoredRailChargeConsumedMaMs
|
||||
== otherStats.mMonitoredRailChargeConsumedMaMs;
|
||||
== otherStats.mMonitoredRailChargeConsumedMaMs;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -236,43 +266,65 @@ public final class CellularBatteryStats implements Parcelable {
|
||||
* Returns the time in microseconds that the phone has been running with
|
||||
* the given data connection.
|
||||
*
|
||||
* @return Amount of time phone spends in various Radio Access Technologies in microseconds.
|
||||
* The index is {@link NetworkType}.
|
||||
* @param networkType The network type to query.
|
||||
* @return The amount of time the phone spends in the {@code networkType} network type. The
|
||||
* unit is in microseconds.
|
||||
*/
|
||||
@NonNull
|
||||
public long[] getTimeInRatMicros() {
|
||||
return mTimeInRatMs;
|
||||
@SuppressLint("MethodNameUnits")
|
||||
public long getTimeInRatMicros(@NetworkType int networkType) {
|
||||
if (networkType >= mTimeInRatMs.length) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return mTimeInRatMs[networkType];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the time in microseconds that the phone has been running with
|
||||
* the given signal strength.
|
||||
*
|
||||
* @return Amount of time phone spends in various cellular rx signal strength levels
|
||||
* @param signalStrengthBin a single integer from 0 to 4 representing the general signal
|
||||
* quality.
|
||||
* @return Amount of time phone spends in specific cellular rx signal strength levels
|
||||
* in microseconds. The index is signal strength bin.
|
||||
*/
|
||||
@NonNull
|
||||
public long[] getTimeInRxSignalStrengthLevelMicros() {
|
||||
return mTimeInRxSignalStrengthLevelMs;
|
||||
@SuppressLint("MethodNameUnits")
|
||||
public long getTimeInRxSignalStrengthLevelMicros(
|
||||
@IntRange(from = CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
|
||||
to = CellSignalStrength.SIGNAL_STRENGTH_GREAT) int signalStrengthBin) {
|
||||
if (signalStrengthBin >= mTimeInRxSignalStrengthLevelMs.length) {
|
||||
return -1;
|
||||
}
|
||||
return mTimeInRxSignalStrengthLevelMs[signalStrengthBin];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the duration for which the device was transmitting over cellular within
|
||||
* {@link #getLoggingDurationMillis()}.
|
||||
*
|
||||
* @return Duration of cellular transmission time in milliseconds.
|
||||
* Tx(transmit) power index below
|
||||
* @param level a single integer from 0 to 4 representing the Tx(transmit) power level.
|
||||
* @return Duration of cellular transmission time for specific power level in milliseconds.
|
||||
*
|
||||
* Tx(transmit) power level. see power index @ModemActivityInfo.TxPowerLevel below
|
||||
* <ul>
|
||||
* <li> index 0 = tx_power < 0dBm. </li>
|
||||
* <li> index 1 = 0dBm < tx_power < 5dBm. </li>
|
||||
* <li> index 2 = 5dBm < tx_power < 15dBm. </li>
|
||||
* <li> index 3 = 15dBm < tx_power < 20dBm. </li>
|
||||
* <li> index 4 = tx_power > 20dBm. </li>
|
||||
* <li> index 0 = tx_power < 0dBm. </li>
|
||||
* <li> index 1 = 0dBm < tx_power < 5dBm. </li>
|
||||
* <li> index 2 = 5dBm < tx_power < 15dBm. </li>
|
||||
* <li> index 3 = 15dBm < tx_power < 20dBm. </li>
|
||||
* <li> index 4 = tx_power > 20dBm. </li>
|
||||
* </ul>
|
||||
*/
|
||||
@NonNull
|
||||
public long[] getTxTimeMillis() {
|
||||
return mTxTimeMs;
|
||||
public long getTxTimeMillis(
|
||||
@IntRange(from = ModemActivityInfo.TX_POWER_LEVEL_0,
|
||||
to = ModemActivityInfo.TX_POWER_LEVEL_4) int level) {
|
||||
if (level >= mTxTimeMs.length) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return mTxTimeMs[level];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -284,98 +336,8 @@ public final class CellularBatteryStats implements Parcelable {
|
||||
return mMonitoredRailChargeConsumedMaMs;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setLoggingDurationMillis(long t) {
|
||||
mLoggingDurationMs = t;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setKernelActiveTimeMillis(long t) {
|
||||
mKernelActiveTimeMs = t;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setNumPacketsTx(long n) {
|
||||
mNumPacketsTx = n;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setNumBytesTx(long b) {
|
||||
mNumBytesTx = b;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setNumPacketsRx(long n) {
|
||||
mNumPacketsRx = n;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setNumBytesRx(long b) {
|
||||
mNumBytesRx = b;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setSleepTimeMillis(long t) {
|
||||
mSleepTimeMs = t;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setIdleTimeMillis(long t) {
|
||||
mIdleTimeMs = t;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setRxTimeMillis(long t) {
|
||||
mRxTimeMs = t;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setEnergyConsumedMaMillis(long e) {
|
||||
mEnergyConsumedMaMs = e;
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setTimeInRatMicros(@NonNull long[] t) {
|
||||
mTimeInRatMs = Arrays.copyOfRange(t, 0,
|
||||
Math.min(t.length, BatteryStats.NUM_DATA_CONNECTION_TYPES));
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setTimeInRxSignalStrengthLevelMicros(@NonNull long[] t) {
|
||||
mTimeInRxSignalStrengthLevelMs = Arrays.copyOfRange(t, 0,
|
||||
Math.min(t.length, CellSignalStrength.getNumSignalStrengthLevels()));
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setTxTimeMillis(@NonNull long[] t) {
|
||||
mTxTimeMs = Arrays.copyOfRange(t, 0, Math.min(t.length, ModemActivityInfo.TX_POWER_LEVELS));
|
||||
return;
|
||||
}
|
||||
|
||||
/** @hide **/
|
||||
public void setMonitoredRailChargeConsumedMaMillis(long monitoredRailEnergyConsumedMaMs) {
|
||||
mMonitoredRailChargeConsumedMaMs = monitoredRailEnergyConsumedMaMs;
|
||||
return;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private CellularBatteryStats(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12598,7 +12598,6 @@ public class BatteryStatsImpl extends BatteryStats {
|
||||
|
||||
/*@hide */
|
||||
public CellularBatteryStats getCellularBatteryStats() {
|
||||
CellularBatteryStats s = new CellularBatteryStats();
|
||||
final int which = STATS_SINCE_CHARGED;
|
||||
final long rawRealTime = SystemClock.elapsedRealtime() * 1000;
|
||||
final ControllerActivityCounter counter = getModemControllerActivity();
|
||||
@@ -12625,21 +12624,16 @@ public class BatteryStatsImpl extends BatteryStats {
|
||||
txTimeMs[i] = counter.getTxTimeCounters()[i].getCountLocked(which);
|
||||
totalTxTimeMs += txTimeMs[i];
|
||||
}
|
||||
s.setLoggingDurationMillis(computeBatteryRealtime(rawRealTime, which) / 1000);
|
||||
s.setKernelActiveTimeMillis(getMobileRadioActiveTime(rawRealTime, which) / 1000);
|
||||
s.setNumPacketsTx(getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which));
|
||||
s.setNumBytesTx(getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which));
|
||||
s.setNumPacketsRx(getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which));
|
||||
s.setNumBytesRx(getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which));
|
||||
s.setSleepTimeMillis(sleepTimeMs);
|
||||
s.setIdleTimeMillis(idleTimeMs);
|
||||
s.setRxTimeMillis(rxTimeMs);
|
||||
s.setEnergyConsumedMaMillis(energyConsumedMaMs);
|
||||
s.setTimeInRatMicros(timeInRatMs);
|
||||
s.setTimeInRxSignalStrengthLevelMicros(timeInRxSignalStrengthLevelMs);
|
||||
s.setTxTimeMillis(txTimeMs);
|
||||
s.setMonitoredRailChargeConsumedMaMillis(monitoredRailChargeConsumedMaMs);
|
||||
return s;
|
||||
|
||||
return new CellularBatteryStats(computeBatteryRealtime(rawRealTime, which) / 1000,
|
||||
getMobileRadioActiveTime(rawRealTime, which) / 1000,
|
||||
getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which),
|
||||
getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which),
|
||||
getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which),
|
||||
getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which),
|
||||
sleepTimeMs, idleTimeMs, rxTimeMs, energyConsumedMaMs, timeInRatMs,
|
||||
timeInRxSignalStrengthLevelMs, txTimeMs,
|
||||
monitoredRailChargeConsumedMaMs);
|
||||
}
|
||||
|
||||
/*@hide */
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.telephony;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.SystemApi;
|
||||
import android.os.Parcel;
|
||||
@@ -23,6 +24,8 @@ import android.os.Parcelable;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Range;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -43,6 +46,38 @@ public final class ModemActivityInfo implements Parcelable {
|
||||
* </ul>
|
||||
*/
|
||||
public static final int TX_POWER_LEVELS = 5;
|
||||
/**
|
||||
* Tx(transmit) power level 0: tx_power < 0dBm
|
||||
*/
|
||||
public static final int TX_POWER_LEVEL_0 = 0;
|
||||
/**
|
||||
* Tx(transmit) power level 1: 0dBm < tx_power < 5dBm
|
||||
*/
|
||||
public static final int TX_POWER_LEVEL_1 = 1;
|
||||
/**
|
||||
* Tx(transmit) power level 2: 5dBm < tx_power < 15dBm
|
||||
*/
|
||||
public static final int TX_POWER_LEVEL_2 = 2;
|
||||
/**
|
||||
* Tx(transmit) power level 3: 15dBm < tx_power < 20dBm.
|
||||
*/
|
||||
public static final int TX_POWER_LEVEL_3 = 3;
|
||||
/**
|
||||
* Tx(transmit) power level 4: tx_power > 20dBm
|
||||
*/
|
||||
public static final int TX_POWER_LEVEL_4 = 4;
|
||||
|
||||
/** @hide */
|
||||
@IntDef(prefix = {"TX_POWER_LEVEL_"}, value = {
|
||||
TX_POWER_LEVEL_0,
|
||||
TX_POWER_LEVEL_1,
|
||||
TX_POWER_LEVEL_2,
|
||||
TX_POWER_LEVEL_3,
|
||||
TX_POWER_LEVEL_4,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface TxPowerLevel {}
|
||||
|
||||
private static final Range<Integer>[] TX_POWER_RANGES = new Range[] {
|
||||
new Range<>(Integer.MIN_VALUE, 0),
|
||||
new Range<>(0, 5),
|
||||
|
||||
Reference in New Issue
Block a user