AndroidBenchmarkRunner
open class AndroidBenchmarkRunner : AndroidJUnitRunner
androidx.benchmark.junit4.AndroidBenchmarkRunner |
Instrumentation runner for benchmarks, used to increase stability of measurements and minimize interference.
To use this runner, put the following in your module level build.gradle
:
android { defaultConfig { testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Minimizing Interference
This runner launches a simple opaque activity used to reduce benchmark interference from other windows. Launching other activities is supported e.g. via ActivityTestRule and ActivityScenario - the opaque activity will be relaunched if not actively running before each test, and after each test's cleanup is complete.
For example, sources of potential interference:
- live wallpaper rendering
- homescreen widget updates
- hotword detection
- status bar repaints
- running in background (some cores may be foreground-app only)
Clock Stability
While it is better for performance stability to lock clocks with the ./gradlew lockClocks
task
provided by the gradle plugin, this is not possible on most devices. The runner provides a
fallback mode for preventing thermal throttling.
On devices that support android.view.Window.setSustainedPerformanceMode, the runner will set this mode on the window of every Activity launched (including the opaque Activity mentioned above). The runner will also launch a continuously spinning Thread. Together, these ensure that the app runs in the multithreaded stable performance mode, which locks the maximum clock frequency to prevent thermal throttling. This ensures stable clock levels across all benchmarks, even if a continuous suite of benchmarks runs for many minutes on end.
Summary
Public constructors | |
---|---|
<init>() Instrumentation runner for benchmarks, used to increase stability of measurements and minimize interference. |
Public methods | |
---|---|
open Unit |
Protected methods | |
---|---|
open Unit |
Public constructors
<init>
AndroidBenchmarkRunner()
Instrumentation runner for benchmarks, used to increase stability of measurements and minimize interference.
To use this runner, put the following in your module level build.gradle
:
android { defaultConfig { testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Minimizing Interference
This runner launches a simple opaque activity used to reduce benchmark interference from other windows. Launching other activities is supported e.g. via ActivityTestRule and ActivityScenario - the opaque activity will be relaunched if not actively running before each test, and after each test's cleanup is complete.
For example, sources of potential interference:
- live wallpaper rendering
- homescreen widget updates
- hotword detection
- status bar repaints
- running in background (some cores may be foreground-app only)
Clock Stability
While it is better for performance stability to lock clocks with the ./gradlew lockClocks
task
provided by the gradle plugin, this is not possible on most devices. The runner provides a
fallback mode for preventing thermal throttling.
On devices that support android.view.Window.setSustainedPerformanceMode, the runner will set this mode on the window of every Activity launched (including the opaque Activity mentioned above). The runner will also launch a continuously spinning Thread. Together, these ensure that the app runs in the multithreaded stable performance mode, which locks the maximum clock frequency to prevent thermal throttling. This ensures stable clock levels across all benchmarks, even if a continuous suite of benchmarks runs for many minutes on end.
Public methods
onDestroy
@CallSuper open fun onDestroy(): Unit
Protected methods
waitForActivitiesToComplete
@CallSuper protected open fun waitForActivitiesToComplete(): Unit