Loading core/java/android/os/BatteryUsageStats.java +28 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { static final String XML_ATTR_DISCHARGE_PERCENT = "discharge_pct"; static final String XML_ATTR_DISCHARGE_LOWER = "discharge_lower"; static final String XML_ATTR_DISCHARGE_UPPER = "discharge_upper"; static final String XML_ATTR_DISCHARGE_DURATION = "discharge_duration"; static final String XML_ATTR_BATTERY_REMAINING = "battery_remaining"; static final String XML_ATTR_CHARGE_REMAINING = "charge_remaining"; static final String XML_ATTR_HIGHEST_DRAIN_PACKAGE = "highest_drain_package"; Loading @@ -127,6 +128,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { private final long mStatsDurationMs; private final double mDischargedPowerLowerBound; private final double mDischargedPowerUpperBound; private final long mDischargeDurationMs; private final long mBatteryTimeRemainingMs; private final long mChargeTimeRemainingMs; private final String[] mCustomPowerComponentNames; Loading @@ -146,6 +148,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { mDischargePercentage = builder.mDischargePercentage; mDischargedPowerLowerBound = builder.mDischargedPowerLowerBoundMah; mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah; mDischargeDurationMs = builder.mDischargeDurationMs; mBatteryStatsHistory = builder.mBatteryStatsHistory; mBatteryTimeRemainingMs = builder.mBatteryTimeRemainingMs; mChargeTimeRemainingMs = builder.mChargeTimeRemainingMs; Loading Loading @@ -245,6 +248,13 @@ public final class BatteryUsageStats implements Parcelable, Closeable { return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound); } /** * Returns the total amount of time the battery was discharging. */ public long getDischargeDurationMs() { return mDischargeDurationMs; } /** * Returns an approximation for how much run time (in milliseconds) is remaining on * the battery. Returns -1 if no time can be computed: either there is not Loading Loading @@ -321,6 +331,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { mDischargePercentage = source.readInt(); mDischargedPowerLowerBound = source.readDouble(); mDischargedPowerUpperBound = source.readDouble(); mDischargeDurationMs = source.readLong(); mBatteryTimeRemainingMs = source.readLong(); mChargeTimeRemainingMs = source.readLong(); mCustomPowerComponentNames = source.readStringArray(); Loading Loading @@ -378,6 +389,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { dest.writeInt(mDischargePercentage); dest.writeDouble(mDischargedPowerLowerBound); dest.writeDouble(mDischargedPowerUpperBound); dest.writeLong(mDischargeDurationMs); dest.writeLong(mBatteryTimeRemainingMs); dest.writeLong(mChargeTimeRemainingMs); dest.writeStringArray(mCustomPowerComponentNames); Loading Loading @@ -447,6 +459,8 @@ public final class BatteryUsageStats implements Parcelable, Closeable { proto.write(BatteryUsageStatsAtomsProto.SESSION_DURATION_MILLIS, getStatsDuration()); proto.write(BatteryUsageStatsAtomsProto.SESSION_DISCHARGE_PERCENTAGE, getDischargePercentage()); proto.write(BatteryUsageStatsAtomsProto.DISCHARGE_DURATION_MILLIS, getDischargeDurationMs()); deviceBatteryConsumer.writeStatsProto(proto, BatteryUsageStatsAtomsProto.DEVICE_BATTERY_CONSUMER); writeUidBatteryConsumersProto(proto, maxRawSize); Loading Loading @@ -638,6 +652,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { serializer.attributeInt(null, XML_ATTR_DISCHARGE_PERCENT, mDischargePercentage); serializer.attributeDouble(null, XML_ATTR_DISCHARGE_LOWER, mDischargedPowerLowerBound); serializer.attributeDouble(null, XML_ATTR_DISCHARGE_UPPER, mDischargedPowerUpperBound); serializer.attributeLong(null, XML_ATTR_DISCHARGE_DURATION, mDischargeDurationMs); serializer.attributeLong(null, XML_ATTR_BATTERY_REMAINING, mBatteryTimeRemainingMs); serializer.attributeLong(null, XML_ATTR_CHARGE_REMAINING, mChargeTimeRemainingMs); Loading Loading @@ -693,6 +708,8 @@ public final class BatteryUsageStats implements Parcelable, Closeable { builder.setDischargedPowerRange( parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_LOWER), parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_UPPER)); builder.setDischargeDurationMs( parser.getAttributeLong(null, XML_ATTR_DISCHARGE_DURATION)); builder.setBatteryTimeRemainingMs( parser.getAttributeLong(null, XML_ATTR_BATTERY_REMAINING)); builder.setChargeTimeRemainingMs( Loading Loading @@ -759,6 +776,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { private int mDischargePercentage; private double mDischargedPowerLowerBoundMah; private double mDischargedPowerUpperBoundMah; private long mDischargeDurationMs; private long mBatteryTimeRemainingMs = -1; private long mChargeTimeRemainingMs = -1; private final AggregateBatteryConsumer.Builder[] mAggregateBatteryConsumersBuilders = Loading Loading @@ -868,6 +886,15 @@ public final class BatteryUsageStats implements Parcelable, Closeable { return this; } /** * Sets the total battery discharge time, in milliseconds. */ @NonNull public Builder setDischargeDurationMs(long durationMs) { mDischargeDurationMs = durationMs; return this; } /** * Sets an approximation for how much time (in milliseconds) remains until the battery * is fully discharged. Loading Loading @@ -994,6 +1021,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { mDischargedPowerLowerBoundMah += stats.mDischargedPowerLowerBound; mDischargedPowerUpperBoundMah += stats.mDischargedPowerUpperBound; mDischargePercentage += stats.mDischargePercentage; mDischargeDurationMs += stats.mDischargeDurationMs; mStatsDurationMs = getStatsDuration() + stats.getStatsDuration(); Loading core/java/com/android/internal/os/BatteryChargeCalculator.java +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,8 @@ public class BatteryChargeCalculator extends PowerCalculator { builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) .setDischargedPowerRange(dischargedPowerLowerBoundMah, dischargedPowerUpperBoundMah); dischargedPowerUpperBoundMah) .setDischargeDurationMs(batteryStats.getBatteryRealtime(rawRealtimeUs) / 1000); final long batteryTimeRemainingMs = batteryStats.computeBatteryTimeRemaining(rawRealtimeUs); if (batteryTimeRemainingMs != -1) { Loading core/proto/android/os/batteryusagestats.proto +4 −1 Original line number Diff line number Diff line Loading @@ -98,4 +98,7 @@ message BatteryUsageStatsAtomsProto { // Sum of all discharge percentage point drops during the reported session. optional int32 session_discharge_percentage = 6; // Total amount of time battery was discharging during the reported session optional int64 discharge_duration_millis = 7; } core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ public class BatteryUsageStatsPulledTest { bus.getStatsEndTimestamp() - bus.getStatsStartTimestamp(), proto.sessionDurationMillis); assertEquals(bus.getDischargePercentage(), proto.sessionDischargePercentage); assertEquals(bus.getDischargeDurationMs(), proto.dischargeDurationMillis); assertEquals(3, proto.deviceBatteryConsumer.powerComponents.length); // Only 3 are non-empty assertSameBatteryConsumer("For deviceBatteryConsumer", Loading Loading @@ -215,6 +216,7 @@ public class BatteryUsageStatsPulledTest { /* includeProcessStats */true) .setDischargePercentage(20) .setDischargedPowerRange(1000, 2000) .setDischargeDurationMs(1234) .setStatsStartTimestamp(1000); final UidBatteryConsumer.Builder uidBuilder = builder.getOrCreateUidBatteryConsumerBuilder( batteryStatsUid0) Loading core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public class BatteryChargeCalculatorTest { /* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0, 2_000_000, 2_000_000, 2_000_000); mStatsRule.setTime(5_000_000, 5_000_000); BatteryChargeCalculator calculator = new BatteryChargeCalculator(); BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); Loading @@ -64,6 +65,8 @@ public class BatteryChargeCalculatorTest { .isWithin(PRECISION).of(360.0); assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()) .isWithin(PRECISION).of(400.0); // 5_000_000 (current time) - 1_000_000 (started discharging) assertThat(batteryUsageStats.getDischargeDurationMs()).isEqualTo(4_000_000); assertThat(batteryUsageStats.getBatteryTimeRemainingMs()).isEqualTo(8_000_000); assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(-1); Loading Loading
core/java/android/os/BatteryUsageStats.java +28 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { static final String XML_ATTR_DISCHARGE_PERCENT = "discharge_pct"; static final String XML_ATTR_DISCHARGE_LOWER = "discharge_lower"; static final String XML_ATTR_DISCHARGE_UPPER = "discharge_upper"; static final String XML_ATTR_DISCHARGE_DURATION = "discharge_duration"; static final String XML_ATTR_BATTERY_REMAINING = "battery_remaining"; static final String XML_ATTR_CHARGE_REMAINING = "charge_remaining"; static final String XML_ATTR_HIGHEST_DRAIN_PACKAGE = "highest_drain_package"; Loading @@ -127,6 +128,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { private final long mStatsDurationMs; private final double mDischargedPowerLowerBound; private final double mDischargedPowerUpperBound; private final long mDischargeDurationMs; private final long mBatteryTimeRemainingMs; private final long mChargeTimeRemainingMs; private final String[] mCustomPowerComponentNames; Loading @@ -146,6 +148,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { mDischargePercentage = builder.mDischargePercentage; mDischargedPowerLowerBound = builder.mDischargedPowerLowerBoundMah; mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah; mDischargeDurationMs = builder.mDischargeDurationMs; mBatteryStatsHistory = builder.mBatteryStatsHistory; mBatteryTimeRemainingMs = builder.mBatteryTimeRemainingMs; mChargeTimeRemainingMs = builder.mChargeTimeRemainingMs; Loading Loading @@ -245,6 +248,13 @@ public final class BatteryUsageStats implements Parcelable, Closeable { return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound); } /** * Returns the total amount of time the battery was discharging. */ public long getDischargeDurationMs() { return mDischargeDurationMs; } /** * Returns an approximation for how much run time (in milliseconds) is remaining on * the battery. Returns -1 if no time can be computed: either there is not Loading Loading @@ -321,6 +331,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { mDischargePercentage = source.readInt(); mDischargedPowerLowerBound = source.readDouble(); mDischargedPowerUpperBound = source.readDouble(); mDischargeDurationMs = source.readLong(); mBatteryTimeRemainingMs = source.readLong(); mChargeTimeRemainingMs = source.readLong(); mCustomPowerComponentNames = source.readStringArray(); Loading Loading @@ -378,6 +389,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { dest.writeInt(mDischargePercentage); dest.writeDouble(mDischargedPowerLowerBound); dest.writeDouble(mDischargedPowerUpperBound); dest.writeLong(mDischargeDurationMs); dest.writeLong(mBatteryTimeRemainingMs); dest.writeLong(mChargeTimeRemainingMs); dest.writeStringArray(mCustomPowerComponentNames); Loading Loading @@ -447,6 +459,8 @@ public final class BatteryUsageStats implements Parcelable, Closeable { proto.write(BatteryUsageStatsAtomsProto.SESSION_DURATION_MILLIS, getStatsDuration()); proto.write(BatteryUsageStatsAtomsProto.SESSION_DISCHARGE_PERCENTAGE, getDischargePercentage()); proto.write(BatteryUsageStatsAtomsProto.DISCHARGE_DURATION_MILLIS, getDischargeDurationMs()); deviceBatteryConsumer.writeStatsProto(proto, BatteryUsageStatsAtomsProto.DEVICE_BATTERY_CONSUMER); writeUidBatteryConsumersProto(proto, maxRawSize); Loading Loading @@ -638,6 +652,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { serializer.attributeInt(null, XML_ATTR_DISCHARGE_PERCENT, mDischargePercentage); serializer.attributeDouble(null, XML_ATTR_DISCHARGE_LOWER, mDischargedPowerLowerBound); serializer.attributeDouble(null, XML_ATTR_DISCHARGE_UPPER, mDischargedPowerUpperBound); serializer.attributeLong(null, XML_ATTR_DISCHARGE_DURATION, mDischargeDurationMs); serializer.attributeLong(null, XML_ATTR_BATTERY_REMAINING, mBatteryTimeRemainingMs); serializer.attributeLong(null, XML_ATTR_CHARGE_REMAINING, mChargeTimeRemainingMs); Loading Loading @@ -693,6 +708,8 @@ public final class BatteryUsageStats implements Parcelable, Closeable { builder.setDischargedPowerRange( parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_LOWER), parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_UPPER)); builder.setDischargeDurationMs( parser.getAttributeLong(null, XML_ATTR_DISCHARGE_DURATION)); builder.setBatteryTimeRemainingMs( parser.getAttributeLong(null, XML_ATTR_BATTERY_REMAINING)); builder.setChargeTimeRemainingMs( Loading Loading @@ -759,6 +776,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { private int mDischargePercentage; private double mDischargedPowerLowerBoundMah; private double mDischargedPowerUpperBoundMah; private long mDischargeDurationMs; private long mBatteryTimeRemainingMs = -1; private long mChargeTimeRemainingMs = -1; private final AggregateBatteryConsumer.Builder[] mAggregateBatteryConsumersBuilders = Loading Loading @@ -868,6 +886,15 @@ public final class BatteryUsageStats implements Parcelable, Closeable { return this; } /** * Sets the total battery discharge time, in milliseconds. */ @NonNull public Builder setDischargeDurationMs(long durationMs) { mDischargeDurationMs = durationMs; return this; } /** * Sets an approximation for how much time (in milliseconds) remains until the battery * is fully discharged. Loading Loading @@ -994,6 +1021,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable { mDischargedPowerLowerBoundMah += stats.mDischargedPowerLowerBound; mDischargedPowerUpperBoundMah += stats.mDischargedPowerUpperBound; mDischargePercentage += stats.mDischargePercentage; mDischargeDurationMs += stats.mDischargeDurationMs; mStatsDurationMs = getStatsDuration() + stats.getStatsDuration(); Loading
core/java/com/android/internal/os/BatteryChargeCalculator.java +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,8 @@ public class BatteryChargeCalculator extends PowerCalculator { builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) .setDischargedPowerRange(dischargedPowerLowerBoundMah, dischargedPowerUpperBoundMah); dischargedPowerUpperBoundMah) .setDischargeDurationMs(batteryStats.getBatteryRealtime(rawRealtimeUs) / 1000); final long batteryTimeRemainingMs = batteryStats.computeBatteryTimeRemaining(rawRealtimeUs); if (batteryTimeRemainingMs != -1) { Loading
core/proto/android/os/batteryusagestats.proto +4 −1 Original line number Diff line number Diff line Loading @@ -98,4 +98,7 @@ message BatteryUsageStatsAtomsProto { // Sum of all discharge percentage point drops during the reported session. optional int32 session_discharge_percentage = 6; // Total amount of time battery was discharging during the reported session optional int64 discharge_duration_millis = 7; }
core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ public class BatteryUsageStatsPulledTest { bus.getStatsEndTimestamp() - bus.getStatsStartTimestamp(), proto.sessionDurationMillis); assertEquals(bus.getDischargePercentage(), proto.sessionDischargePercentage); assertEquals(bus.getDischargeDurationMs(), proto.dischargeDurationMillis); assertEquals(3, proto.deviceBatteryConsumer.powerComponents.length); // Only 3 are non-empty assertSameBatteryConsumer("For deviceBatteryConsumer", Loading Loading @@ -215,6 +216,7 @@ public class BatteryUsageStatsPulledTest { /* includeProcessStats */true) .setDischargePercentage(20) .setDischargedPowerRange(1000, 2000) .setDischargeDurationMs(1234) .setStatsStartTimestamp(1000); final UidBatteryConsumer.Builder uidBuilder = builder.getOrCreateUidBatteryConsumerBuilder( batteryStatsUid0) Loading
core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public class BatteryChargeCalculatorTest { /* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0, 2_000_000, 2_000_000, 2_000_000); mStatsRule.setTime(5_000_000, 5_000_000); BatteryChargeCalculator calculator = new BatteryChargeCalculator(); BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); Loading @@ -64,6 +65,8 @@ public class BatteryChargeCalculatorTest { .isWithin(PRECISION).of(360.0); assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()) .isWithin(PRECISION).of(400.0); // 5_000_000 (current time) - 1_000_000 (started discharging) assertThat(batteryUsageStats.getDischargeDurationMs()).isEqualTo(4_000_000); assertThat(batteryUsageStats.getBatteryTimeRemainingMs()).isEqualTo(8_000_000); assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(-1); Loading