Loading core/java/android/os/BatteryUsageStats.java +12 −13 Original line number Diff line number Diff line Loading @@ -827,12 +827,12 @@ public final class BatteryUsageStats implements Parcelable, Closeable { parser.getAttributeLong(null, XML_ATTR_DURATION)); builder.setBatteryCapacity( parser.getAttributeDouble(null, XML_ATTR_BATTERY_CAPACITY)); builder.setDischargePercentage( builder.addDischargePercentage( parser.getAttributeInt(null, XML_ATTR_DISCHARGE_PERCENT)); builder.setDischargedPowerRange( builder.addDischargedPowerRange( parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_LOWER), parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_UPPER)); builder.setDischargeDurationMs( builder.addDischargeDurationMs( parser.getAttributeLong(null, XML_ATTR_DISCHARGE_DURATION)); builder.setBatteryTimeRemainingMs( parser.getAttributeLong(null, XML_ATTR_BATTERY_REMAINING)); Loading Loading @@ -1044,23 +1044,22 @@ public final class BatteryUsageStats implements Parcelable, Closeable { } /** * Sets the battery discharge amount since BatteryStats reset as percentage of the full * charge. * Accumulates the battery discharge amount as percentage of the full charge. Can exceed 100 */ @NonNull public Builder setDischargePercentage(int dischargePercentage) { mDischargePercentage = dischargePercentage; public Builder addDischargePercentage(int dischargePercentage) { mDischargePercentage += dischargePercentage; return this; } /** * Sets the estimated battery discharge range. * Accumulates the estimated battery discharge range. */ @NonNull public Builder setDischargedPowerRange(double dischargedPowerLowerBoundMah, public Builder addDischargedPowerRange(double dischargedPowerLowerBoundMah, double dischargedPowerUpperBoundMah) { mDischargedPowerLowerBoundMah = dischargedPowerLowerBoundMah; mDischargedPowerUpperBoundMah = dischargedPowerUpperBoundMah; mDischargedPowerLowerBoundMah += dischargedPowerLowerBoundMah; mDischargedPowerUpperBoundMah += dischargedPowerUpperBoundMah; return this; } Loading @@ -1068,8 +1067,8 @@ public final class BatteryUsageStats implements Parcelable, Closeable { * Sets the total battery discharge time, in milliseconds. */ @NonNull public Builder setDischargeDurationMs(long durationMs) { mDischargeDurationMs = durationMs; public Builder addDischargeDurationMs(long durationMs) { mDischargeDurationMs += durationMs; return this; } Loading services/core/java/com/android/server/power/stats/BatteryChargeCalculator.java +4 −6 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ public class BatteryChargeCalculator extends PowerCalculator { @Override public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { builder.setDischargePercentage( builder.addDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)); int batteryCapacityMah = batteryStats.getBatteryCapacity(); Loading @@ -45,11 +45,9 @@ public class BatteryChargeCalculator extends PowerCalculator { batteryStats.getLowDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; final double dischargedPowerUpperBoundMah = batteryStats.getHighDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) .setDischargedPowerRange(dischargedPowerLowerBoundMah, dischargedPowerUpperBoundMah) .setDischargeDurationMs(batteryStats.getBatteryRealtime(rawRealtimeUs) / 1000); builder .addDischargedPowerRange(dischargedPowerLowerBoundMah, dischargedPowerUpperBoundMah) .addDischargeDurationMs(batteryStats.getBatteryRealtime(rawRealtimeUs) / 1000); final long batteryTimeRemainingMs = batteryStats.computeBatteryTimeRemaining(rawRealtimeUs); if (batteryTimeRemainingMs != -1) { Loading services/core/java/com/android/server/power/stats/processor/BasePowerStatsProcessor.java +17 −24 Original line number Diff line number Diff line Loading @@ -24,12 +24,12 @@ import static com.android.server.power.stats.processor.AggregatedPowerStatsConfi import android.os.BatteryConsumer; import android.os.PersistableBundle; import android.util.SparseLongArray; import com.android.internal.os.PowerStats; import com.android.server.power.stats.format.BasePowerStatsLayout; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.DoubleSupplier; Loading @@ -37,9 +37,9 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { private final DoubleSupplier mBatteryCapacitySupplier; private PowerEstimationPlan mPlan; private long mStartTimestamp; private final SparseLongArray mUidStartTimestamps = new SparseLongArray(); private static final BasePowerStatsLayout sStatsLayout = new BasePowerStatsLayout(); private final PowerStats.Descriptor mPowerStatsDescriptor; private final PowerStats mPowerStats; private final long[] mTmpUidStatsArray; private double mBatteryCapacityUah; private int mBatteryLevel; Loading @@ -59,12 +59,12 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { sStatsLayout.getDeviceStatsArrayLength(), null, 0, sStatsLayout.getUidStatsArrayLength(), extras); mTmpUidStatsArray = new long[sStatsLayout.getUidStatsArrayLength()]; mPowerStats = new PowerStats(mPowerStatsDescriptor); } @Override void start(PowerComponentAggregatedPowerStats stats, long timestampMs) { mStartTimestamp = timestampMs; mUidStartTimestamps.clear(); stats.setPowerStatsDescriptor(mPowerStatsDescriptor); mBatteryCapacityUah = mBatteryCapacitySupplier.getAsDouble() * 1000; mBatteryLevel = UNSPECIFIED; Loading @@ -73,6 +73,9 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { mCumulativeDischargeUah = 0; mCumulativeDischargePct = 0; mCumulativeDischargeDurationMs = 0; // Establish a baseline stats.addProcessedPowerStats(mPowerStats, timestampMs); } @Override Loading Loading @@ -100,33 +103,24 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { mBatteryLevelTimestampMs = timestampMs; } @Override public void setUidState(PowerComponentAggregatedPowerStats stats, int uid, @AggregatedPowerStatsConfig.TrackedState int stateId, int state, long timestampMs) { super.setUidState(stats, uid, stateId, state, timestampMs); if (stateId == STATE_PROCESS_STATE && mUidStartTimestamps.indexOfKey(uid) < 0) { mUidStartTimestamps.put(uid, timestampMs); } } @Override void finish(PowerComponentAggregatedPowerStats stats, long timestampMs) { if (mPlan == null) { mPlan = new PowerEstimationPlan(stats.getConfig()); } PowerStats powerStats = new PowerStats(mPowerStatsDescriptor); sStatsLayout.setUsageDuration(powerStats.stats, timestampMs - mStartTimestamp); sStatsLayout.setUsageDuration(mPowerStats.stats, timestampMs - mStartTimestamp); sStatsLayout.addBatteryDischargePercent(powerStats.stats, mCumulativeDischargePct); sStatsLayout.addBatteryDischargePercent(mPowerStats.stats, mCumulativeDischargePct); if (mCumulativeDischargeUah != 0) { sStatsLayout.addBatteryDischargeUah(powerStats.stats, sStatsLayout.addBatteryDischargeUah(mPowerStats.stats, mCumulativeDischargeUah); } else { sStatsLayout.addBatteryDischargeUah(powerStats.stats, sStatsLayout.addBatteryDischargeUah(mPowerStats.stats, (long) (mCumulativeDischargePct * mBatteryCapacityUah / 100.0)); } sStatsLayout.addBatteryDischargeDuration(powerStats.stats, mCumulativeDischargeDurationMs); sStatsLayout.addBatteryDischargeDuration(mPowerStats.stats, mCumulativeDischargeDurationMs); mCumulativeDischargePct = 0; mCumulativeDischargeUah = 0; mCumulativeDischargeDurationMs = 0; Loading @@ -134,19 +128,16 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { List<Integer> uids = new ArrayList<>(); stats.collectUids(uids); long durationMs = timestampMs - mStartTimestamp; if (!uids.isEmpty()) { for (int i = uids.size() - 1; i >= 0; i--) { Integer uid = uids.get(i); long durationMs = timestampMs - mUidStartTimestamps.get(uid, mStartTimestamp); mUidStartTimestamps.put(uid, timestampMs); long[] uidStats = new long[sStatsLayout.getUidStatsArrayLength()]; sStatsLayout.setUidUsageDuration(uidStats, durationMs); powerStats.uidStats.put(uid, uidStats); mPowerStats.uidStats.put(uids.get(i), uidStats); } } stats.addPowerStats(powerStats, timestampMs); stats.addPowerStats(mPowerStats, timestampMs); for (int i = mPlan.uidStateEstimates.size() - 1; i >= 0; i--) { UidStateEstimate uidStateEstimate = mPlan.uidStateEstimates.get(i); Loading @@ -169,5 +160,7 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { } mStartTimestamp = timestampMs; Arrays.fill(mPowerStats.stats, 0); mPowerStats.uidStats.clear(); } } services/core/java/com/android/server/power/stats/processor/PowerStatsAggregator.java +2 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,8 @@ public class PowerStatsAggregator { lastTime = item.time; if (item.batteryLevel != lastBatteryLevel) { if (item.cmd == BatteryStats.HistoryItem.CMD_UPDATE && item.batteryLevel != lastBatteryLevel) { mStats.noteBatteryLevel(item.batteryLevel, item.batteryChargeUah, item.time); lastBatteryLevel = item.batteryLevel; Loading services/core/java/com/android/server/power/stats/processor/PowerStatsExporter.java +4 −4 Original line number Diff line number Diff line Loading @@ -245,13 +245,13 @@ class PowerStatsExporter { private void populateBatteryLevelInfo(BatteryUsageStats.Builder builder, BatteryLevelInfo batteryLevelInfo) { builder.setDischargePercentage((int) Math.round(batteryLevelInfo.batteryDischargePct)) .setDischargedPowerRange(batteryLevelInfo.batteryDischargeMah, builder.addDischargePercentage((int) Math.round(batteryLevelInfo.batteryDischargePct)) .addDischargedPowerRange(batteryLevelInfo.batteryDischargeMah, batteryLevelInfo.batteryDischargeMah) .setDischargeDurationMs(batteryLevelInfo.batteryDischargeDurationMs) .addDischargeDurationMs(batteryLevelInfo.batteryDischargeDurationMs) .getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setConsumedPower(batteryLevelInfo.batteryDischargeMah); .addConsumedPower(batteryLevelInfo.batteryDischargeMah); } private void populateBatteryConsumers( Loading Loading
core/java/android/os/BatteryUsageStats.java +12 −13 Original line number Diff line number Diff line Loading @@ -827,12 +827,12 @@ public final class BatteryUsageStats implements Parcelable, Closeable { parser.getAttributeLong(null, XML_ATTR_DURATION)); builder.setBatteryCapacity( parser.getAttributeDouble(null, XML_ATTR_BATTERY_CAPACITY)); builder.setDischargePercentage( builder.addDischargePercentage( parser.getAttributeInt(null, XML_ATTR_DISCHARGE_PERCENT)); builder.setDischargedPowerRange( builder.addDischargedPowerRange( parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_LOWER), parser.getAttributeDouble(null, XML_ATTR_DISCHARGE_UPPER)); builder.setDischargeDurationMs( builder.addDischargeDurationMs( parser.getAttributeLong(null, XML_ATTR_DISCHARGE_DURATION)); builder.setBatteryTimeRemainingMs( parser.getAttributeLong(null, XML_ATTR_BATTERY_REMAINING)); Loading Loading @@ -1044,23 +1044,22 @@ public final class BatteryUsageStats implements Parcelable, Closeable { } /** * Sets the battery discharge amount since BatteryStats reset as percentage of the full * charge. * Accumulates the battery discharge amount as percentage of the full charge. Can exceed 100 */ @NonNull public Builder setDischargePercentage(int dischargePercentage) { mDischargePercentage = dischargePercentage; public Builder addDischargePercentage(int dischargePercentage) { mDischargePercentage += dischargePercentage; return this; } /** * Sets the estimated battery discharge range. * Accumulates the estimated battery discharge range. */ @NonNull public Builder setDischargedPowerRange(double dischargedPowerLowerBoundMah, public Builder addDischargedPowerRange(double dischargedPowerLowerBoundMah, double dischargedPowerUpperBoundMah) { mDischargedPowerLowerBoundMah = dischargedPowerLowerBoundMah; mDischargedPowerUpperBoundMah = dischargedPowerUpperBoundMah; mDischargedPowerLowerBoundMah += dischargedPowerLowerBoundMah; mDischargedPowerUpperBoundMah += dischargedPowerUpperBoundMah; return this; } Loading @@ -1068,8 +1067,8 @@ public final class BatteryUsageStats implements Parcelable, Closeable { * Sets the total battery discharge time, in milliseconds. */ @NonNull public Builder setDischargeDurationMs(long durationMs) { mDischargeDurationMs = durationMs; public Builder addDischargeDurationMs(long durationMs) { mDischargeDurationMs += durationMs; return this; } Loading
services/core/java/com/android/server/power/stats/BatteryChargeCalculator.java +4 −6 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ public class BatteryChargeCalculator extends PowerCalculator { @Override public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { builder.setDischargePercentage( builder.addDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)); int batteryCapacityMah = batteryStats.getBatteryCapacity(); Loading @@ -45,11 +45,9 @@ public class BatteryChargeCalculator extends PowerCalculator { batteryStats.getLowDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; final double dischargedPowerUpperBoundMah = batteryStats.getHighDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) .setDischargedPowerRange(dischargedPowerLowerBoundMah, dischargedPowerUpperBoundMah) .setDischargeDurationMs(batteryStats.getBatteryRealtime(rawRealtimeUs) / 1000); builder .addDischargedPowerRange(dischargedPowerLowerBoundMah, dischargedPowerUpperBoundMah) .addDischargeDurationMs(batteryStats.getBatteryRealtime(rawRealtimeUs) / 1000); final long batteryTimeRemainingMs = batteryStats.computeBatteryTimeRemaining(rawRealtimeUs); if (batteryTimeRemainingMs != -1) { Loading
services/core/java/com/android/server/power/stats/processor/BasePowerStatsProcessor.java +17 −24 Original line number Diff line number Diff line Loading @@ -24,12 +24,12 @@ import static com.android.server.power.stats.processor.AggregatedPowerStatsConfi import android.os.BatteryConsumer; import android.os.PersistableBundle; import android.util.SparseLongArray; import com.android.internal.os.PowerStats; import com.android.server.power.stats.format.BasePowerStatsLayout; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.DoubleSupplier; Loading @@ -37,9 +37,9 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { private final DoubleSupplier mBatteryCapacitySupplier; private PowerEstimationPlan mPlan; private long mStartTimestamp; private final SparseLongArray mUidStartTimestamps = new SparseLongArray(); private static final BasePowerStatsLayout sStatsLayout = new BasePowerStatsLayout(); private final PowerStats.Descriptor mPowerStatsDescriptor; private final PowerStats mPowerStats; private final long[] mTmpUidStatsArray; private double mBatteryCapacityUah; private int mBatteryLevel; Loading @@ -59,12 +59,12 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { sStatsLayout.getDeviceStatsArrayLength(), null, 0, sStatsLayout.getUidStatsArrayLength(), extras); mTmpUidStatsArray = new long[sStatsLayout.getUidStatsArrayLength()]; mPowerStats = new PowerStats(mPowerStatsDescriptor); } @Override void start(PowerComponentAggregatedPowerStats stats, long timestampMs) { mStartTimestamp = timestampMs; mUidStartTimestamps.clear(); stats.setPowerStatsDescriptor(mPowerStatsDescriptor); mBatteryCapacityUah = mBatteryCapacitySupplier.getAsDouble() * 1000; mBatteryLevel = UNSPECIFIED; Loading @@ -73,6 +73,9 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { mCumulativeDischargeUah = 0; mCumulativeDischargePct = 0; mCumulativeDischargeDurationMs = 0; // Establish a baseline stats.addProcessedPowerStats(mPowerStats, timestampMs); } @Override Loading Loading @@ -100,33 +103,24 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { mBatteryLevelTimestampMs = timestampMs; } @Override public void setUidState(PowerComponentAggregatedPowerStats stats, int uid, @AggregatedPowerStatsConfig.TrackedState int stateId, int state, long timestampMs) { super.setUidState(stats, uid, stateId, state, timestampMs); if (stateId == STATE_PROCESS_STATE && mUidStartTimestamps.indexOfKey(uid) < 0) { mUidStartTimestamps.put(uid, timestampMs); } } @Override void finish(PowerComponentAggregatedPowerStats stats, long timestampMs) { if (mPlan == null) { mPlan = new PowerEstimationPlan(stats.getConfig()); } PowerStats powerStats = new PowerStats(mPowerStatsDescriptor); sStatsLayout.setUsageDuration(powerStats.stats, timestampMs - mStartTimestamp); sStatsLayout.setUsageDuration(mPowerStats.stats, timestampMs - mStartTimestamp); sStatsLayout.addBatteryDischargePercent(powerStats.stats, mCumulativeDischargePct); sStatsLayout.addBatteryDischargePercent(mPowerStats.stats, mCumulativeDischargePct); if (mCumulativeDischargeUah != 0) { sStatsLayout.addBatteryDischargeUah(powerStats.stats, sStatsLayout.addBatteryDischargeUah(mPowerStats.stats, mCumulativeDischargeUah); } else { sStatsLayout.addBatteryDischargeUah(powerStats.stats, sStatsLayout.addBatteryDischargeUah(mPowerStats.stats, (long) (mCumulativeDischargePct * mBatteryCapacityUah / 100.0)); } sStatsLayout.addBatteryDischargeDuration(powerStats.stats, mCumulativeDischargeDurationMs); sStatsLayout.addBatteryDischargeDuration(mPowerStats.stats, mCumulativeDischargeDurationMs); mCumulativeDischargePct = 0; mCumulativeDischargeUah = 0; mCumulativeDischargeDurationMs = 0; Loading @@ -134,19 +128,16 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { List<Integer> uids = new ArrayList<>(); stats.collectUids(uids); long durationMs = timestampMs - mStartTimestamp; if (!uids.isEmpty()) { for (int i = uids.size() - 1; i >= 0; i--) { Integer uid = uids.get(i); long durationMs = timestampMs - mUidStartTimestamps.get(uid, mStartTimestamp); mUidStartTimestamps.put(uid, timestampMs); long[] uidStats = new long[sStatsLayout.getUidStatsArrayLength()]; sStatsLayout.setUidUsageDuration(uidStats, durationMs); powerStats.uidStats.put(uid, uidStats); mPowerStats.uidStats.put(uids.get(i), uidStats); } } stats.addPowerStats(powerStats, timestampMs); stats.addPowerStats(mPowerStats, timestampMs); for (int i = mPlan.uidStateEstimates.size() - 1; i >= 0; i--) { UidStateEstimate uidStateEstimate = mPlan.uidStateEstimates.get(i); Loading @@ -169,5 +160,7 @@ class BasePowerStatsProcessor extends PowerStatsProcessor { } mStartTimestamp = timestampMs; Arrays.fill(mPowerStats.stats, 0); mPowerStats.uidStats.clear(); } }
services/core/java/com/android/server/power/stats/processor/PowerStatsAggregator.java +2 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,8 @@ public class PowerStatsAggregator { lastTime = item.time; if (item.batteryLevel != lastBatteryLevel) { if (item.cmd == BatteryStats.HistoryItem.CMD_UPDATE && item.batteryLevel != lastBatteryLevel) { mStats.noteBatteryLevel(item.batteryLevel, item.batteryChargeUah, item.time); lastBatteryLevel = item.batteryLevel; Loading
services/core/java/com/android/server/power/stats/processor/PowerStatsExporter.java +4 −4 Original line number Diff line number Diff line Loading @@ -245,13 +245,13 @@ class PowerStatsExporter { private void populateBatteryLevelInfo(BatteryUsageStats.Builder builder, BatteryLevelInfo batteryLevelInfo) { builder.setDischargePercentage((int) Math.round(batteryLevelInfo.batteryDischargePct)) .setDischargedPowerRange(batteryLevelInfo.batteryDischargeMah, builder.addDischargePercentage((int) Math.round(batteryLevelInfo.batteryDischargePct)) .addDischargedPowerRange(batteryLevelInfo.batteryDischargeMah, batteryLevelInfo.batteryDischargeMah) .setDischargeDurationMs(batteryLevelInfo.batteryDischargeDurationMs) .addDischargeDurationMs(batteryLevelInfo.batteryDischargeDurationMs) .getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setConsumedPower(batteryLevelInfo.batteryDischargeMah); .addConsumedPower(batteryLevelInfo.batteryDischargeMah); } private void populateBatteryConsumers( Loading