Loading core/java/android/os/BatteryStats.java +23 −7 Original line number Diff line number Diff line Loading @@ -3233,6 +3233,11 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getMaxLearnedBatteryCapacity() ; /** * @return The latest learned battery capacity in uAh. */ public abstract int getLearnedBatteryCapacity(); /** * Return the array of discharge step durations. */ Loading Loading @@ -3925,7 +3930,9 @@ public abstract class BatteryStats implements Parcelable { getStartClockTime(), whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000, getEstimatedBatteryCapacity(), getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), getLearnedBatteryCapacity(), getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), screenDozeTime / 1000); Loading Loading @@ -4688,6 +4695,15 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final int lastLearnedBatteryCapacity = getLearnedBatteryCapacity(); if (lastLearnedBatteryCapacity > 0) { sb.setLength(0); sb.append(prefix); sb.append(" Last learned battery capacity: "); sb.append(BatteryStatsHelper.makemAh(lastLearnedBatteryCapacity / 1000)); sb.append(" mAh"); pw.println(sb.toString()); } final int minLearnedBatteryCapacity = getMinLearnedBatteryCapacity(); if (minLearnedBatteryCapacity > 0) { sb.setLength(0); Loading core/java/com/android/internal/os/BatteryChargeCalculator.java +13 −8 Original line number Diff line number Diff line Loading @@ -28,19 +28,24 @@ import java.util.List; * Estimates the battery discharge amounts. */ public class BatteryChargeCalculator extends PowerCalculator { private final double mBatteryCapacity; public BatteryChargeCalculator(PowerProfile powerProfile) { mBatteryCapacity = powerProfile.getBatteryCapacity(); } @Override public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)); int batteryCapacityMah = batteryStats.getLearnedBatteryCapacity() / 1000; if (batteryCapacityMah <= 0) { batteryCapacityMah = batteryStats.getMinLearnedBatteryCapacity() / 1000; if (batteryCapacityMah <= 0) { batteryCapacityMah = batteryStats.getEstimatedBatteryCapacity(); } } final double dischargedPowerLowerBoundMah = batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100; batteryStats.getLowDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; final double dischargedPowerUpperBoundMah = batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100; batteryStats.getHighDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) .setDischargedPowerRange(dischargedPowerLowerBoundMah, Loading core/java/com/android/internal/os/BatteryStatsImpl.java +13 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version static final int VERSION = 198; static final int VERSION = 199; // The maximum number of names wakelocks we will keep track of // per uid; once the limit is reached, we batch the remaining wakelocks Loading Loading @@ -1056,6 +1056,7 @@ public class BatteryStatsImpl extends BatteryStats { private int mBatteryVoltageMv = -1; private int mEstimatedBatteryCapacityMah = -1; private int mLastLearnedBatteryCapacityUah = -1; private int mMinLearnedBatteryCapacityUah = -1; private int mMaxLearnedBatteryCapacityUah = -1; Loading Loading @@ -1141,6 +1142,11 @@ public class BatteryStatsImpl extends BatteryStats { return mEstimatedBatteryCapacityMah; } @Override public int getLearnedBatteryCapacity() { return mLastLearnedBatteryCapacityUah; } @Override public int getMinLearnedBatteryCapacity() { return mMinLearnedBatteryCapacityUah; Loading Loading @@ -11199,6 +11205,7 @@ public class BatteryStatsImpl extends BatteryStats { } else { mEstimatedBatteryCapacityMah = -1; } mLastLearnedBatteryCapacityUah = -1; mMinLearnedBatteryCapacityUah = -1; mMaxLearnedBatteryCapacityUah = -1; mInteractiveTimer.reset(false, elapsedRealtimeUs); Loading Loading @@ -13799,6 +13806,7 @@ public class BatteryStatsImpl extends BatteryStats { mRecordingHistory = DEBUG; } mLastLearnedBatteryCapacityUah = chargeFullUah; if (mMinLearnedBatteryCapacityUah == -1) { mMinLearnedBatteryCapacityUah = chargeFullUah; } else { Loading Loading @@ -15066,6 +15074,7 @@ public class BatteryStatsImpl extends BatteryStats { mDischargeCurrentLevel = in.readInt(); mCurrentBatteryLevel = in.readInt(); mEstimatedBatteryCapacityMah = in.readInt(); mLastLearnedBatteryCapacityUah = in.readInt(); mMinLearnedBatteryCapacityUah = in.readInt(); mMaxLearnedBatteryCapacityUah = in.readInt(); mLowDischargeAmountSinceCharge = in.readInt(); Loading Loading @@ -15570,6 +15579,7 @@ public class BatteryStatsImpl extends BatteryStats { out.writeInt(mDischargeCurrentLevel); out.writeInt(mCurrentBatteryLevel); out.writeInt(mEstimatedBatteryCapacityMah); out.writeInt(mLastLearnedBatteryCapacityUah); out.writeInt(mMinLearnedBatteryCapacityUah); out.writeInt(mMaxLearnedBatteryCapacityUah); out.writeInt(getLowDischargeAmountSinceCharge()); Loading Loading @@ -16071,6 +16081,7 @@ public class BatteryStatsImpl extends BatteryStats { mRealtimeStartUs = in.readLong(); mOnBattery = in.readInt() != 0; mEstimatedBatteryCapacityMah = in.readInt(); mLastLearnedBatteryCapacityUah = in.readInt(); mMinLearnedBatteryCapacityUah = in.readInt(); mMaxLearnedBatteryCapacityUah = in.readInt(); mOnBatteryInternal = false; // we are no longer really running. Loading Loading @@ -16310,6 +16321,7 @@ public class BatteryStatsImpl extends BatteryStats { out.writeLong(mRealtimeStartUs); out.writeInt(mOnBattery ? 1 : 0); out.writeInt(mEstimatedBatteryCapacityMah); out.writeInt(mLastLearnedBatteryCapacityUah); out.writeInt(mMinLearnedBatteryCapacityUah); out.writeInt(mMaxLearnedBatteryCapacityUah); mOnBatteryTimeBase.writeToParcel(out, uSecUptime, uSecRealtime); core/java/com/android/internal/os/BatteryUsageStatsProvider.java +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ public class BatteryUsageStatsProvider { mPowerCalculators = new ArrayList<>(); // Power calculators are applied in the order of registration mPowerCalculators.add(new BatteryChargeCalculator(mPowerProfile)); mPowerCalculators.add(new BatteryChargeCalculator()); mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile)); mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile)); mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile)); Loading core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java +2 −7 Original line number Diff line number Diff line Loading @@ -36,18 +36,12 @@ public class BatteryChargeCalculatorTest { @Rule public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule() .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 4000.0); .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 1234.0); // Should be ignored @Test public void testDischargeTotals() { BatteryChargeCalculator calculator = new BatteryChargeCalculator(mStatsRule.getPowerProfile()); final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); mStatsRule.setTime(1000, 1000); batteryStats.resetAllStatsCmdLocked(); batteryStats.setNoAutoReset(true); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0, 1_000_000, 1_000_000, 1_000_000); Loading @@ -58,6 +52,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); BatteryChargeCalculator calculator = new BatteryChargeCalculator(); BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); assertThat(batteryUsageStats.getConsumedPower()) Loading Loading
core/java/android/os/BatteryStats.java +23 −7 Original line number Diff line number Diff line Loading @@ -3233,6 +3233,11 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getMaxLearnedBatteryCapacity() ; /** * @return The latest learned battery capacity in uAh. */ public abstract int getLearnedBatteryCapacity(); /** * Return the array of discharge step durations. */ Loading Loading @@ -3925,7 +3930,9 @@ public abstract class BatteryStats implements Parcelable { getStartClockTime(), whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000, getEstimatedBatteryCapacity(), getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), getLearnedBatteryCapacity(), getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), screenDozeTime / 1000); Loading Loading @@ -4688,6 +4695,15 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } final int lastLearnedBatteryCapacity = getLearnedBatteryCapacity(); if (lastLearnedBatteryCapacity > 0) { sb.setLength(0); sb.append(prefix); sb.append(" Last learned battery capacity: "); sb.append(BatteryStatsHelper.makemAh(lastLearnedBatteryCapacity / 1000)); sb.append(" mAh"); pw.println(sb.toString()); } final int minLearnedBatteryCapacity = getMinLearnedBatteryCapacity(); if (minLearnedBatteryCapacity > 0) { sb.setLength(0); Loading
core/java/com/android/internal/os/BatteryChargeCalculator.java +13 −8 Original line number Diff line number Diff line Loading @@ -28,19 +28,24 @@ import java.util.List; * Estimates the battery discharge amounts. */ public class BatteryChargeCalculator extends PowerCalculator { private final double mBatteryCapacity; public BatteryChargeCalculator(PowerProfile powerProfile) { mBatteryCapacity = powerProfile.getBatteryCapacity(); } @Override public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)); int batteryCapacityMah = batteryStats.getLearnedBatteryCapacity() / 1000; if (batteryCapacityMah <= 0) { batteryCapacityMah = batteryStats.getMinLearnedBatteryCapacity() / 1000; if (batteryCapacityMah <= 0) { batteryCapacityMah = batteryStats.getEstimatedBatteryCapacity(); } } final double dischargedPowerLowerBoundMah = batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100; batteryStats.getLowDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; final double dischargedPowerUpperBoundMah = batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100; batteryStats.getHighDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) .setDischargedPowerRange(dischargedPowerLowerBoundMah, Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +13 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version static final int VERSION = 198; static final int VERSION = 199; // The maximum number of names wakelocks we will keep track of // per uid; once the limit is reached, we batch the remaining wakelocks Loading Loading @@ -1056,6 +1056,7 @@ public class BatteryStatsImpl extends BatteryStats { private int mBatteryVoltageMv = -1; private int mEstimatedBatteryCapacityMah = -1; private int mLastLearnedBatteryCapacityUah = -1; private int mMinLearnedBatteryCapacityUah = -1; private int mMaxLearnedBatteryCapacityUah = -1; Loading Loading @@ -1141,6 +1142,11 @@ public class BatteryStatsImpl extends BatteryStats { return mEstimatedBatteryCapacityMah; } @Override public int getLearnedBatteryCapacity() { return mLastLearnedBatteryCapacityUah; } @Override public int getMinLearnedBatteryCapacity() { return mMinLearnedBatteryCapacityUah; Loading Loading @@ -11199,6 +11205,7 @@ public class BatteryStatsImpl extends BatteryStats { } else { mEstimatedBatteryCapacityMah = -1; } mLastLearnedBatteryCapacityUah = -1; mMinLearnedBatteryCapacityUah = -1; mMaxLearnedBatteryCapacityUah = -1; mInteractiveTimer.reset(false, elapsedRealtimeUs); Loading Loading @@ -13799,6 +13806,7 @@ public class BatteryStatsImpl extends BatteryStats { mRecordingHistory = DEBUG; } mLastLearnedBatteryCapacityUah = chargeFullUah; if (mMinLearnedBatteryCapacityUah == -1) { mMinLearnedBatteryCapacityUah = chargeFullUah; } else { Loading Loading @@ -15066,6 +15074,7 @@ public class BatteryStatsImpl extends BatteryStats { mDischargeCurrentLevel = in.readInt(); mCurrentBatteryLevel = in.readInt(); mEstimatedBatteryCapacityMah = in.readInt(); mLastLearnedBatteryCapacityUah = in.readInt(); mMinLearnedBatteryCapacityUah = in.readInt(); mMaxLearnedBatteryCapacityUah = in.readInt(); mLowDischargeAmountSinceCharge = in.readInt(); Loading Loading @@ -15570,6 +15579,7 @@ public class BatteryStatsImpl extends BatteryStats { out.writeInt(mDischargeCurrentLevel); out.writeInt(mCurrentBatteryLevel); out.writeInt(mEstimatedBatteryCapacityMah); out.writeInt(mLastLearnedBatteryCapacityUah); out.writeInt(mMinLearnedBatteryCapacityUah); out.writeInt(mMaxLearnedBatteryCapacityUah); out.writeInt(getLowDischargeAmountSinceCharge()); Loading Loading @@ -16071,6 +16081,7 @@ public class BatteryStatsImpl extends BatteryStats { mRealtimeStartUs = in.readLong(); mOnBattery = in.readInt() != 0; mEstimatedBatteryCapacityMah = in.readInt(); mLastLearnedBatteryCapacityUah = in.readInt(); mMinLearnedBatteryCapacityUah = in.readInt(); mMaxLearnedBatteryCapacityUah = in.readInt(); mOnBatteryInternal = false; // we are no longer really running. Loading Loading @@ -16310,6 +16321,7 @@ public class BatteryStatsImpl extends BatteryStats { out.writeLong(mRealtimeStartUs); out.writeInt(mOnBattery ? 1 : 0); out.writeInt(mEstimatedBatteryCapacityMah); out.writeInt(mLastLearnedBatteryCapacityUah); out.writeInt(mMinLearnedBatteryCapacityUah); out.writeInt(mMaxLearnedBatteryCapacityUah); mOnBatteryTimeBase.writeToParcel(out, uSecUptime, uSecRealtime);
core/java/com/android/internal/os/BatteryUsageStatsProvider.java +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ public class BatteryUsageStatsProvider { mPowerCalculators = new ArrayList<>(); // Power calculators are applied in the order of registration mPowerCalculators.add(new BatteryChargeCalculator(mPowerProfile)); mPowerCalculators.add(new BatteryChargeCalculator()); mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile)); mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile)); mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile)); Loading
core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java +2 −7 Original line number Diff line number Diff line Loading @@ -36,18 +36,12 @@ public class BatteryChargeCalculatorTest { @Rule public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule() .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 4000.0); .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 1234.0); // Should be ignored @Test public void testDischargeTotals() { BatteryChargeCalculator calculator = new BatteryChargeCalculator(mStatsRule.getPowerProfile()); final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); mStatsRule.setTime(1000, 1000); batteryStats.resetAllStatsCmdLocked(); batteryStats.setNoAutoReset(true); batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, /* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0, 1_000_000, 1_000_000, 1_000_000); Loading @@ -58,6 +52,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); BatteryChargeCalculator calculator = new BatteryChargeCalculator(); BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); assertThat(batteryUsageStats.getConsumedPower()) Loading