diff options
| author | 2018-10-26 14:16:48 +0000 | |
|---|---|---|
| committer | 2018-10-26 14:16:48 +0000 | |
| commit | 91559181e41e1008536f6be1785b95cb8638186c (patch) | |
| tree | b71d473f66b1a7b7e6e1b04594e6b627715fc273 | |
| parent | d49325370bee9e19272b92a3cfd3e714d10a6a6a (diff) | |
| parent | 8a3e20a76c15aa0b05d7014929be40128f4f8c4e (diff) | |
Merge "Update BinderCallsStats perf tests to use a more realistic workload."
| -rw-r--r-- | apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java | 51 | ||||
| -rw-r--r-- | core/java/com/android/internal/os/BinderCallsStats.java | 2 |
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; } |