Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ebaedaf9 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Automerger Merge Worker
Browse files

Merge "Use battery capacity estimates provided by Health HAL" into sc-dev am: 1d211e04

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14372226

Change-Id: I1adfce1dc0edc5a299270d26f254df00437718e0
parents 67ed2a10 1d211e04
Loading
Loading
Loading
Loading
+23 −7
Original line number Diff line number Diff line
@@ -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.
     */
@@ -3925,7 +3930,9 @@ public abstract class BatteryStats implements Parcelable {
                getStartClockTime(),
                whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000,
                getEstimatedBatteryCapacity(),
                getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(),
                getLearnedBatteryCapacity(),
                getMinLearnedBatteryCapacity(),
                getMaxLearnedBatteryCapacity(),
                screenDozeTime / 1000);


@@ -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);
+13 −8
Original line number Diff line number Diff line
@@ -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,
+13 −1
Original line number Diff line number Diff line
@@ -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
@@ -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;
@@ -1141,6 +1142,11 @@ public class BatteryStatsImpl extends BatteryStats {
        return mEstimatedBatteryCapacityMah;
    }
    @Override
    public int getLearnedBatteryCapacity() {
        return mLastLearnedBatteryCapacityUah;
    }
    @Override
    public int getMinLearnedBatteryCapacity() {
        return mMinLearnedBatteryCapacityUah;
@@ -11199,6 +11205,7 @@ public class BatteryStatsImpl extends BatteryStats {
        } else {
            mEstimatedBatteryCapacityMah = -1;
        }
        mLastLearnedBatteryCapacityUah = -1;
        mMinLearnedBatteryCapacityUah = -1;
        mMaxLearnedBatteryCapacityUah = -1;
        mInteractiveTimer.reset(false, elapsedRealtimeUs);
@@ -13799,6 +13806,7 @@ public class BatteryStatsImpl extends BatteryStats {
            mRecordingHistory = DEBUG;
        }
        mLastLearnedBatteryCapacityUah = chargeFullUah;
        if (mMinLearnedBatteryCapacityUah == -1) {
            mMinLearnedBatteryCapacityUah = chargeFullUah;
        } else {
@@ -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();
@@ -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());
@@ -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.
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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));
+2 −7
Original line number Diff line number Diff line
@@ -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);
@@ -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())