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

Commit 1d211e04 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Use battery capacity estimates provided by Health HAL" into sc-dev

parents 3100c1e4 daa86f4f
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())