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

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

Merge "Capture estimated battery capacity when unspecified in power profile" into main

parents 8a1c9984 31dca320
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -346,7 +346,7 @@ public class BatteryStatsImpl extends BatteryStats {
            return mChargeTimeRemainingMs;
        }
        double getEstimatedBatteryCapacity() {
        long getEstimatedBatteryCapacity() {
            return mEstimatedBatteryCapacityMah;
        }
@@ -1782,6 +1782,7 @@ public class BatteryStatsImpl extends BatteryStats {
    private int mNumConnectivityChange;
    private int mEstimatedBatteryCapacityMah = -1;
    private int mReportedBatteryCapacityMah = -1;
    private int mLastLearnedBatteryCapacityUah = -1;
    private int mMinLearnedBatteryCapacityUah = -1;
@@ -10962,10 +10963,8 @@ public class BatteryStatsImpl extends BatteryStats {
            mKernelCpuSpeedReaders[i] = new KernelCpuSpeedReader(cpus[0], freqs.length);
        }
        if (mEstimatedBatteryCapacityMah == -1) {
        // Initialize the estimated battery capacity to a known preset one.
        mEstimatedBatteryCapacityMah = (int) mPowerProfile.getBatteryCapacity();
        }
        setDisplayCountLocked(mPowerProfile.getNumDisplays());
    }
@@ -11478,10 +11477,8 @@ public class BatteryStatsImpl extends BatteryStats {
            mPerDisplayBatteryStats[i].reset(elapsedRealtimeUs);
        }
        if (mPowerProfile != null) {
        if (mEstimatedBatteryCapacityMah <= 0 && mPowerProfile != null) {
            mEstimatedBatteryCapacityMah = (int) mPowerProfile.getBatteryCapacity();
        } else {
            mEstimatedBatteryCapacityMah = -1;
        }
        mLastLearnedBatteryCapacityUah = -1;
        mMinLearnedBatteryCapacityUah = -1;
@@ -13580,10 +13577,6 @@ public class BatteryStatsImpl extends BatteryStats {
                }
                doWrite = true;
                startNewSession(RESET_REASON_FULL_CHARGE);
                if (chargeUah > 0 && level > 0) {
                    // Only use the reported coulomb charge value if it is supported and reported.
                    mEstimatedBatteryCapacityMah = (int) ((chargeUah / 1000) / (level / 100.0));
                }
                reset = true;
                mDischargeStepTracker.init();
            }
@@ -13699,6 +13692,17 @@ public class BatteryStatsImpl extends BatteryStats {
        }
        int oldStatus = mBatteryStatus;
        if (onBattery) {
            if (mReportedBatteryCapacityMah <= 0) {
                if (chargeFullUah > 0) {
                    mReportedBatteryCapacityMah = chargeFullUah / 1000;
                    mEstimatedBatteryCapacityMah = mReportedBatteryCapacityMah;
                } else if (chargeUah > 0 && level > 25) {
                    // Only use the reported coulomb charge value if it is supported and reported.
                    mReportedBatteryCapacityMah = (int) ((chargeUah / 1000.0) / (level / 100.0));
                    mEstimatedBatteryCapacityMah = mReportedBatteryCapacityMah;
                }
            }
            mDischargeCurrentLevel = level;
            if (!mHistory.isRecordingHistory()) {
                mHistory.startRecordingHistory(elapsedRealtimeMs, uptimeMs, true);
+4 −1
Original line number Diff line number Diff line
@@ -296,7 +296,10 @@ public class BatteryUsageStatsProvider {

    private void populateBatterySessionInfo(BatteryUsageStats.Builder builder,
            BatteryStatsSession session) {
        builder.setBatteryCapacity(session.getEstimatedBatteryCapacity());
        double estimatedBatteryCapacity = session.getEstimatedBatteryCapacity();
        if (estimatedBatteryCapacity > 0) {
            builder.setBatteryCapacity(estimatedBatteryCapacity);
        }
        builder.setBatteryTimeRemainingMs(session.getBatteryTimeRemainingMs());
        builder.setChargeTimeRemainingMs(session.getChargeTimeRemainingMs());
    }
+23 −11
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ public class BatteryUsageStatsProviderTest {

    @Test
    public void test_getBatteryUsageStats() throws IOException {
        final BatteryUsageStats batteryUsageStats = prepareBatteryUsageStats(false);
        final BatteryUsageStats batteryUsageStats = prepareBatteryUsageStats(false, false);

        final List<UidBatteryConsumer> uidBatteryConsumers =
                batteryUsageStats.getUidBatteryConsumers();
@@ -136,7 +136,7 @@ public class BatteryUsageStatsProviderTest {

    @Test
    public void batteryLevelInfo_charging() throws IOException {
        final BatteryUsageStats batteryUsageStats = prepareBatteryUsageStats(true);
        final BatteryUsageStats batteryUsageStats = prepareBatteryUsageStats(true, false);
        assertThat(batteryUsageStats.getBatteryCapacity()).isEqualTo(4000.0);
        assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(1_200_000);
        batteryUsageStats.close();
@@ -144,16 +144,24 @@ public class BatteryUsageStatsProviderTest {

    @Test
    public void batteryLevelInfo_onBattery() throws IOException {
        final BatteryUsageStats batteryUsageStats = prepareBatteryUsageStats(false);
        final BatteryUsageStats batteryUsageStats = prepareBatteryUsageStats(false, false);
        assertThat(batteryUsageStats.getBatteryCapacity()).isEqualTo(4000.0);
        assertThat(batteryUsageStats.getBatteryTimeRemainingMs()).isEqualTo(600_000);
        batteryUsageStats.close();
    }

    @Test
    public void batteryLevelInfo_reportedBatteryCapacity() throws IOException {
        final BatteryUsageStats batteryUsageStats = prepareBatteryUsageStats(false, true);
        // From setBatteryStateLocked(..., 5_000_000, ...)
        assertThat(batteryUsageStats.getBatteryCapacity()).isEqualTo(5000.0);
        batteryUsageStats.close();
    }

    @Ignore("BatteryUsageStatsQuery.includePowerComponents is unsupported")
    @Test
    public void test_selectPowerComponents() throws IOException {
        BatteryStatsImpl batteryStats = prepareBatteryStats(false);
        BatteryStatsImpl batteryStats = prepareBatteryStats(false, true);

        BatteryUsageStatsProvider provider = createBatteryUsageStatsProvider(0);
        final BatteryUsageStats batteryUsageStats =
@@ -178,14 +186,17 @@ public class BatteryUsageStatsProviderTest {
        batteryUsageStats.close();
    }

    private BatteryStatsImpl prepareBatteryStats(boolean plugInAtTheEnd) {
    private BatteryStatsImpl prepareBatteryStats(boolean plugInAtTheEnd,
            boolean fullChargeReported) {
        BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
        batteryStats.setNoAutoReset(true);
        batteryStats.onSystemReady(mContext);

        int chargeFullUah = fullChargeReported ? 5_000_000 : 0;

        synchronized (batteryStats) {
            batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING,
                    100, /* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0, 0,
                    100, /* plugType */ 0, 90, 72, 3700, 3_600_000, chargeFullUah, 0, 0,
                    0, 0);
        }

@@ -245,13 +256,13 @@ public class BatteryUsageStatsProviderTest {

        synchronized (batteryStats) {
            batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING,
                    100, /* plugType */ 0, 60, 72, 3700, 2_600_000, 4_000_000, 0,
                    100, /* plugType */ 0, 60, 72, 3700, 2_600_000, chargeFullUah, 0,
                    100 * MINUTE_IN_MS, 100 * MINUTE_IN_MS, 21000);
        }

        synchronized (batteryStats) {
            batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING,
                    100, /* plugType */ 0, 30, 72, 3700, 1_600_000, 4_000_000, 0,
                    100, /* plugType */ 0, 30, 72, 3700, 1_600_000, chargeFullUah, 0,
                    110 * MINUTE_IN_MS, 110 * MINUTE_IN_MS, 21000);
        }

@@ -259,7 +270,7 @@ public class BatteryUsageStatsProviderTest {
            synchronized (batteryStats) {
                batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_CHARGING,
                        100, /* plugType */ BatteryManager.BATTERY_PLUGGED_USB, 30, 72, 3700,
                        1_600_000, 4_000_000, /* chargeTimeToFullSeconds */ 20 * 60,
                        1_600_000, chargeFullUah, /* chargeTimeToFullSeconds */ 20 * 60,
                        120 * MINUTE_IN_MS, 120 * MINUTE_IN_MS, 22000);
            }
        }
@@ -269,8 +280,9 @@ public class BatteryUsageStatsProviderTest {
        return batteryStats;
    }

    private BatteryUsageStats prepareBatteryUsageStats(boolean plugInAtTheEnd) {
        BatteryStatsImpl batteryStats = prepareBatteryStats(plugInAtTheEnd);
    private BatteryUsageStats prepareBatteryUsageStats(boolean plugInAtTheEnd,
            boolean fullChargeReported) {
        BatteryStatsImpl batteryStats = prepareBatteryStats(plugInAtTheEnd, fullChargeReported);
        BatteryUsageStatsProvider provider = createBatteryUsageStatsProvider(0);

        return provider.getBatteryUsageStats(batteryStats, BatteryUsageStatsQuery.DEFAULT);