Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1d3e7a8 authored by SongFerng Wang's avatar SongFerng Wang Committed by Android (Google) Code Review
Browse files

Merge "[MainLine] CellularBatteryStats expose @System Api"

parents 472661aa 8a5307c1
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -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();
+16 −0
Original line number Diff line number Diff line
@@ -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;
@@ -157,6 +158,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.
     *
+349 −223
Original line number Diff line number Diff line
@@ -15,39 +15,45 @@
 */
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>() {
    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);
                }
@@ -57,11 +63,11 @@ public final class CellularBatteryStats implements Parcelable {
                }
            };

  public CellularBatteryStats() {
    initialize();
  }
    /** @hide **/
    public CellularBatteryStats() {}

  public void writeToParcel(Parcel out, int flags) {
    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        out.writeLong(mLoggingDurationMs);
        out.writeLong(mKernelActiveTimeMs);
        out.writeLong(mNumPacketsTx);
@@ -78,7 +84,7 @@ public final class CellularBatteryStats implements Parcelable {
        out.writeLong(mMonitoredRailChargeConsumedMaMs);
    }

  public void readFromParcel(Parcel in) {
    private void readFromParcel(Parcel in) {
        mLoggingDurationMs = in.readLong();
        mKernelActiveTimeMs = in.readLong();
        mNumPacketsTx = in.readLong();
@@ -95,161 +101,281 @@ public final class CellularBatteryStats implements Parcelable {
        mMonitoredRailChargeConsumedMaMs = in.readLong();
    }

  public long getLoggingDurationMs() {
    @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;
    }

  public long getKernelActiveTimeMs() {
    /**
     * 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;
    }

  public long getSleepTimeMs() {
    /**
     * Returns the duration for which the device was sleeping within
     * {@link #getLoggingDurationMillis()}.
     *
     * @return Duration of sleep time in milliseconds.
     */
    public long getSleepTimeMillis() {
        return mSleepTimeMs;
    }

  public long getIdleTimeMs() {
    /**
     * Returns the duration for which the device was idle within
     * {@link #getLoggingDurationMillis()}.
     *
     * @return Duration of idle time in milliseconds.
     */
    public long getIdleTimeMillis() {
        return mIdleTimeMs;
    }

  public long getRxTimeMs() {
    /**
     * 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;
    }

  public long getEnergyConsumedMaMs() {
    /**
     * 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;
    }

  public long[] getTimeInRatMs() {
    /**
     * 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;
    }

  public long[] getTimeInRxSignalStrengthLevelMs() {
    /**
     * 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;
    }

  public long[] getTxTimeMs() {
    /**
     * 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;
    }

  public long getMonitoredRailChargeConsumedMaMs() {
    /**
     * Returns the energy consumed by cellular chip within {@link #getLoggingDurationMillis()}.
     *
     * @return Energy consumed in milli-ampere milli-seconds (mAmS).
     */
    public long getMonitoredRailChargeConsumedMaMillis() {
        return mMonitoredRailChargeConsumedMaMs;
    }

  public void setLoggingDurationMs(long t) {
    /** @hide **/
    public void setLoggingDurationMillis(long t) {
        mLoggingDurationMs = t;
        return;
    }

  public void setKernelActiveTimeMs(long t) {
    /** @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;
    }

  public void setSleepTimeMs(long t) {
    /** @hide **/
    public void setSleepTimeMillis(long t) {
        mSleepTimeMs = t;
        return;
    }

  public void setIdleTimeMs(long t) {
    /** @hide **/
    public void setIdleTimeMillis(long t) {
        mIdleTimeMs = t;
        return;
    }

  public void setRxTimeMs(long t) {
    /** @hide **/
    public void setRxTimeMillis(long t) {
        mRxTimeMs = t;
        return;
    }

  public void setEnergyConsumedMaMs(long e) {
    /** @hide **/
    public void setEnergyConsumedMaMillis(long e) {
        mEnergyConsumedMaMs = e;
        return;
    }

  public void setTimeInRatMs(long[] t) {
    /** @hide **/
    public void setTimeInRatMicros(@NonNull long[] t) {
        mTimeInRatMs = Arrays.copyOfRange(t, 0,
                Math.min(t.length, BatteryStats.NUM_DATA_CONNECTION_TYPES));
        return;
    }

  public void setTimeInRxSignalStrengthLevelMs(long[] t) {
    /** @hide **/
    public void setTimeInRxSignalStrengthLevelMicros(@NonNull long[] t) {
        mTimeInRxSignalStrengthLevelMs = Arrays.copyOfRange(t, 0,
            Math.min(t.length, SignalStrength.NUM_SIGNAL_STRENGTH_BINS));
        return;
    }

  public void setTxTimeMs(long[] t) {
    /** @hide **/
    public void setTxTimeMillis(@NonNull long[] t) {
        mTxTimeMs = Arrays.copyOfRange(t, 0, Math.min(t.length, ModemActivityInfo.TX_POWER_LEVELS));
        return;
    }

  public void setMonitoredRailChargeConsumedMaMs(long monitoredRailEnergyConsumedMaMs) {
    /** @hide **/
    public void setMonitoredRailChargeConsumedMaMillis(long monitoredRailEnergyConsumedMaMs) {
        mMonitoredRailChargeConsumedMaMs = monitoredRailEnergyConsumedMaMs;
        return;
    }

    @Override
    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;
  }
}
+10 −10
Original line number Diff line number Diff line
@@ -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;
    }