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

Commit dc99046e authored by Zaiyue Xue's avatar Zaiyue Xue
Browse files

Write proto for process state usage time in UidBatteryConsumer

Bug: 302469340
Test: presubmit
Change-Id: I2ca4e6c0aa9a3b2bc68c78633c4e5a131f9872c5
parent 4be33b11
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -123,6 +123,12 @@ public final class BatteryUsageStats implements Parcelable, Closeable {

    private static final int STATSD_PULL_ATOM_MAX_BYTES = 45000;

    private static final int[] UID_USAGE_TIME_PROCESS_STATES = {
            BatteryConsumer.PROCESS_STATE_FOREGROUND,
            BatteryConsumer.PROCESS_STATE_BACKGROUND,
            BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE
    };

    private final int mDischargePercentage;
    private final double mBatteryCapacityMah;
    private final long mStatsStartTimestampMs;
@@ -516,6 +522,22 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
            proto.write(
                    BatteryUsageStatsAtomsProto.UidBatteryConsumer.TIME_IN_BACKGROUND_MILLIS,
                    bgMs);
            for (int processState : UID_USAGE_TIME_PROCESS_STATES) {
                final long timeInStateMillis = consumer.getTimeInProcessStateMs(processState);
                if (timeInStateMillis <= 0) {
                    continue;
                }
                final long timeInStateToken = proto.start(
                        BatteryUsageStatsAtomsProto.UidBatteryConsumer.TIME_IN_STATE);
                proto.write(
                        BatteryUsageStatsAtomsProto.UidBatteryConsumer.TimeInState.PROCESS_STATE,
                        processState);
                proto.write(
                        BatteryUsageStatsAtomsProto.UidBatteryConsumer.TimeInState
                                .TIME_IN_STATE_MILLIS,
                        timeInStateMillis);
                proto.end(timeInStateToken);
            }
            proto.end(token);

            if (proto.getRawSize() >= maxRawSize) {
+19 −0
Original line number Diff line number Diff line
@@ -48,6 +48,11 @@ public class BatteryUsageStatsPulledTest {
    private static final int UID_1 = 2000;
    private static final int UID_2 = 3000;
    private static final int UID_3 = 4000;
    private static final int[] UID_USAGE_TIME_PROCESS_STATES = {
            BatteryConsumer.PROCESS_STATE_FOREGROUND,
            BatteryConsumer.PROCESS_STATE_BACKGROUND,
            BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE
    };

    @Test
    public void testGetStatsProto() {
@@ -195,6 +200,20 @@ public class BatteryUsageStatsPulledTest {
        assertEquals("For uid " + uid,
                uidConsumer.getTimeInStateMs(android.os.UidBatteryConsumer.STATE_BACKGROUND),
                uidConsumerProto.timeInBackgroundMillis);
        for (int processState : UID_USAGE_TIME_PROCESS_STATES) {
            final long timeInStateMillis = uidConsumer.getTimeInProcessStateMs(processState);
            if (timeInStateMillis <= 0) {
                continue;
            }
            assertEquals("For uid " + uid + ", process state " + processState,
                    timeInStateMillis,
                    Arrays.stream(uidConsumerProto.timeInState)
                            .filter(timeInState -> timeInState.processState == processState)
                            .findFirst()
                            .orElseThrow()
                            .timeInStateMillis);
        }

        if (expectNullBatteryConsumerData) {
            assertNull("For uid " + uid, uidConsumerProto.batteryConsumerData);
        } else {