Loading apct-tests/perftests/core/src/java/lang/perftests/SystemPerfTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.util.concurrent.TimeUnit; @RunWith(AndroidJUnit4.class) @LargeTest public class SystemPerfTest { Loading @@ -43,4 +45,19 @@ public class SystemPerfTest { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) {} } void spinBlock(long durationNs) { long start = System.nanoTime(); while (System.nanoTime() - start < durationNs) {} } @Test public void testBenchmarkPauseResumeOverhead() { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { state.pauseTiming(); spinBlock(TimeUnit.MICROSECONDS.toNanos(5)); state.resumeTiming(); } } } apct-tests/perftests/utils/src/android/perftests/utils/BenchmarkState.java +12 −10 Original line number Diff line number Diff line Loading @@ -43,13 +43,13 @@ import java.util.concurrent.TimeUnit; * } */ public final class BenchmarkState { private static final String TAG = "BenchmarkState"; private static final int NOT_STARTED = 0; // The benchmark has not started yet. private static final int WARMUP = 1; // The benchmark is warming up. private static final int RUNNING = 2; // The benchmark is running. private static final int RUNNING_PAUSED = 3; // The benchmark is temporary paused. private static final int FINISHED = 4; // The benchmark has stopped. private static final int FINISHED = 3; // The benchmark has stopped. private int mState = NOT_STARTED; // Current benchmark state. Loading @@ -63,6 +63,7 @@ public final class BenchmarkState { private static final int REPEAT_COUNT = 5; private long mStartTimeNs = 0; // Previously captured System.nanoTime(). private boolean mPaused; private long mPausedTimeNs = 0; // The System.nanoTime() when the pauseTiming() is called. private long mPausedDurationNs = 0; // The duration of paused state in nano sec. Loading Loading @@ -118,24 +119,24 @@ public final class BenchmarkState { // Stops the benchmark timer. // This method can be called only when the timer is running. public void pauseTiming() { if (mState == RUNNING_PAUSED) { if (mPaused) { throw new IllegalStateException( "Unable to pause the benchmark. The benchmark has already paused."); } mPausedTimeNs = System.nanoTime(); mState = RUNNING_PAUSED; mPaused = true; } // Starts the benchmark timer. // This method can be called only when the timer is stopped. public void resumeTiming() { if (mState == RUNNING) { if (!mPaused) { throw new IllegalStateException( "Unable to resume the benchmark. The benchmark is already running."); } mPausedDurationNs += System.nanoTime() - mPausedTimeNs; mPausedTimeNs = 0; mState = RUNNING; mPaused = false; } private void beginWarmup() { Loading Loading @@ -194,11 +195,12 @@ public final class BenchmarkState { if (mIteration >= mMaxIterations) { return startNextTestRun(); } return true; case RUNNING_PAUSED: if (mPaused) { throw new IllegalStateException( "Benchmark step finished with paused state. " + "Resume the benchmark before finishing each step."); } return true; case FINISHED: throw new IllegalStateException("The benchmark has finished."); default: Loading Loading
apct-tests/perftests/core/src/java/lang/perftests/SystemPerfTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.util.concurrent.TimeUnit; @RunWith(AndroidJUnit4.class) @LargeTest public class SystemPerfTest { Loading @@ -43,4 +45,19 @@ public class SystemPerfTest { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) {} } void spinBlock(long durationNs) { long start = System.nanoTime(); while (System.nanoTime() - start < durationNs) {} } @Test public void testBenchmarkPauseResumeOverhead() { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { state.pauseTiming(); spinBlock(TimeUnit.MICROSECONDS.toNanos(5)); state.resumeTiming(); } } }
apct-tests/perftests/utils/src/android/perftests/utils/BenchmarkState.java +12 −10 Original line number Diff line number Diff line Loading @@ -43,13 +43,13 @@ import java.util.concurrent.TimeUnit; * } */ public final class BenchmarkState { private static final String TAG = "BenchmarkState"; private static final int NOT_STARTED = 0; // The benchmark has not started yet. private static final int WARMUP = 1; // The benchmark is warming up. private static final int RUNNING = 2; // The benchmark is running. private static final int RUNNING_PAUSED = 3; // The benchmark is temporary paused. private static final int FINISHED = 4; // The benchmark has stopped. private static final int FINISHED = 3; // The benchmark has stopped. private int mState = NOT_STARTED; // Current benchmark state. Loading @@ -63,6 +63,7 @@ public final class BenchmarkState { private static final int REPEAT_COUNT = 5; private long mStartTimeNs = 0; // Previously captured System.nanoTime(). private boolean mPaused; private long mPausedTimeNs = 0; // The System.nanoTime() when the pauseTiming() is called. private long mPausedDurationNs = 0; // The duration of paused state in nano sec. Loading Loading @@ -118,24 +119,24 @@ public final class BenchmarkState { // Stops the benchmark timer. // This method can be called only when the timer is running. public void pauseTiming() { if (mState == RUNNING_PAUSED) { if (mPaused) { throw new IllegalStateException( "Unable to pause the benchmark. The benchmark has already paused."); } mPausedTimeNs = System.nanoTime(); mState = RUNNING_PAUSED; mPaused = true; } // Starts the benchmark timer. // This method can be called only when the timer is stopped. public void resumeTiming() { if (mState == RUNNING) { if (!mPaused) { throw new IllegalStateException( "Unable to resume the benchmark. The benchmark is already running."); } mPausedDurationNs += System.nanoTime() - mPausedTimeNs; mPausedTimeNs = 0; mState = RUNNING; mPaused = false; } private void beginWarmup() { Loading Loading @@ -194,11 +195,12 @@ public final class BenchmarkState { if (mIteration >= mMaxIterations) { return startNextTestRun(); } return true; case RUNNING_PAUSED: if (mPaused) { throw new IllegalStateException( "Benchmark step finished with paused state. " + "Resume the benchmark before finishing each step."); } return true; case FINISHED: throw new IllegalStateException("The benchmark has finished."); default: Loading