diff options
| author | 2019-11-06 01:18:15 +0000 | |
|---|---|---|
| committer | 2019-11-06 01:18:15 +0000 | |
| commit | f1d3e7a815b8b5ecdae5665f354a88bcfd85e0af (patch) | |
| tree | 3258514f6d72f24253b193479f36e08d1150a49d | |
| parent | 472661aaec48c65babab4ec047dbfaf79d1f2672 (diff) | |
| parent | 8a5307c1978c5054d09e7ccd7d091ebea4dabd7c (diff) | |
Merge "[MainLine] CellularBatteryStats expose @System Api"
| -rw-r--r-- | api/system-current.txt | 21 | ||||
| -rw-r--r-- | core/java/android/os/BatteryStatsManager.java | 16 | ||||
| -rw-r--r-- | core/java/android/os/connectivity/CellularBatteryStats.java | 572 | ||||
| -rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 20 |
4 files changed, 396 insertions, 233 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 0f4cc51ab22c..213ea3125c69 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5241,6 +5241,7 @@ package android.os { } public class BatteryStatsManager { + method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.os.connectivity.CellularBatteryStats getCellularBatteryStats(); method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.os.connectivity.WifiBatteryStats getWifiBatteryStats(); method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void noteFullWifiLockAcquiredFromSource(@NonNull android.os.WorkSource); method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void noteFullWifiLockReleasedFromSource(@NonNull android.os.WorkSource); @@ -5748,6 +5749,26 @@ package android.os { package android.os.connectivity { + public final class CellularBatteryStats implements android.os.Parcelable { + method public int describeContents(); + method public long getEnergyConsumedMaMillis(); + method public long getIdleTimeMillis(); + method public long getKernelActiveTimeMillis(); + method public long getLoggingDurationMillis(); + method public long getMonitoredRailChargeConsumedMaMillis(); + method public long getNumBytesRx(); + method public long getNumBytesTx(); + method public long getNumPacketsRx(); + 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 public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.CellularBatteryStats> CREATOR; + } + public final class WifiBatteryStats implements android.os.Parcelable { method public int describeContents(); method public long getEnergyConsumedMaMillis(); diff --git a/core/java/android/os/BatteryStatsManager.java b/core/java/android/os/BatteryStatsManager.java index 367a868ddef4..e5650aea0522 100644 --- a/core/java/android/os/BatteryStatsManager.java +++ b/core/java/android/os/BatteryStatsManager.java @@ -23,6 +23,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.content.Context; +import android.os.connectivity.CellularBatteryStats; import android.os.connectivity.WifiBatteryStats; import com.android.internal.app.IBatteryStats; @@ -158,6 +159,21 @@ public class BatteryStatsManager { } /** + * Retrieves all the cellular related battery stats. + * + * @return Instance of {@link CellularBatteryStats}. + */ + @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) + public @NonNull CellularBatteryStats getCellularBatteryStats() { + try { + return mBatteryStats.getCellularBatteryStats(); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + return null; + } + } + + /** * Retrieves all the wifi related battery stats. * * @return Instance of {@link WifiBatteryStats}. diff --git a/core/java/android/os/connectivity/CellularBatteryStats.java b/core/java/android/os/connectivity/CellularBatteryStats.java index 2e0904048d40..caa406899161 100644 --- a/core/java/android/os/connectivity/CellularBatteryStats.java +++ b/core/java/android/os/connectivity/CellularBatteryStats.java @@ -15,241 +15,367 @@ */ package android.os.connectivity; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.BatteryStats; import android.os.Parcel; import android.os.Parcelable; - +import android.telephony.Annotation.NetworkType; import android.telephony.ModemActivityInfo; import android.telephony.SignalStrength; import java.util.Arrays; +import java.util.Objects; /** * API for Cellular power stats * * @hide */ +@SystemApi public final class CellularBatteryStats implements Parcelable { - private long mLoggingDurationMs; - private long mKernelActiveTimeMs; - private long mNumPacketsTx; - private long mNumBytesTx; - private long mNumPacketsRx; - private long mNumBytesRx; - private long mSleepTimeMs; - private long mIdleTimeMs; - private long mRxTimeMs; - private long mEnergyConsumedMaMs; - private long[] mTimeInRatMs; - private long[] mTimeInRxSignalStrengthLevelMs; - private long[] mTxTimeMs; - private long mMonitoredRailChargeConsumedMaMs; - - public static final @android.annotation.NonNull Parcelable.Creator<CellularBatteryStats> CREATOR = new - Parcelable.Creator<CellularBatteryStats>() { - public CellularBatteryStats createFromParcel(Parcel in) { - return new CellularBatteryStats(in); - } - - public CellularBatteryStats[] newArray(int size) { - return new CellularBatteryStats[size]; - } - }; - - public CellularBatteryStats() { - initialize(); - } - - public void writeToParcel(Parcel out, int flags) { - out.writeLong(mLoggingDurationMs); - out.writeLong(mKernelActiveTimeMs); - out.writeLong(mNumPacketsTx); - out.writeLong(mNumBytesTx); - out.writeLong(mNumPacketsRx); - out.writeLong(mNumBytesRx); - out.writeLong(mSleepTimeMs); - out.writeLong(mIdleTimeMs); - out.writeLong(mRxTimeMs); - out.writeLong(mEnergyConsumedMaMs); - out.writeLongArray(mTimeInRatMs); - out.writeLongArray(mTimeInRxSignalStrengthLevelMs); - out.writeLongArray(mTxTimeMs); - out.writeLong(mMonitoredRailChargeConsumedMaMs); - } - - public 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(); - } - - public long getLoggingDurationMs() { - return mLoggingDurationMs; - } - - public long getKernelActiveTimeMs() { - return mKernelActiveTimeMs; - } - - public long getNumPacketsTx() { - return mNumPacketsTx; - } - - public long getNumBytesTx() { - return mNumBytesTx; - } - - public long getNumPacketsRx() { - return mNumPacketsRx; - } - - public long getNumBytesRx() { - return mNumBytesRx; - } - - public long getSleepTimeMs() { - return mSleepTimeMs; - } - - public long getIdleTimeMs() { - return mIdleTimeMs; - } - - public long getRxTimeMs() { - return mRxTimeMs; - } - - public long getEnergyConsumedMaMs() { - return mEnergyConsumedMaMs; - } - - public long[] getTimeInRatMs() { - return mTimeInRatMs; - } - - public long[] getTimeInRxSignalStrengthLevelMs() { - return mTimeInRxSignalStrengthLevelMs; - } - - public long[] getTxTimeMs() { - return mTxTimeMs; - } - - public long getMonitoredRailChargeConsumedMaMs() { - return mMonitoredRailChargeConsumedMaMs; - } - - public void setLoggingDurationMs(long t) { - mLoggingDurationMs = t; - return; - } - - public void setKernelActiveTimeMs(long t) { - mKernelActiveTimeMs = t; - return; - } - - public void setNumPacketsTx(long n) { - mNumPacketsTx = n; - return; - } - - public void setNumBytesTx(long b) { - mNumBytesTx = b; - return; - } - - public void setNumPacketsRx(long n) { - mNumPacketsRx = n; - return; - } - - public void setNumBytesRx(long b) { - mNumBytesRx = b; - return; - } - - public void setSleepTimeMs(long t) { - mSleepTimeMs = t; - return; - } - - public void setIdleTimeMs(long t) { - mIdleTimeMs = t; - return; - } - - public void setRxTimeMs(long t) { - mRxTimeMs = t; - return; - } - - public void setEnergyConsumedMaMs(long e) { - mEnergyConsumedMaMs = e; - return; - } - - public void setTimeInRatMs(long[] t) { - mTimeInRatMs = Arrays.copyOfRange(t, 0, - Math.min(t.length, BatteryStats.NUM_DATA_CONNECTION_TYPES)); - return; - } - - public void setTimeInRxSignalStrengthLevelMs(long[] t) { - mTimeInRxSignalStrengthLevelMs = Arrays.copyOfRange(t, 0, - Math.min(t.length, SignalStrength.NUM_SIGNAL_STRENGTH_BINS)); - return; - } - - public void setTxTimeMs(long[] t) { - mTxTimeMs = Arrays.copyOfRange(t, 0, Math.min(t.length, ModemActivityInfo.TX_POWER_LEVELS)); - return; - } - - public void setMonitoredRailChargeConsumedMaMs(long monitoredRailEnergyConsumedMaMs) { - mMonitoredRailChargeConsumedMaMs = monitoredRailEnergyConsumedMaMs; - return; - } - - public int describeContents() { - return 0; - } - - private CellularBatteryStats(Parcel in) { - initialize(); - readFromParcel(in); - } - - private void initialize() { - mLoggingDurationMs = 0; - mKernelActiveTimeMs = 0; - mNumPacketsTx = 0; - mNumBytesTx = 0; - mNumPacketsRx = 0; - mNumBytesRx = 0; - mSleepTimeMs = 0; - mIdleTimeMs = 0; - mRxTimeMs = 0; - mEnergyConsumedMaMs = 0; - mTimeInRatMs = new long[BatteryStats.NUM_DATA_CONNECTION_TYPES]; - Arrays.fill(mTimeInRatMs, 0); - mTimeInRxSignalStrengthLevelMs = new long[SignalStrength.NUM_SIGNAL_STRENGTH_BINS]; - Arrays.fill(mTimeInRxSignalStrengthLevelMs, 0); - mTxTimeMs = new long[ModemActivityInfo.TX_POWER_LEVELS]; - Arrays.fill(mTxTimeMs, 0); - mMonitoredRailChargeConsumedMaMs = 0; - return; - } -}
\ No newline at end of file + 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[SignalStrength.NUM_SIGNAL_STRENGTH_BINS]; + private long[] mTxTimeMs = new long[ModemActivityInfo.TX_POWER_LEVELS]; + private long mMonitoredRailChargeConsumedMaMs = 0; + + public static final @NonNull Parcelable.Creator<CellularBatteryStats> CREATOR = + new Parcelable.Creator<CellularBatteryStats>() { + public CellularBatteryStats createFromParcel(Parcel in) { + return new CellularBatteryStats(in); + } + + public CellularBatteryStats[] newArray(int size) { + return new CellularBatteryStats[size]; + } + }; + + /** @hide **/ + public CellularBatteryStats() {} + + @Override + public void writeToParcel(@NonNull Parcel out, int flags) { + out.writeLong(mLoggingDurationMs); + out.writeLong(mKernelActiveTimeMs); + out.writeLong(mNumPacketsTx); + out.writeLong(mNumBytesTx); + out.writeLong(mNumPacketsRx); + out.writeLong(mNumBytesRx); + out.writeLong(mSleepTimeMs); + out.writeLong(mIdleTimeMs); + out.writeLong(mRxTimeMs); + out.writeLong(mEnergyConsumedMaMs); + out.writeLongArray(mTimeInRatMs); + out.writeLongArray(mTimeInRxSignalStrengthLevelMs); + out.writeLongArray(mTxTimeMs); + 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; + if (other == this) return true; + CellularBatteryStats otherStats = (CellularBatteryStats) other; + return this.mLoggingDurationMs == otherStats.mLoggingDurationMs + && this.mKernelActiveTimeMs == otherStats.mKernelActiveTimeMs + && this.mNumPacketsTx == otherStats.mNumPacketsTx + && this.mNumBytesTx == otherStats.mNumBytesTx + && this.mNumPacketsRx == otherStats.mNumPacketsRx + && this.mNumBytesRx == otherStats.mNumBytesRx + && this.mSleepTimeMs == otherStats.mSleepTimeMs + && this.mIdleTimeMs == otherStats.mIdleTimeMs + && this.mRxTimeMs == otherStats.mRxTimeMs + && this.mEnergyConsumedMaMs == otherStats.mEnergyConsumedMaMs + && Arrays.equals(this.mTimeInRatMs, otherStats.mTimeInRatMs) + && Arrays.equals(this.mTimeInRxSignalStrengthLevelMs, + otherStats.mTimeInRxSignalStrengthLevelMs) + && Arrays.equals(this.mTxTimeMs, otherStats.mTxTimeMs) + && this.mMonitoredRailChargeConsumedMaMs + == otherStats.mMonitoredRailChargeConsumedMaMs; + } + + @Override + public int hashCode() { + return Objects.hash(mLoggingDurationMs, mKernelActiveTimeMs, mNumPacketsTx, + mNumBytesTx, mNumPacketsRx, mNumBytesRx, mSleepTimeMs, mIdleTimeMs, + mRxTimeMs, mEnergyConsumedMaMs, Arrays.hashCode(mTimeInRatMs), + Arrays.hashCode(mTimeInRxSignalStrengthLevelMs), Arrays.hashCode(mTxTimeMs), + mMonitoredRailChargeConsumedMaMs); + } + + /** + * Returns the duration for which these cellular stats were collected. + * + * @return Duration of stats collection in milliseconds. + */ + public long getLoggingDurationMillis() { + return mLoggingDurationMs; + } + + /** + * Returns the duration for which the kernel was active within + * {@link #getLoggingDurationMillis()}. + * + * @return Duration of kernel active time in milliseconds. + */ + public long getKernelActiveTimeMillis() { + return mKernelActiveTimeMs; + } + + /** + * Returns the number of packets transmitted over cellular within + * {@link #getLoggingDurationMillis()}. + * + * @return Number of packets transmitted. + */ + public long getNumPacketsTx() { + return mNumPacketsTx; + } + + /** + * Returns the number of packets received over cellular within + * {@link #getLoggingDurationMillis()}. + * + * @return Number of packets received. + */ + public long getNumBytesTx() { + return mNumBytesTx; + } + + /** + * Returns the number of bytes transmitted over cellular within + * {@link #getLoggingDurationMillis()}. + * + * @return Number of bytes transmitted. + */ + public long getNumPacketsRx() { + return mNumPacketsRx; + } + + /** + * Returns the number of bytes received over cellular within + * {@link #getLoggingDurationMillis()}. + * + * @return Number of bytes received. + */ + public long getNumBytesRx() { + return mNumBytesRx; + } + + /** + * Returns the duration for which the device was sleeping within + * {@link #getLoggingDurationMillis()}. + * + * @return Duration of sleep time in milliseconds. + */ + public long getSleepTimeMillis() { + return mSleepTimeMs; + } + + /** + * Returns the duration for which the device was idle within + * {@link #getLoggingDurationMillis()}. + * + * @return Duration of idle time in milliseconds. + */ + public long getIdleTimeMillis() { + return mIdleTimeMs; + } + + /** + * Returns the duration for which the device was receiving over cellular within + * {@link #getLoggingDurationMillis()}. + * + * @return Duration of cellular reception time in milliseconds. + */ + public long getRxTimeMillis() { + return mRxTimeMs; + } + + /** + * Returns an estimation of energy consumed by cellular chip within + * {@link #getLoggingDurationMillis()}. + * + * @return Energy consumed in milli-ampere milliseconds (mAmS). + */ + public long getEnergyConsumedMaMillis() { + return mEnergyConsumedMaMs; + } + + /** + * 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}. + */ + @NonNull + public long[] getTimeInRatMicros() { + return mTimeInRatMs; + } + + /** + * 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 + * in microseconds. The index is signal strength bin. + */ + @NonNull + public long[] getTimeInRxSignalStrengthLevelMicros() { + return mTimeInRxSignalStrengthLevelMs; + } + + /** + * 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 + * <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> + * </ul> + */ + @NonNull + public long[] getTxTimeMillis() { + return mTxTimeMs; + } + + /** + * Returns the energy consumed by cellular chip within {@link #getLoggingDurationMillis()}. + * + * @return Energy consumed in milli-ampere milli-seconds (mAmS). + */ + public long getMonitoredRailChargeConsumedMaMillis() { + 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, SignalStrength.NUM_SIGNAL_STRENGTH_BINS)); + 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); + } +} diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index d6b32b58ce64..f5bfe5cfecaf 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -12618,20 +12618,20 @@ public class BatteryStatsImpl extends BatteryStats { txTimeMs[i] = counter.getTxTimeCounters()[i].getCountLocked(which); totalTxTimeMs += txTimeMs[i]; } - s.setLoggingDurationMs(computeBatteryRealtime(rawRealTime, which) / 1000); - s.setKernelActiveTimeMs(getMobileRadioActiveTime(rawRealTime, which) / 1000); + 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.setSleepTimeMs(sleepTimeMs); - s.setIdleTimeMs(idleTimeMs); - s.setRxTimeMs(rxTimeMs); - s.setEnergyConsumedMaMs(energyConsumedMaMs); - s.setTimeInRatMs(timeInRatMs); - s.setTimeInRxSignalStrengthLevelMs(timeInRxSignalStrengthLevelMs); - s.setTxTimeMs(txTimeMs); - s.setMonitoredRailChargeConsumedMaMs(monitoredRailChargeConsumedMaMs); + 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; } |