From 1003f75bc473834059acdb507a2d89f433130704 Mon Sep 17 00:00:00 2001 From: Marcin Oczeretko Date: Mon, 3 Sep 2018 14:15:57 +0100 Subject: [PATCH] Add perf tests for LooperStats Test: n/a Change-Id: I97e290398ca67d3fda0ffeae723c2cb2d0bc10f3 --- .../src/android/os/LooperStatsPerfTest.java | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 apct-tests/perftests/core/src/android/os/LooperStatsPerfTest.java diff --git a/apct-tests/perftests/core/src/android/os/LooperStatsPerfTest.java b/apct-tests/perftests/core/src/android/os/LooperStatsPerfTest.java new file mode 100644 index 0000000000000..0f880b71c7b14 --- /dev/null +++ b/apct-tests/perftests/core/src/android/os/LooperStatsPerfTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2018 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. + */ + +package android.os; + + +import android.perftests.utils.BenchmarkState; +import android.perftests.utils.PerfStatusReporter; +import android.support.test.filters.LargeTest; +import android.support.test.runner.AndroidJUnit4; + +import com.android.internal.os.CachedDeviceState; +import com.android.internal.os.LooperStats; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + + +/** + * Performance tests for {@link LooperStats}. + */ +@RunWith(AndroidJUnit4.class) +@LargeTest +public class LooperStatsPerfTest { + private static final int DISTINCT_MESSAGE_COUNT = 1000; + + @Rule + public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); + private LooperStats mStats; + private CachedDeviceState mDeviceState; + private HandlerThread mThread; + private Message[] mMessages = new Message[DISTINCT_MESSAGE_COUNT]; + + @Before + public void setUp() { + mStats = new LooperStats(1, DISTINCT_MESSAGE_COUNT - 1); + mDeviceState = new CachedDeviceState(false, false); + mStats.setDeviceState(mDeviceState.getReadonlyClient()); + // The tests are all single-threaded. HandlerThread is created to allow creating Handlers. + mThread = new HandlerThread("UnusedThread"); + mThread.start(); + for (int i = 0; i < DISTINCT_MESSAGE_COUNT; i++) { + mMessages[i] = mThread.getThreadHandler().obtainMessage(i); + } + } + + @After + public void tearDown() { + mThread.quit(); + } + + @Test + public void timeHundredPercentSampling() { + mStats.setSamplingInterval(1); + runScenario(); + } + + @Test + public void timeOnePercentSampling() { + mStats.setSamplingInterval(100); + runScenario(); + } + + @Test + public void timeCollectionDisabled() { + // We do not collect data on charger. + mDeviceState.setCharging(true); + runScenario(); + } + + private void runScenario() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + for (int i = 0; i < DISTINCT_MESSAGE_COUNT; i++) { + Object token = mStats.messageDispatchStarting(); + mStats.messageDispatched(token, mMessages[i]); + } + } + } +}