MacrobenchmarkRule
class MacrobenchmarkRule : TestRule
JUnit rule for benchmarking large app operations like startup, scrolling, or animations.
See the Macrobenchmark Guide for more information on macrobenchmarks.
import androidx.benchmark.macro.StartupMode import androidx.benchmark.macro.StartupTimingMetric import androidx.benchmark.macro.junit4.MacrobenchmarkRule import androidx.test.ext.junit.runners.AndroidJUnit4 @RunWith(AndroidJUnit4::class) class StartupMacrobenchmark { @get:Rule val benchmarkRule = MacrobenchmarkRule() @Test fun startup() = benchmarkRule.measureRepeated( packageName = "com.example.my.application.id", metrics = listOf(StartupTimingMetric()), iterations = 5, startupMode = StartupMode.COLD, setupBlock = { pressHome() }, ) { // this = MacrobenchmarkScope val intent = Intent() intent.setPackage(packageName) intent.setAction("com.example.my.application.id.myaction") startActivityAndWait(intent) } }
Summary
Public constructors |
|---|
Public functions |
|
|---|---|
open Statement |
apply(base: Statement, description: Description) |
Unit |
measureRepeated(Measure behavior of the specified |
Unit |
@ExperimentalBenchmarkConfigApiMeasure behavior of the specified |
Unit |
@ExperimentalBenchmarkConfigApiThis function is deprecated. Deprecated in favour of a variant that accepts experimental config |
Public constructors
Public functions
measureRepeated
fun measureRepeated(
packageName: String,
metrics: List<Metric>,
compilationMode: CompilationMode = CompilationMode.DEFAULT,
startupMode: StartupMode? = null,
iterations: @IntRange(from = 1) Int,
setupBlock: MacrobenchmarkScope.() -> Unit = {},
measureBlock: MacrobenchmarkScope.() -> Unit
): Unit
Measure behavior of the specified packageName given a set of metrics.
This performs a macrobenchmark with the below control flow:
resetAppCompilation()
compile(compilationMode)
repeat(iterations) {
setupBlock()
captureTraceAndMetrics {
measureBlock()
}
}
| Parameters | |
|---|---|
packageName: String |
ApplicationId / Application manifest package name of the app for which profiles are generated. |
metrics: List<Metric> |
List of metrics to measure. |
compilationMode: CompilationMode = CompilationMode.DEFAULT |
Mode of compilation used before capturing measurement, such as |
startupMode: StartupMode? = null |
Optional mode to force app launches performed with |
iterations: @IntRange(from = 1) Int |
Number of times the |
setupBlock: MacrobenchmarkScope.() -> Unit = {} |
The block performing app actions each iteration, prior to the |
measureBlock: MacrobenchmarkScope.() -> Unit |
The block performing app actions to benchmark each iteration. |
measureRepeated
@ExperimentalBenchmarkConfigApi
fun measureRepeated(
packageName: String,
metrics: List<Metric>,
iterations: @IntRange(from = 1) Int,
experimentalConfig: ExperimentalConfig,
compilationMode: CompilationMode = CompilationMode.DEFAULT,
startupMode: StartupMode? = null,
setupBlock: MacrobenchmarkScope.() -> Unit = {},
measureBlock: MacrobenchmarkScope.() -> Unit
): Unit
Measure behavior of the specified packageName given a set of metrics, with a custom PerfettoConfig.
This performs a macrobenchmark with the below control flow:
resetAppCompilation()
compile(compilationMode)
repeat(iterations) {
setupBlock()
captureTraceAndMetrics {
measureBlock()
}
}
Note that a custom PerfettoConfigs may result in built-in Metrics not working.
You can see the PerfettoConfig used by a trace (as a text proto) by opening the trace in ui.perfetto.dev, and selecting Info and Stats view on the left panel. You can also generate a custom text proto config by selecting Record new trace on the same panel, selecting recording options, and then clicking Recording command to access the generated text proto.
| Parameters | |
|---|---|
packageName: String |
ApplicationId / Application manifest package name of the app for which profiles are generated. |
metrics: List<Metric> |
List of metrics to measure. |
iterations: @IntRange(from = 1) Int |
Number of times the |
experimentalConfig: ExperimentalConfig |
Configuration for experimental features. |
compilationMode: CompilationMode = CompilationMode.DEFAULT |
Mode of compilation used before capturing measurement, such as |
startupMode: StartupMode? = null |
Optional mode to force app launches performed with |
setupBlock: MacrobenchmarkScope.() -> Unit = {} |
The block performing app actions each iteration, prior to the |
measureBlock: MacrobenchmarkScope.() -> Unit |
The block performing app actions to benchmark each iteration. |
measureRepeated
@ExperimentalBenchmarkConfigApi
funmeasureRepeated(
packageName: String,
metrics: List<Metric>,
iterations: @IntRange(from = 1) Int,
perfettoConfig: PerfettoConfig,
compilationMode: CompilationMode = CompilationMode.DEFAULT,
startupMode: StartupMode? = null,
setupBlock: MacrobenchmarkScope.() -> Unit = {},
measureBlock: MacrobenchmarkScope.() -> Unit
): Unit
| Parameters | |
|---|---|
perfettoConfig: PerfettoConfig |
Configuration for Perfetto trace capture during each iteration. Note that insufficient or invalid configs may result in built-in |