Loading core/java/android/os/BatteryConsumer.java +1 −1 Original line number Diff line number Diff line Loading @@ -130,7 +130,7 @@ public abstract class BatteryConsumer { * Total power consumed by this consumer, in mAh. */ public double getConsumedPower() { return mPowerComponents.getTotalPowerConsumed(); return mPowerComponents.getTotalConsumedPower(); } /** Loading core/java/android/os/BatteryStats.java +12 −7 Original line number Diff line number Diff line Loading @@ -1671,7 +1671,7 @@ public abstract class BatteryStats implements Parcelable { public char batteryVoltage; // The charge of the battery in micro-Ampere-hours. public int batteryChargeUAh; public int batteryChargeUah; public double modemRailChargeMah; public double wifiRailChargeMah; Loading Loading @@ -1884,7 +1884,7 @@ public abstract class BatteryStats implements Parcelable { bat = (((int)batteryTemperature)&0xffff) | ((((int)batteryVoltage)<<16)&0xffff0000); dest.writeInt(bat); dest.writeInt(batteryChargeUAh); dest.writeInt(batteryChargeUah); dest.writeDouble(modemRailChargeMah); dest.writeDouble(wifiRailChargeMah); dest.writeInt(states); Loading Loading @@ -1916,7 +1916,7 @@ public abstract class BatteryStats implements Parcelable { int bat2 = src.readInt(); batteryTemperature = (short)(bat2&0xffff); batteryVoltage = (char)((bat2>>16)&0xffff); batteryChargeUAh = src.readInt(); batteryChargeUah = src.readInt(); modemRailChargeMah = src.readDouble(); wifiRailChargeMah = src.readDouble(); states = src.readInt(); Loading Loading @@ -1959,7 +1959,7 @@ public abstract class BatteryStats implements Parcelable { batteryPlugType = 0; batteryTemperature = 0; batteryVoltage = 0; batteryChargeUAh = 0; batteryChargeUah = 0; modemRailChargeMah = 0; wifiRailChargeMah = 0; states = 0; Loading Loading @@ -1991,7 +1991,7 @@ public abstract class BatteryStats implements Parcelable { batteryPlugType = o.batteryPlugType; batteryTemperature = o.batteryTemperature; batteryVoltage = o.batteryVoltage; batteryChargeUAh = o.batteryChargeUAh; batteryChargeUah = o.batteryChargeUah; modemRailChargeMah = o.modemRailChargeMah; wifiRailChargeMah = o.wifiRailChargeMah; states = o.states; Loading Loading @@ -2025,7 +2025,7 @@ public abstract class BatteryStats implements Parcelable { && batteryPlugType == o.batteryPlugType && batteryTemperature == o.batteryTemperature && batteryVoltage == o.batteryVoltage && batteryChargeUAh == o.batteryChargeUAh && batteryChargeUah == o.batteryChargeUah && modemRailChargeMah == o.modemRailChargeMah && wifiRailChargeMah == o.wifiRailChargeMah && states == o.states Loading Loading @@ -2858,6 +2858,11 @@ public abstract class BatteryStats implements Parcelable { */ public abstract boolean getIsOnBattery(); /** * Returns the timestamp of when battery stats collection started, in microseconds. */ public abstract long getStatsStartRealtime(); /** * Returns a SparseArray containing the statistics for each uid. */ Loading Loading @@ -6520,7 +6525,7 @@ public abstract class BatteryStats implements Parcelable { item.append(checkin ? ",Bv=" : " volt="); item.append(oldVolt); } final int chargeMAh = rec.batteryChargeUAh / 1000; final int chargeMAh = rec.batteryChargeUah / 1000; if (oldChargeMAh != chargeMAh) { oldChargeMAh = chargeMAh; item.append(checkin ? ",Bcc=" : " charge="); Loading core/java/android/os/BatteryUsageStats.java +67 −18 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.SuppressLint; import android.util.Range; import android.util.SparseArray; import java.util.ArrayList; Loading @@ -31,35 +31,59 @@ import java.util.List; public final class BatteryUsageStats implements Parcelable { private final double mConsumedPower; private final int mDischargePercentage; private final long mStatsStartRealtimeMs; private final double mDischargedPowerLowerBound; private final double mDischargedPowerUpperBound; private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers; private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers; private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers; private BatteryUsageStats(@NonNull Builder builder) { mConsumedPower = builder.mConsumedPower; mStatsStartRealtimeMs = builder.mStatsStartRealtimeMs; mDischargePercentage = builder.mDischargePercentage; mDischargedPowerLowerBound = builder.mDischargedPowerLowerBoundMah; mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah; int uidBatteryConsumerCount = builder.mUidBatteryConsumerBuilders.size(); double totalPower = 0; final int uidBatteryConsumerCount = builder.mUidBatteryConsumerBuilders.size(); mUidBatteryConsumers = new ArrayList<>(uidBatteryConsumerCount); for (int i = 0; i < uidBatteryConsumerCount; i++) { UidBatteryConsumer.Builder uidBatteryConsumerBuilder = final UidBatteryConsumer.Builder uidBatteryConsumerBuilder = builder.mUidBatteryConsumerBuilders.valueAt(i); if (!uidBatteryConsumerBuilder.isExcludedFromBatteryUsageStats()) { mUidBatteryConsumers.add(uidBatteryConsumerBuilder.build()); final UidBatteryConsumer consumer = uidBatteryConsumerBuilder.build(); totalPower += consumer.getConsumedPower(); mUidBatteryConsumers.add(consumer); } } int systemBatteryConsumerCount = builder.mSystemBatteryConsumerBuilders.size(); final int systemBatteryConsumerCount = builder.mSystemBatteryConsumerBuilders.size(); mSystemBatteryConsumers = new ArrayList<>(systemBatteryConsumerCount); for (int i = 0; i < systemBatteryConsumerCount; i++) { mSystemBatteryConsumers.add(builder.mSystemBatteryConsumerBuilders.valueAt(i).build()); final SystemBatteryConsumer consumer = builder.mSystemBatteryConsumerBuilders.valueAt(i).build(); totalPower += consumer.getConsumedPower(); mSystemBatteryConsumers.add(consumer); } int userBatteryConsumerCount = builder.mUserBatteryConsumerBuilders.size(); final int userBatteryConsumerCount = builder.mUserBatteryConsumerBuilders.size(); mUserBatteryConsumers = new ArrayList<>(userBatteryConsumerCount); for (int i = 0; i < userBatteryConsumerCount; i++) { mUserBatteryConsumers.add(builder.mUserBatteryConsumerBuilders.valueAt(i).build()); final UserBatteryConsumer consumer = builder.mUserBatteryConsumerBuilders.valueAt(i).build(); totalPower += consumer.getConsumedPower(); mUserBatteryConsumers.add(consumer); } mConsumedPower = totalPower; } /** * Timestamp of the latest battery stats reset, in milliseconds. */ public long getStatsStartRealtime() { return mStatsStartRealtimeMs; } /** Loading @@ -70,6 +94,14 @@ public final class BatteryUsageStats implements Parcelable { return mDischargePercentage; } /** * Returns the discharged power since BatteryStats were last reset, in mAh as an estimated * range. */ public Range<Double> getDischargedPowerRange() { return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound); } /** * Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully * charged), in mAh Loading Loading @@ -99,23 +131,29 @@ public final class BatteryUsageStats implements Parcelable { } private BatteryUsageStats(@NonNull Parcel source) { mStatsStartRealtimeMs = source.readLong(); mConsumedPower = source.readDouble(); mDischargePercentage = source.readInt(); mDischargedPowerLowerBound = source.readDouble(); mDischargedPowerUpperBound = source.readDouble(); mUidBatteryConsumers = new ArrayList<>(); source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader()); mSystemBatteryConsumers = new ArrayList<>(); source.readParcelableList(mSystemBatteryConsumers, getClass().getClassLoader()); mUserBatteryConsumers = new ArrayList<>(); source.readParcelableList(mUserBatteryConsumers, getClass().getClassLoader()); mConsumedPower = source.readDouble(); mDischargePercentage = source.readInt(); } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeLong(mStatsStartRealtimeMs); dest.writeDouble(mConsumedPower); dest.writeInt(mDischargePercentage); dest.writeDouble(mDischargedPowerLowerBound); dest.writeDouble(mDischargedPowerUpperBound); dest.writeParcelableList(mUidBatteryConsumers, flags); dest.writeParcelableList(mSystemBatteryConsumers, flags); dest.writeParcelableList(mUserBatteryConsumers, flags); dest.writeDouble(mConsumedPower); dest.writeInt(mDischargePercentage); } @NonNull Loading @@ -135,8 +173,10 @@ public final class BatteryUsageStats implements Parcelable { public static final class Builder { private final int mCustomPowerComponentCount; private final int mCustomTimeComponentCount; private double mConsumedPower; private long mStatsStartRealtimeMs; private int mDischargePercentage; private double mDischargedPowerLowerBoundMah; private double mDischargedPowerUpperBoundMah; private final SparseArray<UidBatteryConsumer.Builder> mUidBatteryConsumerBuilders = new SparseArray<>(); private final SparseArray<SystemBatteryConsumer.Builder> mSystemBatteryConsumerBuilders = Loading @@ -157,11 +197,18 @@ public final class BatteryUsageStats implements Parcelable { return new BatteryUsageStats(this); } /** * Sets the timestamp of the latest battery stats reset, in milliseconds. */ public Builder setStatsStartRealtime(long statsStartRealtimeMs) { mStatsStartRealtimeMs = statsStartRealtimeMs; return this; } /** * Sets the battery discharge amount since BatteryStats reset as percentage of the full * charge. */ @SuppressLint("PercentageInt") // See b/174188159 @NonNull public Builder setDischargePercentage(int dischargePercentage) { mDischargePercentage = dischargePercentage; Loading @@ -169,11 +216,13 @@ public final class BatteryUsageStats implements Parcelable { } /** * Sets the battery discharge amount since BatteryStats reset, in mAh. * Sets the estimated battery discharge range. */ @NonNull public Builder setConsumedPower(double consumedPower) { mConsumedPower = consumedPower; public Builder setDischargedPowerRange(double dischargedPowerLowerBoundMah, double dischargedPowerUpperBoundMah) { mDischargedPowerLowerBoundMah = dischargedPowerLowerBoundMah; mDischargedPowerUpperBoundMah = dischargedPowerUpperBoundMah; return this; } Loading core/java/android/os/PowerComponents.java +35 −34 Original line number Diff line number Diff line Loading @@ -29,38 +29,38 @@ class PowerComponents { public static final int CUSTOM_TIME_COMPONENT_OFFSET = BatteryConsumer.TIME_COMPONENT_COUNT - BatteryConsumer.FIRST_CUSTOM_TIME_COMPONENT_ID; private final double mTotalPowerConsumed; private final double[] mPowerComponents; private final long[] mTimeComponents; private final double mTotalConsumedPowerMah; private final double[] mPowerComponentsMah; private final long[] mTimeComponentsMs; private final int mCustomPowerComponentCount; PowerComponents(@NonNull Builder builder) { mCustomPowerComponentCount = builder.mCustomPowerComponentCount; mPowerComponents = builder.mPowerComponents; mTimeComponents = builder.mTimeComponents; mTotalPowerConsumed = builder.getTotalPower(); mPowerComponentsMah = builder.mPowerComponentsMah; mTimeComponentsMs = builder.mTimeComponentsMs; mTotalConsumedPowerMah = builder.getTotalPower(); } PowerComponents(@NonNull Parcel source) { mTotalPowerConsumed = source.readDouble(); mTotalConsumedPowerMah = source.readDouble(); mCustomPowerComponentCount = source.readInt(); mPowerComponents = source.createDoubleArray(); mTimeComponents = source.createLongArray(); mPowerComponentsMah = source.createDoubleArray(); mTimeComponentsMs = source.createLongArray(); } /** Writes contents to Parcel */ void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeDouble(mTotalPowerConsumed); dest.writeDouble(mTotalConsumedPowerMah); dest.writeInt(mCustomPowerComponentCount); dest.writeDoubleArray(mPowerComponents); dest.writeLongArray(mTimeComponents); dest.writeDoubleArray(mPowerComponentsMah); dest.writeLongArray(mTimeComponentsMs); } /** * Total power consumed by this consumer, in mAh. */ public double getTotalPowerConsumed() { return mTotalPowerConsumed; public double getTotalConsumedPower() { return mTotalConsumedPowerMah; } /** Loading @@ -76,7 +76,7 @@ class PowerComponents { "Unsupported power component ID: " + componentId); } try { return mPowerComponents[componentId]; return mPowerComponentsMah[componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("Unsupported power component ID: " + componentId); } Loading @@ -92,7 +92,7 @@ class PowerComponents { if (componentId >= BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID && componentId < BatteryConsumer.LAST_CUSTOM_POWER_COMPONENT_ID) { try { return mPowerComponents[CUSTOM_POWER_COMPONENT_OFFSET + componentId]; return mPowerComponentsMah[CUSTOM_POWER_COMPONENT_OFFSET + componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom power component ID: " + componentId); Loading @@ -116,7 +116,7 @@ class PowerComponents { "Unsupported time component ID: " + componentId); } try { return mTimeComponents[componentId]; return mTimeComponentsMs[componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("Unsupported power component ID: " + componentId); } Loading @@ -134,7 +134,7 @@ class PowerComponents { "Unsupported custom time component ID: " + componentId); } try { return mTimeComponents[CUSTOM_TIME_COMPONENT_OFFSET + componentId]; return mTimeComponentsMs[CUSTOM_TIME_COMPONENT_OFFSET + componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom time component ID: " + componentId); Loading @@ -145,16 +145,16 @@ class PowerComponents { * Builder for PowerComponents. */ static final class Builder { private final double[] mPowerComponents; private final double[] mPowerComponentsMah; private final int mCustomPowerComponentCount; private final long[] mTimeComponents; private final long[] mTimeComponentsMs; Builder(int customPowerComponentCount, int customTimeComponentCount) { mCustomPowerComponentCount = customPowerComponentCount; int powerComponentCount = BatteryConsumer.POWER_COMPONENT_COUNT + customPowerComponentCount; mPowerComponents = new double[powerComponentCount]; mTimeComponents = mPowerComponentsMah = new double[powerComponentCount]; mTimeComponentsMs = new long[BatteryConsumer.TIME_COMPONENT_COUNT + customTimeComponentCount]; } Loading @@ -173,7 +173,7 @@ class PowerComponents { "Unsupported power component ID: " + componentId); } try { mPowerComponents[componentId] = componentPower; mPowerComponentsMah[componentId] = componentPower; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported power component ID: " + componentId); Loading @@ -192,7 +192,8 @@ class PowerComponents { if (componentId >= BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID && componentId < BatteryConsumer.LAST_CUSTOM_POWER_COMPONENT_ID) { try { mPowerComponents[CUSTOM_POWER_COMPONENT_OFFSET + componentId] = componentPower; mPowerComponentsMah[CUSTOM_POWER_COMPONENT_OFFSET + componentId] = componentPower; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom power component ID: " + componentId); Loading @@ -219,7 +220,7 @@ class PowerComponents { "Unsupported time component ID: " + componentId); } try { mTimeComponents[componentId] = componentUsageDurationMillis; mTimeComponentsMs[componentId] = componentUsageDurationMillis; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported time component ID: " + componentId); Loading @@ -241,7 +242,7 @@ class PowerComponents { "Unsupported custom time component ID: " + componentId); } try { mTimeComponents[CUSTOM_TIME_COMPONENT_OFFSET + componentId] = mTimeComponentsMs[CUSTOM_TIME_COMPONENT_OFFSET + componentId] = componentUsageDurationMillis; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( Loading @@ -251,11 +252,11 @@ class PowerComponents { } public void addPowerAndDuration(Builder other) { for (int i = 0; i < mPowerComponents.length; i++) { mPowerComponents[i] += other.mPowerComponents[i]; for (int i = 0; i < mPowerComponentsMah.length; i++) { mPowerComponentsMah[i] += other.mPowerComponentsMah[i]; } for (int i = 0; i < mTimeComponents.length; i++) { mTimeComponents[i] += other.mTimeComponents[i]; for (int i = 0; i < mTimeComponentsMs.length; i++) { mTimeComponentsMs[i] += other.mTimeComponentsMs[i]; } } Loading @@ -264,11 +265,11 @@ class PowerComponents { * by the time the {@code build()} method is called. */ public double getTotalPower() { double totalPower = 0; for (int i = mPowerComponents.length - 1; i >= 0; i--) { totalPower += mPowerComponents[i]; double totalPowerMah = 0; for (int i = mPowerComponentsMah.length - 1; i >= 0; i--) { totalPowerMah += mPowerComponentsMah[i]; } return totalPower; return totalPowerMah; } /** Loading core/java/android/os/SystemBatteryConsumer.java +2 −4 Original line number Diff line number Diff line Loading @@ -45,10 +45,10 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable DRAIN_TYPE_FLASHLIGHT, DRAIN_TYPE_IDLE, DRAIN_TYPE_MEMORY, DRAIN_TYPE_OVERCOUNTED, // Reserved: OVERCOUNTED, DRAIN_TYPE_PHONE, DRAIN_TYPE_SCREEN, DRAIN_TYPE_UNACCOUNTED, // Reserved: UNACCOUNTED, // Reserved: USER, DRAIN_TYPE_WIFI, }) Loading @@ -63,10 +63,8 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable public static final int DRAIN_TYPE_FLASHLIGHT = 5; public static final int DRAIN_TYPE_IDLE = 6; public static final int DRAIN_TYPE_MEMORY = 7; public static final int DRAIN_TYPE_OVERCOUNTED = 8; public static final int DRAIN_TYPE_PHONE = 9; public static final int DRAIN_TYPE_SCREEN = 10; public static final int DRAIN_TYPE_UNACCOUNTED = 11; public static final int DRAIN_TYPE_WIFI = 13; @DrainType Loading Loading
core/java/android/os/BatteryConsumer.java +1 −1 Original line number Diff line number Diff line Loading @@ -130,7 +130,7 @@ public abstract class BatteryConsumer { * Total power consumed by this consumer, in mAh. */ public double getConsumedPower() { return mPowerComponents.getTotalPowerConsumed(); return mPowerComponents.getTotalConsumedPower(); } /** Loading
core/java/android/os/BatteryStats.java +12 −7 Original line number Diff line number Diff line Loading @@ -1671,7 +1671,7 @@ public abstract class BatteryStats implements Parcelable { public char batteryVoltage; // The charge of the battery in micro-Ampere-hours. public int batteryChargeUAh; public int batteryChargeUah; public double modemRailChargeMah; public double wifiRailChargeMah; Loading Loading @@ -1884,7 +1884,7 @@ public abstract class BatteryStats implements Parcelable { bat = (((int)batteryTemperature)&0xffff) | ((((int)batteryVoltage)<<16)&0xffff0000); dest.writeInt(bat); dest.writeInt(batteryChargeUAh); dest.writeInt(batteryChargeUah); dest.writeDouble(modemRailChargeMah); dest.writeDouble(wifiRailChargeMah); dest.writeInt(states); Loading Loading @@ -1916,7 +1916,7 @@ public abstract class BatteryStats implements Parcelable { int bat2 = src.readInt(); batteryTemperature = (short)(bat2&0xffff); batteryVoltage = (char)((bat2>>16)&0xffff); batteryChargeUAh = src.readInt(); batteryChargeUah = src.readInt(); modemRailChargeMah = src.readDouble(); wifiRailChargeMah = src.readDouble(); states = src.readInt(); Loading Loading @@ -1959,7 +1959,7 @@ public abstract class BatteryStats implements Parcelable { batteryPlugType = 0; batteryTemperature = 0; batteryVoltage = 0; batteryChargeUAh = 0; batteryChargeUah = 0; modemRailChargeMah = 0; wifiRailChargeMah = 0; states = 0; Loading Loading @@ -1991,7 +1991,7 @@ public abstract class BatteryStats implements Parcelable { batteryPlugType = o.batteryPlugType; batteryTemperature = o.batteryTemperature; batteryVoltage = o.batteryVoltage; batteryChargeUAh = o.batteryChargeUAh; batteryChargeUah = o.batteryChargeUah; modemRailChargeMah = o.modemRailChargeMah; wifiRailChargeMah = o.wifiRailChargeMah; states = o.states; Loading Loading @@ -2025,7 +2025,7 @@ public abstract class BatteryStats implements Parcelable { && batteryPlugType == o.batteryPlugType && batteryTemperature == o.batteryTemperature && batteryVoltage == o.batteryVoltage && batteryChargeUAh == o.batteryChargeUAh && batteryChargeUah == o.batteryChargeUah && modemRailChargeMah == o.modemRailChargeMah && wifiRailChargeMah == o.wifiRailChargeMah && states == o.states Loading Loading @@ -2858,6 +2858,11 @@ public abstract class BatteryStats implements Parcelable { */ public abstract boolean getIsOnBattery(); /** * Returns the timestamp of when battery stats collection started, in microseconds. */ public abstract long getStatsStartRealtime(); /** * Returns a SparseArray containing the statistics for each uid. */ Loading Loading @@ -6520,7 +6525,7 @@ public abstract class BatteryStats implements Parcelable { item.append(checkin ? ",Bv=" : " volt="); item.append(oldVolt); } final int chargeMAh = rec.batteryChargeUAh / 1000; final int chargeMAh = rec.batteryChargeUah / 1000; if (oldChargeMAh != chargeMAh) { oldChargeMAh = chargeMAh; item.append(checkin ? ",Bcc=" : " charge="); Loading
core/java/android/os/BatteryUsageStats.java +67 −18 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.SuppressLint; import android.util.Range; import android.util.SparseArray; import java.util.ArrayList; Loading @@ -31,35 +31,59 @@ import java.util.List; public final class BatteryUsageStats implements Parcelable { private final double mConsumedPower; private final int mDischargePercentage; private final long mStatsStartRealtimeMs; private final double mDischargedPowerLowerBound; private final double mDischargedPowerUpperBound; private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers; private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers; private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers; private BatteryUsageStats(@NonNull Builder builder) { mConsumedPower = builder.mConsumedPower; mStatsStartRealtimeMs = builder.mStatsStartRealtimeMs; mDischargePercentage = builder.mDischargePercentage; mDischargedPowerLowerBound = builder.mDischargedPowerLowerBoundMah; mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah; int uidBatteryConsumerCount = builder.mUidBatteryConsumerBuilders.size(); double totalPower = 0; final int uidBatteryConsumerCount = builder.mUidBatteryConsumerBuilders.size(); mUidBatteryConsumers = new ArrayList<>(uidBatteryConsumerCount); for (int i = 0; i < uidBatteryConsumerCount; i++) { UidBatteryConsumer.Builder uidBatteryConsumerBuilder = final UidBatteryConsumer.Builder uidBatteryConsumerBuilder = builder.mUidBatteryConsumerBuilders.valueAt(i); if (!uidBatteryConsumerBuilder.isExcludedFromBatteryUsageStats()) { mUidBatteryConsumers.add(uidBatteryConsumerBuilder.build()); final UidBatteryConsumer consumer = uidBatteryConsumerBuilder.build(); totalPower += consumer.getConsumedPower(); mUidBatteryConsumers.add(consumer); } } int systemBatteryConsumerCount = builder.mSystemBatteryConsumerBuilders.size(); final int systemBatteryConsumerCount = builder.mSystemBatteryConsumerBuilders.size(); mSystemBatteryConsumers = new ArrayList<>(systemBatteryConsumerCount); for (int i = 0; i < systemBatteryConsumerCount; i++) { mSystemBatteryConsumers.add(builder.mSystemBatteryConsumerBuilders.valueAt(i).build()); final SystemBatteryConsumer consumer = builder.mSystemBatteryConsumerBuilders.valueAt(i).build(); totalPower += consumer.getConsumedPower(); mSystemBatteryConsumers.add(consumer); } int userBatteryConsumerCount = builder.mUserBatteryConsumerBuilders.size(); final int userBatteryConsumerCount = builder.mUserBatteryConsumerBuilders.size(); mUserBatteryConsumers = new ArrayList<>(userBatteryConsumerCount); for (int i = 0; i < userBatteryConsumerCount; i++) { mUserBatteryConsumers.add(builder.mUserBatteryConsumerBuilders.valueAt(i).build()); final UserBatteryConsumer consumer = builder.mUserBatteryConsumerBuilders.valueAt(i).build(); totalPower += consumer.getConsumedPower(); mUserBatteryConsumers.add(consumer); } mConsumedPower = totalPower; } /** * Timestamp of the latest battery stats reset, in milliseconds. */ public long getStatsStartRealtime() { return mStatsStartRealtimeMs; } /** Loading @@ -70,6 +94,14 @@ public final class BatteryUsageStats implements Parcelable { return mDischargePercentage; } /** * Returns the discharged power since BatteryStats were last reset, in mAh as an estimated * range. */ public Range<Double> getDischargedPowerRange() { return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound); } /** * Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully * charged), in mAh Loading Loading @@ -99,23 +131,29 @@ public final class BatteryUsageStats implements Parcelable { } private BatteryUsageStats(@NonNull Parcel source) { mStatsStartRealtimeMs = source.readLong(); mConsumedPower = source.readDouble(); mDischargePercentage = source.readInt(); mDischargedPowerLowerBound = source.readDouble(); mDischargedPowerUpperBound = source.readDouble(); mUidBatteryConsumers = new ArrayList<>(); source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader()); mSystemBatteryConsumers = new ArrayList<>(); source.readParcelableList(mSystemBatteryConsumers, getClass().getClassLoader()); mUserBatteryConsumers = new ArrayList<>(); source.readParcelableList(mUserBatteryConsumers, getClass().getClassLoader()); mConsumedPower = source.readDouble(); mDischargePercentage = source.readInt(); } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeLong(mStatsStartRealtimeMs); dest.writeDouble(mConsumedPower); dest.writeInt(mDischargePercentage); dest.writeDouble(mDischargedPowerLowerBound); dest.writeDouble(mDischargedPowerUpperBound); dest.writeParcelableList(mUidBatteryConsumers, flags); dest.writeParcelableList(mSystemBatteryConsumers, flags); dest.writeParcelableList(mUserBatteryConsumers, flags); dest.writeDouble(mConsumedPower); dest.writeInt(mDischargePercentage); } @NonNull Loading @@ -135,8 +173,10 @@ public final class BatteryUsageStats implements Parcelable { public static final class Builder { private final int mCustomPowerComponentCount; private final int mCustomTimeComponentCount; private double mConsumedPower; private long mStatsStartRealtimeMs; private int mDischargePercentage; private double mDischargedPowerLowerBoundMah; private double mDischargedPowerUpperBoundMah; private final SparseArray<UidBatteryConsumer.Builder> mUidBatteryConsumerBuilders = new SparseArray<>(); private final SparseArray<SystemBatteryConsumer.Builder> mSystemBatteryConsumerBuilders = Loading @@ -157,11 +197,18 @@ public final class BatteryUsageStats implements Parcelable { return new BatteryUsageStats(this); } /** * Sets the timestamp of the latest battery stats reset, in milliseconds. */ public Builder setStatsStartRealtime(long statsStartRealtimeMs) { mStatsStartRealtimeMs = statsStartRealtimeMs; return this; } /** * Sets the battery discharge amount since BatteryStats reset as percentage of the full * charge. */ @SuppressLint("PercentageInt") // See b/174188159 @NonNull public Builder setDischargePercentage(int dischargePercentage) { mDischargePercentage = dischargePercentage; Loading @@ -169,11 +216,13 @@ public final class BatteryUsageStats implements Parcelable { } /** * Sets the battery discharge amount since BatteryStats reset, in mAh. * Sets the estimated battery discharge range. */ @NonNull public Builder setConsumedPower(double consumedPower) { mConsumedPower = consumedPower; public Builder setDischargedPowerRange(double dischargedPowerLowerBoundMah, double dischargedPowerUpperBoundMah) { mDischargedPowerLowerBoundMah = dischargedPowerLowerBoundMah; mDischargedPowerUpperBoundMah = dischargedPowerUpperBoundMah; return this; } Loading
core/java/android/os/PowerComponents.java +35 −34 Original line number Diff line number Diff line Loading @@ -29,38 +29,38 @@ class PowerComponents { public static final int CUSTOM_TIME_COMPONENT_OFFSET = BatteryConsumer.TIME_COMPONENT_COUNT - BatteryConsumer.FIRST_CUSTOM_TIME_COMPONENT_ID; private final double mTotalPowerConsumed; private final double[] mPowerComponents; private final long[] mTimeComponents; private final double mTotalConsumedPowerMah; private final double[] mPowerComponentsMah; private final long[] mTimeComponentsMs; private final int mCustomPowerComponentCount; PowerComponents(@NonNull Builder builder) { mCustomPowerComponentCount = builder.mCustomPowerComponentCount; mPowerComponents = builder.mPowerComponents; mTimeComponents = builder.mTimeComponents; mTotalPowerConsumed = builder.getTotalPower(); mPowerComponentsMah = builder.mPowerComponentsMah; mTimeComponentsMs = builder.mTimeComponentsMs; mTotalConsumedPowerMah = builder.getTotalPower(); } PowerComponents(@NonNull Parcel source) { mTotalPowerConsumed = source.readDouble(); mTotalConsumedPowerMah = source.readDouble(); mCustomPowerComponentCount = source.readInt(); mPowerComponents = source.createDoubleArray(); mTimeComponents = source.createLongArray(); mPowerComponentsMah = source.createDoubleArray(); mTimeComponentsMs = source.createLongArray(); } /** Writes contents to Parcel */ void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeDouble(mTotalPowerConsumed); dest.writeDouble(mTotalConsumedPowerMah); dest.writeInt(mCustomPowerComponentCount); dest.writeDoubleArray(mPowerComponents); dest.writeLongArray(mTimeComponents); dest.writeDoubleArray(mPowerComponentsMah); dest.writeLongArray(mTimeComponentsMs); } /** * Total power consumed by this consumer, in mAh. */ public double getTotalPowerConsumed() { return mTotalPowerConsumed; public double getTotalConsumedPower() { return mTotalConsumedPowerMah; } /** Loading @@ -76,7 +76,7 @@ class PowerComponents { "Unsupported power component ID: " + componentId); } try { return mPowerComponents[componentId]; return mPowerComponentsMah[componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("Unsupported power component ID: " + componentId); } Loading @@ -92,7 +92,7 @@ class PowerComponents { if (componentId >= BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID && componentId < BatteryConsumer.LAST_CUSTOM_POWER_COMPONENT_ID) { try { return mPowerComponents[CUSTOM_POWER_COMPONENT_OFFSET + componentId]; return mPowerComponentsMah[CUSTOM_POWER_COMPONENT_OFFSET + componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom power component ID: " + componentId); Loading @@ -116,7 +116,7 @@ class PowerComponents { "Unsupported time component ID: " + componentId); } try { return mTimeComponents[componentId]; return mTimeComponentsMs[componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("Unsupported power component ID: " + componentId); } Loading @@ -134,7 +134,7 @@ class PowerComponents { "Unsupported custom time component ID: " + componentId); } try { return mTimeComponents[CUSTOM_TIME_COMPONENT_OFFSET + componentId]; return mTimeComponentsMs[CUSTOM_TIME_COMPONENT_OFFSET + componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom time component ID: " + componentId); Loading @@ -145,16 +145,16 @@ class PowerComponents { * Builder for PowerComponents. */ static final class Builder { private final double[] mPowerComponents; private final double[] mPowerComponentsMah; private final int mCustomPowerComponentCount; private final long[] mTimeComponents; private final long[] mTimeComponentsMs; Builder(int customPowerComponentCount, int customTimeComponentCount) { mCustomPowerComponentCount = customPowerComponentCount; int powerComponentCount = BatteryConsumer.POWER_COMPONENT_COUNT + customPowerComponentCount; mPowerComponents = new double[powerComponentCount]; mTimeComponents = mPowerComponentsMah = new double[powerComponentCount]; mTimeComponentsMs = new long[BatteryConsumer.TIME_COMPONENT_COUNT + customTimeComponentCount]; } Loading @@ -173,7 +173,7 @@ class PowerComponents { "Unsupported power component ID: " + componentId); } try { mPowerComponents[componentId] = componentPower; mPowerComponentsMah[componentId] = componentPower; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported power component ID: " + componentId); Loading @@ -192,7 +192,8 @@ class PowerComponents { if (componentId >= BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID && componentId < BatteryConsumer.LAST_CUSTOM_POWER_COMPONENT_ID) { try { mPowerComponents[CUSTOM_POWER_COMPONENT_OFFSET + componentId] = componentPower; mPowerComponentsMah[CUSTOM_POWER_COMPONENT_OFFSET + componentId] = componentPower; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom power component ID: " + componentId); Loading @@ -219,7 +220,7 @@ class PowerComponents { "Unsupported time component ID: " + componentId); } try { mTimeComponents[componentId] = componentUsageDurationMillis; mTimeComponentsMs[componentId] = componentUsageDurationMillis; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported time component ID: " + componentId); Loading @@ -241,7 +242,7 @@ class PowerComponents { "Unsupported custom time component ID: " + componentId); } try { mTimeComponents[CUSTOM_TIME_COMPONENT_OFFSET + componentId] = mTimeComponentsMs[CUSTOM_TIME_COMPONENT_OFFSET + componentId] = componentUsageDurationMillis; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( Loading @@ -251,11 +252,11 @@ class PowerComponents { } public void addPowerAndDuration(Builder other) { for (int i = 0; i < mPowerComponents.length; i++) { mPowerComponents[i] += other.mPowerComponents[i]; for (int i = 0; i < mPowerComponentsMah.length; i++) { mPowerComponentsMah[i] += other.mPowerComponentsMah[i]; } for (int i = 0; i < mTimeComponents.length; i++) { mTimeComponents[i] += other.mTimeComponents[i]; for (int i = 0; i < mTimeComponentsMs.length; i++) { mTimeComponentsMs[i] += other.mTimeComponentsMs[i]; } } Loading @@ -264,11 +265,11 @@ class PowerComponents { * by the time the {@code build()} method is called. */ public double getTotalPower() { double totalPower = 0; for (int i = mPowerComponents.length - 1; i >= 0; i--) { totalPower += mPowerComponents[i]; double totalPowerMah = 0; for (int i = mPowerComponentsMah.length - 1; i >= 0; i--) { totalPowerMah += mPowerComponentsMah[i]; } return totalPower; return totalPowerMah; } /** Loading
core/java/android/os/SystemBatteryConsumer.java +2 −4 Original line number Diff line number Diff line Loading @@ -45,10 +45,10 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable DRAIN_TYPE_FLASHLIGHT, DRAIN_TYPE_IDLE, DRAIN_TYPE_MEMORY, DRAIN_TYPE_OVERCOUNTED, // Reserved: OVERCOUNTED, DRAIN_TYPE_PHONE, DRAIN_TYPE_SCREEN, DRAIN_TYPE_UNACCOUNTED, // Reserved: UNACCOUNTED, // Reserved: USER, DRAIN_TYPE_WIFI, }) Loading @@ -63,10 +63,8 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable public static final int DRAIN_TYPE_FLASHLIGHT = 5; public static final int DRAIN_TYPE_IDLE = 6; public static final int DRAIN_TYPE_MEMORY = 7; public static final int DRAIN_TYPE_OVERCOUNTED = 8; public static final int DRAIN_TYPE_PHONE = 9; public static final int DRAIN_TYPE_SCREEN = 10; public static final int DRAIN_TYPE_UNACCOUNTED = 11; public static final int DRAIN_TYPE_WIFI = 13; @DrainType Loading