From 24dda6421f11516efe104ef8c548278a450e037f Mon Sep 17 00:00:00 2001 From: Ben Weiss Date: Mon, 2 Oct 2023 11:04:07 +0200 Subject: [PATCH 1/2] Add MicrobenchmarkConfig sample --- MicrobenchmarkSample/app/build.gradle.kts | 1 + MicrobenchmarkSample/benchmarkable/build.gradle.kts | 2 ++ MicrobenchmarkSample/gradle/libs.versions.toml | 11 +++++++---- .../java/com/example/benchmark/BitmapBenchmark.kt | 7 ++++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/MicrobenchmarkSample/app/build.gradle.kts b/MicrobenchmarkSample/app/build.gradle.kts index 70c0f203..735cef20 100644 --- a/MicrobenchmarkSample/app/build.gradle.kts +++ b/MicrobenchmarkSample/app/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { implementation(libs.core) implementation(libs.material) + androidTestImplementation(libs.espresso) androidTestImplementation(libs.test.ext) diff --git a/MicrobenchmarkSample/benchmarkable/build.gradle.kts b/MicrobenchmarkSample/benchmarkable/build.gradle.kts index e4b62006..5d9f677f 100644 --- a/MicrobenchmarkSample/benchmarkable/build.gradle.kts +++ b/MicrobenchmarkSample/benchmarkable/build.gradle.kts @@ -29,6 +29,8 @@ dependencies { implementation(libs.constraintlayout) implementation(libs.kotlin.stdlib) implementation(libs.recyclerview) + implementation(libs.perfetto.binary) + implementation(libs.perfetto.tracing) androidTestImplementation(libs.espresso) androidTestImplementation(libs.test.ext) diff --git a/MicrobenchmarkSample/gradle/libs.versions.toml b/MicrobenchmarkSample/gradle/libs.versions.toml index 63d35511..572bc161 100644 --- a/MicrobenchmarkSample/gradle/libs.versions.toml +++ b/MicrobenchmarkSample/gradle/libs.versions.toml @@ -1,11 +1,11 @@ [versions] -agp = "8.1.0" +agp = "8.1.2" appcompat = "1.6.1" -benchmark = "1.2.0-beta02" +benchmark = "1.2.0-rc01" cardView = "1.0.0" constraintLayout = "2.1.4" -core = "1.10.1" -kotlin = "1.8.22" +core = "1.12.0" +kotlin = "1.9.0" material = "1.9.0" recyclerView = "1.3.1" @@ -13,6 +13,7 @@ androidxTest = "1.5.2" androidxTestRules = "1.5.0" espressoCore = "3.5.1" jUnit = "4.13.2" +perfetto = "1.0.0-rc01" testExt = "1.1.5" [libraries] @@ -26,6 +27,8 @@ espresso = { group = "androidx.test.espresso", name = "espresso-core", version.r junit = { group = "junit", name = "junit", version.ref = "jUnit" } kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } +perfetto-binary = { group = "androidx.tracing", name = "tracing-perfetto-binary", version.ref = "perfetto"} +perfetto-tracing = { group = "androidx.tracing", name = "tracing-perfetto", version.ref = "perfetto"} recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerView" } test-ext = { group = "androidx.test.ext", name = "junit", version.ref = "testExt" } test-rules = { group = "androidx.test", name = "rules", version.ref = "androidxTestRules" } diff --git a/MicrobenchmarkSample/microbenchmark/src/androidTest/java/com/example/benchmark/BitmapBenchmark.kt b/MicrobenchmarkSample/microbenchmark/src/androidTest/java/com/example/benchmark/BitmapBenchmark.kt index 92304bc9..b1449689 100644 --- a/MicrobenchmarkSample/microbenchmark/src/androidTest/java/com/example/benchmark/BitmapBenchmark.kt +++ b/MicrobenchmarkSample/microbenchmark/src/androidTest/java/com/example/benchmark/BitmapBenchmark.kt @@ -18,6 +18,8 @@ package com.example.benchmark import android.graphics.Bitmap import android.graphics.BitmapFactory +import androidx.benchmark.ExperimentalBenchmarkConfigApi +import androidx.benchmark.MicrobenchmarkConfig import androidx.benchmark.junit4.BenchmarkRule import androidx.benchmark.junit4.measureRepeated import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -33,8 +35,11 @@ private const val JETPACK = "images/jetpack.png" @RunWith(AndroidJUnit4::class) class BitmapBenchmark { + @OptIn(ExperimentalBenchmarkConfigApi::class) @get:Rule - val benchmarkRule = BenchmarkRule() + val benchmarkRule = BenchmarkRule( + MicrobenchmarkConfig(shouldEnableTraceAppTag = true, shouldEnablePerfettoSdkTracing = true) + ) private val context = InstrumentationRegistry.getInstrumentation().targetContext From 5d158ce441e68b1779d51108dbb2560f61d60596 Mon Sep 17 00:00:00 2001 From: Ben Weiss Date: Mon, 2 Oct 2023 11:05:50 +0200 Subject: [PATCH 2/2] Add TraceSectionMetric sample --- .../macrobenchmark/startup/SampleStartupBenchmark.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/MacrobenchmarkSample/macrobenchmark/src/main/java/com/example/macrobenchmark/startup/SampleStartupBenchmark.kt b/MacrobenchmarkSample/macrobenchmark/src/main/java/com/example/macrobenchmark/startup/SampleStartupBenchmark.kt index d3e8c4cb..5c2cac95 100644 --- a/MacrobenchmarkSample/macrobenchmark/src/main/java/com/example/macrobenchmark/startup/SampleStartupBenchmark.kt +++ b/MacrobenchmarkSample/macrobenchmark/src/main/java/com/example/macrobenchmark/startup/SampleStartupBenchmark.kt @@ -16,7 +16,10 @@ package com.example.macrobenchmark.startup +import androidx.benchmark.macro.ExperimentalMetricApi import androidx.benchmark.macro.StartupTimingMetric +import androidx.benchmark.macro.TraceSectionMetric +import androidx.benchmark.macro.TraceSectionMetric.Mode import androidx.benchmark.macro.junit4.MacrobenchmarkRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest @@ -33,10 +36,17 @@ class SampleStartupBenchmark { @get:Rule val benchmarkRule = MacrobenchmarkRule() + @OptIn(ExperimentalMetricApi::class) @Test fun startup() = benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, - metrics = listOf(StartupTimingMetric()), + metrics = listOf( + StartupTimingMetric(), + TraceSectionMetric("activityStart", Mode.First), + TraceSectionMetric("activityResume", Mode.First), + TraceSectionMetric("Choreographer#doFrame %", Mode.Sum), + + ), iterations = DEFAULT_ITERATIONS, setupBlock = { // Press home button before each run to ensure the starting activity isn't visible.