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

Commit 38f1fb8d authored by Pechetty Sravani (xWF)'s avatar Pechetty Sravani (xWF) Committed by Android (Google) Code Review
Browse files

Revert "Add test for BatteryUsageStatsPerUid atom"

This reverts commit 689b7d58.

Reason for revert: Droidmonitor created revert due to b/353619532. Will be verifying through ABTD before submission.

Change-Id: I77fa85cbfdae32b41c06a34baee98bfe98cc857b
parent 689b7d58
Loading
Loading
Loading
Loading
+30 −0
Original line number Original line Diff line number Diff line
package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

android_test {
    name: "BatteryUsageStatsProtoTests",
    srcs: ["src/**/*.java"],

    static_libs: [
        "androidx.test.rules",
        "junit",
        "mockito-target-minus-junit4",
        "platform-test-annotations",
        "platformprotosnano",
        "statsdprotolite",
        "truth",
    ],

    libs: ["android.test.runner"],

    platform_apis: true,
    certificate: "platform",

    test_suites: ["device-tests"],
}
+28 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2021 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.android.frameworks.core.batteryusagestatsprototests">

    <uses-permission android:name="android.permission.BATTERY_STATS"/>

    <instrumentation
        android:name="androidx.test.runner.AndroidJUnitRunner"
        android:targetPackage="com.android.frameworks.core.batteryusagestatsprototests"
        android:label="BatteryUsageStats Proto Tests" />

</manifest>
+17 −246
Original line number Original line Diff line number Diff line
@@ -13,7 +13,7 @@
 * See the License for the specific language governing permissions and
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * limitations under the License.
 */
 */
package com.android.server.power.stats;
package com.android.internal.os;


import static android.os.BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE;
import static android.os.BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE;


@@ -23,262 +23,39 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;


import android.os.AggregateBatteryConsumer;
import android.os.AggregateBatteryConsumer;
import android.os.BatteryConsumer;
import android.os.BatteryConsumer;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStats;
import android.os.Process;
import android.os.UidBatteryConsumer;
import android.os.UidBatteryConsumer;
import android.os.nano.BatteryUsageStatsAtomsProto;
import android.os.nano.BatteryUsageStatsAtomsProto;
import android.os.nano.BatteryUsageStatsAtomsProto.BatteryConsumerData.PowerComponentUsage;
import android.os.nano.BatteryUsageStatsAtomsProto.BatteryConsumerData.PowerComponentUsage;
import android.platform.test.ravenwood.RavenwoodRule;
import android.util.StatsEvent;


import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import com.android.server.am.BatteryStatsService;

import com.google.protobuf.nano.InvalidProtocolBufferNanoException;
import com.google.protobuf.nano.InvalidProtocolBufferNanoException;


import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.List;


@SmallTest
public class BatteryUsageStatsAtomTest {


    @Rule
@SmallTest
    public final RavenwoodRule mRavenwood = new RavenwoodRule();
public class BatteryUsageStatsPulledTest {


    private static final int UID_0 = 1000;
    private static final int UID_0 = 1000;
    private static final int UID_1 = 2000;
    private static final int UID_1 = 2000;
    private static final int UID_2 = 3000;
    private static final int UID_2 = 3000;
    private static final int UID_3 = 4000;
    private static final int UID_3 = 4000;

    private static final int[] UID_USAGE_TIME_PROCESS_STATES = {
    @Test
    public void testAtom_BatteryUsageStatsPerUid() {
        final BatteryUsageStats bus = buildBatteryUsageStats();
        BatteryStatsService.FrameworkStatsLogger statsLogger =
                mock(BatteryStatsService.FrameworkStatsLogger.class);

        List<StatsEvent> actual = new ArrayList<>();
        new BatteryStatsService.StatsPerUidLogger(statsLogger).logStats(bus, actual);

        // Device-wide totals
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                Process.INVALID_UID,
                BatteryConsumer.PROCESS_STATE_UNSPECIFIED,
                0L,
                "cpu",
                30000.0f,
                20100.0f,
                20300L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                Process.INVALID_UID,
                BatteryConsumer.PROCESS_STATE_UNSPECIFIED,
                0L,
                "camera",
                30000.0f,
                20150.0f,
                0L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                Process.INVALID_UID,
                BatteryConsumer.PROCESS_STATE_UNSPECIFIED,
                0L,
                "CustomConsumer1",
                30000.0f,
                20200.0f,
                20400L
        );

        // Per-proc state estimates for UID_0
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_UNSPECIFIED,
                0L,
                "screen",
                1650.0f,
                300.0f,
                0L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_UNSPECIFIED,
                0L,
                "cpu",
                1650.0f,
                400.0f,
                600L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_FOREGROUND,
                1000L,
                "cpu",
                1650.0f,
                9100.0f,
                8100L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_BACKGROUND,
                2000L,
                "cpu",
                1650.0f,
                9200.0f,
                8200L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE,
                0L,
                "cpu",
                1650.0f,
                9300.0f,
                8400L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_CACHED,
                0L,
                "cpu",
                1650.0f,
                9400.0f,
                0L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_FOREGROUND,
                1000L,
                "CustomConsumer1",
                1650.0f,
                450.0f,
                0L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
                BatteryConsumer.PROCESS_STATE_BACKGROUND,
                2000L,
                "CustomConsumer1",
                1650.0f,
                450.0f,
                0L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
            BatteryConsumer.PROCESS_STATE_FOREGROUND,
            BatteryConsumer.PROCESS_STATE_FOREGROUND,
                1000L,
                "CustomConsumer2",
                1650.0f,
                500.0f,
                800L
        );
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_0,
            BatteryConsumer.PROCESS_STATE_BACKGROUND,
            BatteryConsumer.PROCESS_STATE_BACKGROUND,
                2000L,
            BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE
                "CustomConsumer2",
    };
                1650.0f,
                500.0f,
                800L
        );

        // Nothing for UID_1, because its power consumption is 0

        // Only "screen" is populated for UID_2
        verify(statsLogger).buildStatsEvent(
                1000L,
                20000L,
                10000L,
                20,
                1234L,
                UID_2,
                BatteryConsumer.PROCESS_STATE_UNSPECIFIED,
                0L,
                "screen",
                766.0f,
                766.0f,
                0L
        );

        verifyNoMoreInteractions(statsLogger);
    }


    @Test
    @Test
    public void testAtom_BatteryUsageStatsAtomsProto() {
    public void testGetStatsProto() {
        final BatteryUsageStats bus = buildBatteryUsageStats();
        final BatteryUsageStats bus = buildBatteryUsageStats();
        final byte[] bytes = bus.getStatsProto();
        final byte[] bytes = bus.getStatsProto();
        BatteryUsageStatsAtomsProto proto;
        BatteryUsageStatsAtomsProto proto;
@@ -291,7 +68,9 @@ public class BatteryUsageStatsAtomTest {


        assertEquals(bus.getStatsStartTimestamp(), proto.sessionStartMillis);
        assertEquals(bus.getStatsStartTimestamp(), proto.sessionStartMillis);
        assertEquals(bus.getStatsEndTimestamp(), proto.sessionEndMillis);
        assertEquals(bus.getStatsEndTimestamp(), proto.sessionEndMillis);
        assertEquals(10000, proto.sessionDurationMillis);
        assertEquals(
                bus.getStatsEndTimestamp() - bus.getStatsStartTimestamp(),
                proto.sessionDurationMillis);
        assertEquals(bus.getDischargePercentage(), proto.sessionDischargePercentage);
        assertEquals(bus.getDischargePercentage(), proto.sessionDischargePercentage);
        assertEquals(bus.getDischargeDurationMs(), proto.dischargeDurationMillis);
        assertEquals(bus.getDischargeDurationMs(), proto.dischargeDurationMillis);


@@ -311,8 +90,8 @@ public class BatteryUsageStatsAtomTest {
        final List<android.os.UidBatteryConsumer> uidConsumers = bus.getUidBatteryConsumers();
        final List<android.os.UidBatteryConsumer> uidConsumers = bus.getUidBatteryConsumers();
        uidConsumers.sort((a, b) -> a.getUid() - b.getUid());
        uidConsumers.sort((a, b) -> a.getUid() - b.getUid());


        final BatteryUsageStatsAtomsProto.UidBatteryConsumer[] uidConsumersProto =
        final BatteryUsageStatsAtomsProto.UidBatteryConsumer[] uidConsumersProto
                proto.uidBatteryConsumers;
                = proto.uidBatteryConsumers;
        Arrays.sort(uidConsumersProto, (a, b) -> a.uid - b.uid);
        Arrays.sort(uidConsumersProto, (a, b) -> a.uid - b.uid);


        // UID_0 - After sorting, UID_0 should be in position 0 for both data structures
        // UID_0 - After sorting, UID_0 should be in position 0 for both data structures
@@ -407,12 +186,6 @@ public class BatteryUsageStatsAtomTest {
        }
        }
    }
    }


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

    private void assertSameUidBatteryConsumer(
    private void assertSameUidBatteryConsumer(
            android.os.UidBatteryConsumer uidConsumer,
            android.os.UidBatteryConsumer uidConsumer,
            BatteryUsageStatsAtomsProto.UidBatteryConsumer uidConsumerProto,
            BatteryUsageStatsAtomsProto.UidBatteryConsumer uidConsumerProto,
@@ -422,10 +195,10 @@ public class BatteryUsageStatsAtomTest {
        assertEquals("Uid consumers had mismatched uids", uid, uidConsumer.getUid());
        assertEquals("Uid consumers had mismatched uids", uid, uidConsumer.getUid());


        assertEquals("For uid " + uid,
        assertEquals("For uid " + uid,
                uidConsumer.getTimeInProcessStateMs(BatteryConsumer.PROCESS_STATE_FOREGROUND),
                uidConsumer.getTimeInStateMs(android.os.UidBatteryConsumer.STATE_FOREGROUND),
                uidConsumerProto.timeInForegroundMillis);
                uidConsumerProto.timeInForegroundMillis);
        assertEquals("For uid " + uid,
        assertEquals("For uid " + uid,
                uidConsumer.getTimeInProcessStateMs(BatteryConsumer.PROCESS_STATE_BACKGROUND),
                uidConsumer.getTimeInStateMs(android.os.UidBatteryConsumer.STATE_BACKGROUND),
                uidConsumerProto.timeInBackgroundMillis);
                uidConsumerProto.timeInBackgroundMillis);
        for (int processState : UID_USAGE_TIME_PROCESS_STATES) {
        for (int processState : UID_USAGE_TIME_PROCESS_STATES) {
            final long timeInStateMillis = uidConsumer.getTimeInProcessStateMs(processState);
            final long timeInStateMillis = uidConsumer.getTimeInProcessStateMs(processState);
@@ -492,9 +265,7 @@ public class BatteryUsageStatsAtomTest {
                        .setDischargePercentage(20)
                        .setDischargePercentage(20)
                        .setDischargedPowerRange(1000, 2000)
                        .setDischargedPowerRange(1000, 2000)
                        .setDischargeDurationMs(1234)
                        .setDischargeDurationMs(1234)
                        .setStatsStartTimestamp(1000)
                        .setStatsStartTimestamp(1000);
                        .setStatsEndTimestamp(20000)
                        .setStatsDuration(10000);
        final UidBatteryConsumer.Builder uidBuilder = builder
        final UidBatteryConsumer.Builder uidBuilder = builder
                .getOrCreateUidBatteryConsumerBuilder(UID_0)
                .getOrCreateUidBatteryConsumerBuilder(UID_0)
                .setPackageWithHighestDrain("myPackage0")
                .setPackageWithHighestDrain("myPackage0")
+9 −47
Original line number Original line Diff line number Diff line
@@ -102,7 +102,6 @@ import android.util.StatsEvent;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.IBatteryStats;
import com.android.internal.app.IBatteryStats;
import com.android.internal.os.BinderCallsStats;
import com.android.internal.os.BinderCallsStats;
import com.android.internal.os.Clock;
import com.android.internal.os.Clock;
@@ -1192,7 +1191,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                                    .setMinConsumedPowerThreshold(minConsumedPowerThreshold)
                                    .setMinConsumedPowerThreshold(minConsumedPowerThreshold)
                                    .build();
                                    .build();
                    bus = getBatteryUsageStats(List.of(query)).get(0);
                    bus = getBatteryUsageStats(List.of(query)).get(0);
                    return new StatsPerUidLogger(new FrameworkStatsLogger()).logStats(bus, data);
                    return StatsPerUidLogger.logStats(bus, data);
                }
                }
                default:
                default:
                    throw new UnsupportedOperationException("Unknown tagId=" + atomTag);
                    throw new UnsupportedOperationException("Unknown tagId=" + atomTag);
@@ -1205,35 +1204,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        }
        }
    }
    }


    public static class FrameworkStatsLogger {
    private static class StatsPerUidLogger {
        /**
         * Wrapper for the FrameworkStatsLog.buildStatsEvent method that makes it easier
         * for mocking.
         */
        @VisibleForTesting
        public StatsEvent buildStatsEvent(long sessionStartTs, long sessionEndTs,
                long sessionDuration, int sessionDischargePercentage, long sessionDischargeDuration,
                int uid, @BatteryConsumer.ProcessState int processState, long timeInStateMillis,
                String powerComponentName, float totalConsumedPowerMah, float powerComponentMah,
                long powerComponentDurationMillis) {
            return FrameworkStatsLog.buildStatsEvent(
                    FrameworkStatsLog.BATTERY_USAGE_STATS_PER_UID,
                    sessionStartTs,
                    sessionEndTs,
                    sessionDuration,
                    sessionDischargePercentage,
                    sessionDischargeDuration,
                    uid,
                    processState,
                    timeInStateMillis,
                    powerComponentName,
                    totalConsumedPowerMah,
                    powerComponentMah,
                    powerComponentDurationMillis);
        }
    }

    public static class StatsPerUidLogger {


        private static final int STATSD_METRIC_MAX_DIMENSIONS_COUNT = 3000;
        private static final int STATSD_METRIC_MAX_DIMENSIONS_COUNT = 3000;


@@ -1253,18 +1224,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                long dischargeDuration) {}
                long dischargeDuration) {}
        ;
        ;


        private final FrameworkStatsLogger mFrameworkStatsLogger;
        static int logStats(BatteryUsageStats bus, List<StatsEvent> data) {

        public StatsPerUidLogger(FrameworkStatsLogger frameworkStatsLogger) {
            mFrameworkStatsLogger = frameworkStatsLogger;
        }

        /**
         * Generates StatsEvents for the supplied battery usage stats and adds them to
         * the supplied list.
         */
        @VisibleForTesting
        public int logStats(BatteryUsageStats bus, List<StatsEvent> data) {
            final SessionInfo sessionInfo =
            final SessionInfo sessionInfo =
                    new SessionInfo(
                    new SessionInfo(
                            bus.getStatsStartTimestamp(),
                            bus.getStatsStartTimestamp(),
@@ -1380,7 +1340,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
            return StatsManager.PULL_SUCCESS;
            return StatsManager.PULL_SUCCESS;
        }
        }


        private boolean addStatsForPredefinedComponent(
        private static boolean addStatsForPredefinedComponent(
                List<StatsEvent> data,
                List<StatsEvent> data,
                SessionInfo sessionInfo,
                SessionInfo sessionInfo,
                int uid,
                int uid,
@@ -1420,7 +1380,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                    powerComponentDurationMillis);
                    powerComponentDurationMillis);
        }
        }


        private boolean addStatsForCustomComponent(
        private static boolean addStatsForCustomComponent(
                List<StatsEvent> data,
                List<StatsEvent> data,
                SessionInfo sessionInfo,
                SessionInfo sessionInfo,
                int uid,
                int uid,
@@ -1462,7 +1422,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
         * Returns true on success and false if reached max atoms capacity and no more atoms should
         * Returns true on success and false if reached max atoms capacity and no more atoms should
         * be added
         * be added
         */
         */
        private boolean addStatsAtom(
        private static boolean addStatsAtom(
                List<StatsEvent> data,
                List<StatsEvent> data,
                SessionInfo sessionInfo,
                SessionInfo sessionInfo,
                int uid,
                int uid,
@@ -1472,7 +1432,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                float totalConsumedPowerMah,
                float totalConsumedPowerMah,
                float powerComponentMah,
                float powerComponentMah,
                long powerComponentDurationMillis) {
                long powerComponentDurationMillis) {
            data.add(mFrameworkStatsLogger.buildStatsEvent(
            data.add(
                    FrameworkStatsLog.buildStatsEvent(
                            FrameworkStatsLog.BATTERY_USAGE_STATS_PER_UID,
                            sessionInfo.startTs(),
                            sessionInfo.startTs(),
                            sessionInfo.endTs(),
                            sessionInfo.endTs(),
                            sessionInfo.duration(),
                            sessionInfo.duration(),
+0 −1
Original line number Original line Diff line number Diff line
@@ -59,7 +59,6 @@ android_ravenwood_test {
    name: "PowerStatsTestsRavenwood",
    name: "PowerStatsTestsRavenwood",
    static_libs: [
    static_libs: [
        "services.core",
        "services.core",
        "platformprotosnano",
        "coretests-aidl",
        "coretests-aidl",
        "ravenwood-junit",
        "ravenwood-junit",
        "truth",
        "truth",