summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Olivier Gaillard <gaillard@google.com> 2018-10-26 14:16:48 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-10-26 14:16:48 +0000
commit91559181e41e1008536f6be1785b95cb8638186c (patch)
treeb71d473f66b1a7b7e6e1b04594e6b627715fc273
parentd49325370bee9e19272b92a3cfd3e714d10a6a6a (diff)
parent8a3e20a76c15aa0b05d7014929be40128f4f8c4e (diff)
Merge "Update BinderCallsStats perf tests to use a more realistic workload."
-rw-r--r--apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java51
-rw-r--r--core/java/com/android/internal/os/BinderCallsStats.java2
2 files changed, 46 insertions, 7 deletions
diff --git a/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java b/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java
index d8d4a6efb6e8..5be0cb025105 100644
--- a/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java
+++ b/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java
@@ -38,6 +38,23 @@ import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class BinderCallsStatsPerfTest {
+ private static final int DEFAULT_BUCKET_SIZE = 1000;
+ static class FakeCpuTimeBinderCallsStats extends BinderCallsStats {
+ private int mTimeMs;
+
+ FakeCpuTimeBinderCallsStats() {
+ super(new BinderCallsStats.Injector());
+ setDeviceState(new CachedDeviceState(false, false).getReadonlyClient());
+ }
+
+ protected long getThreadTimeMicro() {
+ return mTimeMs++;
+ }
+
+ protected long getElapsedRealtimeMicro() {
+ return mTimeMs++;
+ }
+ }
@Rule
public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
@@ -57,28 +74,50 @@ public class BinderCallsStatsPerfTest {
@Test
public void timeCallSession() {
mBinderCallsStats.setDetailedTracking(true);
- runScenario();
+ runScenario(DEFAULT_BUCKET_SIZE);
}
@Test
public void timeCallSessionOnePercentSampling() {
mBinderCallsStats.setDetailedTracking(false);
mBinderCallsStats.setSamplingInterval(100);
- runScenario();
+ runScenario(DEFAULT_BUCKET_SIZE);
}
@Test
public void timeCallSessionTrackingDisabled() {
mBinderCallsStats.setDetailedTracking(false);
- runScenario();
+ runScenario(DEFAULT_BUCKET_SIZE);
+ }
+
+ @Test
+ public void timeCallSession_1000_buckets_cpuNotRecorded() {
+ mBinderCallsStats = new FakeCpuTimeBinderCallsStats();
+ mBinderCallsStats.setSamplingInterval(1);
+ runScenario(/* max bucket size */ 1000);
+ }
+
+ @Test
+ public void timeCallSession_500_buckets_cpuNotRecorded() {
+ mBinderCallsStats = new FakeCpuTimeBinderCallsStats();
+ mBinderCallsStats.setSamplingInterval(1);
+ runScenario(/* max bucket size */ 500);
+ }
+
+ @Test
+ public void timeCallSession_100_buckets_cpuNotRecorded() {
+ mBinderCallsStats = new FakeCpuTimeBinderCallsStats();
+ mBinderCallsStats.setSamplingInterval(1);
+ runScenario(/* max bucket size */ 100);
}
- private void runScenario() {
+ // There will be a warmup time of maxBucketSize to initialize the map of CallStat.
+ private void runScenario(int maxBucketSize) {
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
Binder b = new Binder();
while (state.keepRunning()) {
- for (int i = 0; i < 1000; i++) {
- CallSession s = mBinderCallsStats.callStarted(b, i % 100);
+ for (int i = 0; i < 10000; i++) {
+ CallSession s = mBinderCallsStats.callStarted(b, i % maxBucketSize);
mBinderCallsStats.callEnded(s, 0, 0);
}
}
diff --git a/core/java/com/android/internal/os/BinderCallsStats.java b/core/java/com/android/internal/os/BinderCallsStats.java
index f5d768c4123f..70fc72fac8a6 100644
--- a/core/java/com/android/internal/os/BinderCallsStats.java
+++ b/core/java/com/android/internal/os/BinderCallsStats.java
@@ -428,7 +428,7 @@ public class BinderCallsStats implements BinderInternal.Observer {
return SystemClock.elapsedRealtimeNanos() / 1000;
}
- private boolean shouldRecordDetailedData() {
+ protected boolean shouldRecordDetailedData() {
return mRandom.nextInt() % mPeriodicSamplingInterval == 0;
}