| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package android.os.connectivity; |
| |
| import static android.os.BatteryStats.NUM_WIFI_SIGNAL_STRENGTH_BINS; |
| import static android.os.BatteryStatsManager.NUM_WIFI_STATES; |
| import static android.os.BatteryStatsManager.NUM_WIFI_SUPPL_STATES; |
| |
| import android.annotation.NonNull; |
| import android.annotation.Nullable; |
| import android.annotation.SystemApi; |
| import android.os.Parcel; |
| import android.os.Parcelable; |
| |
| import java.util.Arrays; |
| import java.util.Objects; |
| |
| /** |
| * Class for holding Wifi related battery stats |
| * |
| * @hide |
| */ |
| @SystemApi |
| public final class WifiBatteryStats implements Parcelable { |
| private final long mLoggingDurationMillis; |
| private final long mKernelActiveTimeMillis; |
| private final long mNumPacketsTx; |
| private final long mNumBytesTx; |
| private final long mNumPacketsRx; |
| private final long mNumBytesRx; |
| private final long mSleepTimeMillis; |
| private final long mScanTimeMillis; |
| private final long mIdleTimeMillis; |
| private final long mRxTimeMillis; |
| private final long mTxTimeMillis; |
| private final long mEnergyConsumedMaMillis; |
| private final long mAppScanRequestCount; |
| private final long[] mTimeInStateMillis; |
| private final long[] mTimeInSupplicantStateMillis; |
| private final long[] mTimeInRxSignalStrengthLevelMillis; |
| private final long mMonitoredRailChargeConsumedMaMillis; |
| |
| public static final @NonNull Parcelable.Creator<WifiBatteryStats> CREATOR = |
| new Parcelable.Creator<WifiBatteryStats>() { |
| public WifiBatteryStats createFromParcel(Parcel in) { |
| long loggingDurationMillis = in.readLong(); |
| long kernelActiveTimeMillis = in.readLong(); |
| long numPacketsTx = in.readLong(); |
| long numBytesTx = in.readLong(); |
| long numPacketsRx = in.readLong(); |
| long numBytesRx = in.readLong(); |
| long sleepTimeMillis = in.readLong(); |
| long scanTimeMillis = in.readLong(); |
| long idleTimeMillis = in.readLong(); |
| long rxTimeMillis = in.readLong(); |
| long txTimeMillis = in.readLong(); |
| long energyConsumedMaMillis = in.readLong(); |
| long appScanRequestCount = in.readLong(); |
| long[] timeInStateMillis = in.createLongArray(); |
| long[] timeInRxSignalStrengthLevelMillis = in.createLongArray(); |
| long[] timeInSupplicantStateMillis = in.createLongArray(); |
| long monitoredRailChargeConsumedMaMillis = in.readLong(); |
| return new WifiBatteryStats(loggingDurationMillis, kernelActiveTimeMillis, |
| numPacketsTx, numBytesTx, numPacketsRx, numBytesRx, sleepTimeMillis, |
| scanTimeMillis, idleTimeMillis, rxTimeMillis, txTimeMillis, |
| energyConsumedMaMillis, appScanRequestCount, timeInStateMillis, |
| timeInRxSignalStrengthLevelMillis, timeInSupplicantStateMillis, |
| monitoredRailChargeConsumedMaMillis); |
| } |
| |
| public WifiBatteryStats[] newArray(int size) { |
| return new WifiBatteryStats[size]; |
| } |
| }; |
| |
| @Override |
| public int describeContents() { |
| return 0; |
| } |
| |
| @Override |
| public void writeToParcel(@NonNull Parcel out, int flags) { |
| out.writeLong(mLoggingDurationMillis); |
| out.writeLong(mKernelActiveTimeMillis); |
| out.writeLong(mNumPacketsTx); |
| out.writeLong(mNumBytesTx); |
| out.writeLong(mNumPacketsRx); |
| out.writeLong(mNumBytesRx); |
| out.writeLong(mSleepTimeMillis); |
| out.writeLong(mScanTimeMillis); |
| out.writeLong(mIdleTimeMillis); |
| out.writeLong(mRxTimeMillis); |
| out.writeLong(mTxTimeMillis); |
| out.writeLong(mEnergyConsumedMaMillis); |
| out.writeLong(mAppScanRequestCount); |
| out.writeLongArray(mTimeInStateMillis); |
| out.writeLongArray(mTimeInRxSignalStrengthLevelMillis); |
| out.writeLongArray(mTimeInSupplicantStateMillis); |
| out.writeLong(mMonitoredRailChargeConsumedMaMillis); |
| } |
| |
| @Override |
| public boolean equals(@Nullable Object other) { |
| if (!(other instanceof WifiBatteryStats)) return false; |
| if (other == this) return true; |
| WifiBatteryStats otherStats = (WifiBatteryStats) other; |
| return this.mLoggingDurationMillis == otherStats.mLoggingDurationMillis |
| && this.mKernelActiveTimeMillis == otherStats.mKernelActiveTimeMillis |
| && this.mNumPacketsTx == otherStats.mNumPacketsTx |
| && this.mNumBytesTx == otherStats.mNumBytesTx |
| && this.mNumPacketsRx == otherStats.mNumPacketsRx |
| && this.mNumBytesRx == otherStats.mNumBytesRx |
| && this.mSleepTimeMillis == otherStats.mSleepTimeMillis |
| && this.mScanTimeMillis == otherStats.mScanTimeMillis |
| && this.mIdleTimeMillis == otherStats.mIdleTimeMillis |
| && this.mRxTimeMillis == otherStats.mRxTimeMillis |
| && this.mTxTimeMillis == otherStats.mTxTimeMillis |
| && this.mEnergyConsumedMaMillis == otherStats.mEnergyConsumedMaMillis |
| && this.mAppScanRequestCount == otherStats.mAppScanRequestCount |
| && Arrays.equals(this.mTimeInStateMillis, otherStats.mTimeInStateMillis) |
| && Arrays.equals(this.mTimeInSupplicantStateMillis, |
| otherStats.mTimeInSupplicantStateMillis) |
| && Arrays.equals(this.mTimeInRxSignalStrengthLevelMillis, |
| otherStats.mTimeInRxSignalStrengthLevelMillis) |
| && this.mMonitoredRailChargeConsumedMaMillis |
| == otherStats.mMonitoredRailChargeConsumedMaMillis; |
| } |
| |
| @Override |
| public int hashCode() { |
| return Objects.hash(mLoggingDurationMillis, mKernelActiveTimeMillis, mNumPacketsTx, |
| mNumBytesTx, mNumPacketsRx, mNumBytesRx, mSleepTimeMillis, mScanTimeMillis, |
| mIdleTimeMillis, mRxTimeMillis, mTxTimeMillis, mEnergyConsumedMaMillis, |
| mAppScanRequestCount, Arrays.hashCode(mTimeInStateMillis), |
| Arrays.hashCode(mTimeInSupplicantStateMillis), |
| Arrays.hashCode(mTimeInRxSignalStrengthLevelMillis), |
| mMonitoredRailChargeConsumedMaMillis); |
| } |
| |
| /** @hide **/ |
| public WifiBatteryStats(long loggingDurationMillis, long kernelActiveTimeMillis, |
| long numPacketsTx, long numBytesTx, long numPacketsRx, long numBytesRx, |
| long sleepTimeMillis, long scanTimeMillis, long idleTimeMillis, long rxTimeMillis, |
| long txTimeMillis, long energyConsumedMaMillis, long appScanRequestCount, |
| @NonNull long[] timeInStateMillis, @NonNull long [] timeInRxSignalStrengthLevelMillis, |
| @NonNull long[] timeInSupplicantStateMillis, long monitoredRailChargeConsumedMaMillis) { |
| mLoggingDurationMillis = loggingDurationMillis; |
| mKernelActiveTimeMillis = kernelActiveTimeMillis; |
| mNumPacketsTx = numPacketsTx; |
| mNumBytesTx = numBytesTx; |
| mNumPacketsRx = numPacketsRx; |
| mNumBytesRx = numBytesRx; |
| mSleepTimeMillis = sleepTimeMillis; |
| mScanTimeMillis = scanTimeMillis; |
| mIdleTimeMillis = idleTimeMillis; |
| mRxTimeMillis = rxTimeMillis; |
| mTxTimeMillis = txTimeMillis; |
| mEnergyConsumedMaMillis = energyConsumedMaMillis; |
| mAppScanRequestCount = appScanRequestCount; |
| mTimeInStateMillis = Arrays.copyOfRange( |
| timeInStateMillis, 0, |
| Math.min(timeInStateMillis.length, NUM_WIFI_STATES)); |
| mTimeInRxSignalStrengthLevelMillis = Arrays.copyOfRange( |
| timeInRxSignalStrengthLevelMillis, 0, |
| Math.min(timeInRxSignalStrengthLevelMillis.length, NUM_WIFI_SIGNAL_STRENGTH_BINS)); |
| mTimeInSupplicantStateMillis = Arrays.copyOfRange( |
| timeInSupplicantStateMillis, 0, |
| Math.min(timeInSupplicantStateMillis.length, NUM_WIFI_SUPPL_STATES)); |
| mMonitoredRailChargeConsumedMaMillis = monitoredRailChargeConsumedMaMillis; |
| } |
| |
| /** |
| * Returns the duration for which these wifi stats were collected. |
| * |
| * @return Duration of stats collection in millis. |
| */ |
| public long getLoggingDurationMillis() { |
| return mLoggingDurationMillis; |
| } |
| |
| /** |
| * Returns the duration for which the kernel was active within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Duration of kernel active time in millis. |
| */ |
| public long getKernelActiveTimeMillis() { |
| return mKernelActiveTimeMillis; |
| } |
| |
| /** |
| * Returns the number of packets transmitted over wifi within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Number of packets transmitted. |
| */ |
| public long getNumPacketsTx() { |
| return mNumPacketsTx; |
| } |
| |
| /** |
| * Returns the number of bytes transmitted over wifi within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Number of bytes transmitted. |
| */ |
| public long getNumBytesTx() { |
| return mNumBytesTx; |
| } |
| |
| /** |
| * Returns the number of packets received over wifi within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Number of packets received. |
| */ |
| public long getNumPacketsRx() { |
| return mNumPacketsRx; |
| } |
| |
| /** |
| * Returns the number of bytes received over wifi 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 millis. |
| */ |
| public long getSleepTimeMillis() { |
| return mSleepTimeMillis; |
| } |
| |
| /** |
| * Returns the duration for which the device was wifi scanning within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Duration of wifi scanning time in millis. |
| */ |
| public long getScanTimeMillis() { |
| return mScanTimeMillis; |
| } |
| |
| /** |
| * Returns the duration for which the device was idle within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Duration of idle time in millis. |
| */ |
| public long getIdleTimeMillis() { |
| return mIdleTimeMillis; |
| } |
| |
| /** |
| * Returns the duration for which the device was receiving over wifi within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Duration of wifi reception time in millis. |
| */ |
| public long getRxTimeMillis() { |
| return mRxTimeMillis; |
| } |
| |
| /** |
| * Returns the duration for which the device was transmitting over wifi within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Duration of wifi transmission time in millis. |
| */ |
| public long getTxTimeMillis() { |
| return mTxTimeMillis; |
| } |
| |
| /** |
| * Returns an estimation of energy consumed in millis by wifi chip within |
| * {@link #getLoggingDurationMillis()}. |
| * |
| * @return Energy consumed in millis. |
| */ |
| public long getEnergyConsumedMaMillis() { |
| return mEnergyConsumedMaMillis; |
| } |
| |
| /** |
| * Returns the number of app initiated wifi scans within {@link #getLoggingDurationMillis()}. |
| * |
| * @return Number of app scans. |
| */ |
| public long getAppScanRequestCount() { |
| return mAppScanRequestCount; |
| } |
| |
| /** |
| * Returns the energy consumed by wifi chip within {@link #getLoggingDurationMillis()}. |
| * |
| * @return Energy consumed in millis. |
| */ |
| public long getMonitoredRailChargeConsumedMaMillis() { |
| return mMonitoredRailChargeConsumedMaMillis; |
| } |
| } |