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

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

Merge "Add batteryTimeRemaining and chargeTimeRemaining to BatteryUsageStats" into sc-dev

parents 8cd1b965 cf2929ff
Loading
Loading
Loading
Loading
+49 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,8 @@ public final class BatteryUsageStats implements Parcelable {
    private final long mStatsStartRealtimeMs;
    private final long mStatsStartRealtimeMs;
    private final double mDischargedPowerLowerBound;
    private final double mDischargedPowerLowerBound;
    private final double mDischargedPowerUpperBound;
    private final double mDischargedPowerUpperBound;
    private final long mBatteryTimeRemainingMs;
    private final long mChargeTimeRemainingMs;
    private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers;
    private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers;
    private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers;
    private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers;
    private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers;
    private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers;
@@ -50,6 +52,8 @@ public final class BatteryUsageStats implements Parcelable {
        mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah;
        mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah;
        mHistoryBuffer = builder.mHistoryBuffer;
        mHistoryBuffer = builder.mHistoryBuffer;
        mHistoryTagPool = builder.mHistoryTagPool;
        mHistoryTagPool = builder.mHistoryTagPool;
        mBatteryTimeRemainingMs = builder.mBatteryTimeRemainingMs;
        mChargeTimeRemainingMs = builder.mChargeTimeRemainingMs;


        double totalPower = 0;
        double totalPower = 0;


@@ -109,6 +113,25 @@ public final class BatteryUsageStats implements Parcelable {
        return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound);
        return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound);
    }
    }


    /**
     * Returns an approximation for how much run time (in milliseconds) is remaining on
     * the battery.  Returns -1 if no time can be computed: either there is not
     * enough current data to make a decision, or the battery is currently
     * charging.
     */
    public long getBatteryTimeRemainingMs() {
        return mBatteryTimeRemainingMs;
    }

    /**
     * Returns an approximation for how much time (in milliseconds) remains until the battery
     * is fully charged.  Returns -1 if no time can be computed: either there is not
     * enough current data to make a decision, or the battery is currently discharging.
     */
    public long getChargeTimeRemainingMs() {
        return mChargeTimeRemainingMs;
    }

    /**
    /**
     * Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully
     * Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully
     * charged), in mAh
     * charged), in mAh
@@ -156,6 +179,8 @@ public final class BatteryUsageStats implements Parcelable {
        mDischargePercentage = source.readInt();
        mDischargePercentage = source.readInt();
        mDischargedPowerLowerBound = source.readDouble();
        mDischargedPowerLowerBound = source.readDouble();
        mDischargedPowerUpperBound = source.readDouble();
        mDischargedPowerUpperBound = source.readDouble();
        mBatteryTimeRemainingMs = source.readLong();
        mChargeTimeRemainingMs = source.readLong();
        mUidBatteryConsumers = new ArrayList<>();
        mUidBatteryConsumers = new ArrayList<>();
        source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader());
        source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader());
        mSystemBatteryConsumers = new ArrayList<>();
        mSystemBatteryConsumers = new ArrayList<>();
@@ -194,6 +219,8 @@ public final class BatteryUsageStats implements Parcelable {
        dest.writeInt(mDischargePercentage);
        dest.writeInt(mDischargePercentage);
        dest.writeDouble(mDischargedPowerLowerBound);
        dest.writeDouble(mDischargedPowerLowerBound);
        dest.writeDouble(mDischargedPowerUpperBound);
        dest.writeDouble(mDischargedPowerUpperBound);
        dest.writeLong(mBatteryTimeRemainingMs);
        dest.writeLong(mChargeTimeRemainingMs);
        dest.writeParcelableList(mUidBatteryConsumers, flags);
        dest.writeParcelableList(mUidBatteryConsumers, flags);
        dest.writeParcelableList(mSystemBatteryConsumers, flags);
        dest.writeParcelableList(mSystemBatteryConsumers, flags);
        dest.writeParcelableList(mUserBatteryConsumers, flags);
        dest.writeParcelableList(mUserBatteryConsumers, flags);
@@ -237,6 +264,8 @@ public final class BatteryUsageStats implements Parcelable {
        private int mDischargePercentage;
        private int mDischargePercentage;
        private double mDischargedPowerLowerBoundMah;
        private double mDischargedPowerLowerBoundMah;
        private double mDischargedPowerUpperBoundMah;
        private double mDischargedPowerUpperBoundMah;
        private long mBatteryTimeRemainingMs = -1;
        private long mChargeTimeRemainingMs = -1;
        private final SparseArray<UidBatteryConsumer.Builder> mUidBatteryConsumerBuilders =
        private final SparseArray<UidBatteryConsumer.Builder> mUidBatteryConsumerBuilders =
                new SparseArray<>();
                new SparseArray<>();
        private final SparseArray<SystemBatteryConsumer.Builder> mSystemBatteryConsumerBuilders =
        private final SparseArray<SystemBatteryConsumer.Builder> mSystemBatteryConsumerBuilders =
@@ -288,6 +317,26 @@ public final class BatteryUsageStats implements Parcelable {
            return this;
            return this;
        }
        }


        /**
         * Sets an approximation for how much time (in milliseconds) remains until the battery
         * is fully discharged.
         */
        @NonNull
        public Builder setBatteryTimeRemainingMs(long batteryTimeRemainingMs) {
            mBatteryTimeRemainingMs = batteryTimeRemainingMs;
            return this;
        }

        /**
         * Sets an approximation for how much time (in milliseconds) remains until the battery
         * is fully charged.
         */
        @NonNull
        public Builder setChargeTimeRemainingMs(long chargeTimeRemainingMs) {
            mChargeTimeRemainingMs = chargeTimeRemainingMs;
            return this;
        }

        /**
        /**
         * Sets the parceled recent history.
         * Sets the parceled recent history.
         */
         */
+12 −2
Original line number Original line Diff line number Diff line
@@ -27,10 +27,10 @@ import java.util.List;
/**
/**
 * Estimates the battery discharge amounts.
 * Estimates the battery discharge amounts.
 */
 */
public class DischargedPowerCalculator extends PowerCalculator {
public class BatteryChargeCalculator extends PowerCalculator {
    private final double mBatteryCapacity;
    private final double mBatteryCapacity;


    public DischargedPowerCalculator(PowerProfile powerProfile) {
    public BatteryChargeCalculator(PowerProfile powerProfile) {
        mBatteryCapacity = powerProfile.getBatteryCapacity();
        mBatteryCapacity = powerProfile.getBatteryCapacity();
    }
    }


@@ -42,6 +42,16 @@ public class DischargedPowerCalculator extends PowerCalculator {
                .setDischargedPowerRange(
                .setDischargedPowerRange(
                        batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100,
                        batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100,
                        batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100);
                        batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100);

        final long batteryTimeRemainingMs = batteryStats.computeBatteryTimeRemaining(rawRealtimeUs);
        if (batteryTimeRemainingMs != -1) {
            builder.setBatteryTimeRemainingMs(batteryTimeRemainingMs / 1000);
        }

        final long chargeTimeRemainingMs = batteryStats.computeChargeTimeRemaining(rawRealtimeUs);
        if (chargeTimeRemainingMs != -1) {
            builder.setChargeTimeRemainingMs(chargeTimeRemainingMs / 1000);
        }
    }
    }


    @Override
    @Override
+1 −1
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ public class BatteryUsageStatsProvider {
                mPowerCalculators = new ArrayList<>();
                mPowerCalculators = new ArrayList<>();


                // Power calculators are applied in the order of registration
                // Power calculators are applied in the order of registration
                mPowerCalculators.add(new DischargedPowerCalculator(mPowerProfile));
                mPowerCalculators.add(new BatteryChargeCalculator(mPowerProfile));
                mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile));
                mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile));
                mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile));
                mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile));
                mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile));
                mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile));
+23 −9
Original line number Original line Diff line number Diff line
@@ -31,7 +31,7 @@ import org.junit.runner.RunWith;


@RunWith(AndroidJUnit4.class)
@RunWith(AndroidJUnit4.class)
@SmallTest
@SmallTest
public class DischargedPowerCalculatorTest {
public class BatteryChargeCalculatorTest {
    private static final double PRECISION = 0.00001;
    private static final double PRECISION = 0.00001;


    @Rule
    @Rule
@@ -40,27 +40,41 @@ public class DischargedPowerCalculatorTest {


    @Test
    @Test
    public void testDischargeTotals() {
    public void testDischargeTotals() {
        BatteryChargeCalculator calculator =
                new BatteryChargeCalculator(mStatsRule.getPowerProfile());

        final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
        final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();


        mStatsRule.setTime(1000, 1000);
        mStatsRule.setTime(1000, 1000);
        batteryStats.resetAllStatsCmdLocked();
        batteryStats.resetAllStatsCmdLocked();
        batteryStats.setNoAutoReset(true);
        batteryStats.setNoAutoReset(true);
        batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
        batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
                /* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0, 1_000_000,
                /* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0,
                1_000_000, 1_000_000);
                1_000_000, 1_000_000, 1_000_000);
        batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
        batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
                /* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0, 2_000_000,
                /* plugType */ 0, 85, 72, 3700, 3_000_000, 4_000_000, 0,
                2_000_000, 2_000_000);
                1_500_000, 1_500_000, 1_500_000);

        batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
        DischargedPowerCalculator calculator =
                /* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0,
                new DischargedPowerCalculator(mStatsRule.getPowerProfile());
                2_000_000, 2_000_000, 2_000_000);


        final BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator);
        BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator);


        assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10);
        assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10);
        assertThat(batteryUsageStats.getDischargedPowerRange().getLower())
        assertThat(batteryUsageStats.getDischargedPowerRange().getLower())
                .isWithin(PRECISION).of(360.0);
                .isWithin(PRECISION).of(360.0);
        assertThat(batteryUsageStats.getDischargedPowerRange().getUpper())
        assertThat(batteryUsageStats.getDischargedPowerRange().getUpper())
                .isWithin(PRECISION).of(400.0);
                .isWithin(PRECISION).of(400.0);
        assertThat(batteryUsageStats.getBatteryTimeRemainingMs()).isEqualTo(8_000_000);
        assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(-1);

        // Plug in
        batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_CHARGING, 100,
                BatteryManager.BATTERY_PLUGGED_USB, 80, 72, 3700, 2_400_000, 4_000_000, 100,
                4_000_000, 4_000_000, 4_000_000);

        batteryUsageStats = mStatsRule.apply(calculator);

        assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(100_000);
    }
    }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import org.junit.runners.Suite;
@Suite.SuiteClasses({
@Suite.SuiteClasses({
        AmbientDisplayPowerCalculatorTest.class,
        AmbientDisplayPowerCalculatorTest.class,
        AudioPowerCalculatorTest.class,
        AudioPowerCalculatorTest.class,
        BatteryChargeCalculatorTest.class,
        BatteryStatsCpuTimesTest.class,
        BatteryStatsCpuTimesTest.class,
        BatteryStatsBackgroundStatsTest.class,
        BatteryStatsBackgroundStatsTest.class,
        BatteryStatsBinderCallStatsTest.class,
        BatteryStatsBinderCallStatsTest.class,
@@ -49,7 +50,6 @@ import org.junit.runners.Suite;
        CameraPowerCalculatorTest.class,
        CameraPowerCalculatorTest.class,
        CpuPowerCalculatorTest.class,
        CpuPowerCalculatorTest.class,
        CustomMeasuredPowerCalculatorTest.class,
        CustomMeasuredPowerCalculatorTest.class,
        DischargedPowerCalculatorTest.class,
        FlashlightPowerCalculatorTest.class,
        FlashlightPowerCalculatorTest.class,
        GnssPowerCalculatorTest.class,
        GnssPowerCalculatorTest.class,
        IdlePowerCalculatorTest.class,
        IdlePowerCalculatorTest.class,