diff --git a/MacrobenchmarkSample/gradle/libs.versions.toml b/MacrobenchmarkSample/gradle/libs.versions.toml index 9e00ef25..97c0bb6e 100644 --- a/MacrobenchmarkSample/gradle/libs.versions.toml +++ b/MacrobenchmarkSample/gradle/libs.versions.toml @@ -2,7 +2,7 @@ agp = "8.5.2" activity = "1.9.2" appcompat = "1.7.0" -benchmark = "1.3.1" +benchmark = "1.4.0-alpha01" composeBom = "2024.09.02" constraintLayout = "2.1.4" core = "1.13.1" diff --git a/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/LoginBenchmark.kt b/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/LoginBenchmark.kt index e94c0af7..9b26f332 100644 --- a/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/LoginBenchmark.kt +++ b/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/LoginBenchmark.kt @@ -18,21 +18,26 @@ package com.example.macrobenchmark.benchmark import android.content.Intent import android.os.Bundle +import androidx.benchmark.ExperimentalBenchmarkConfigApi +import androidx.benchmark.ExperimentalConfig +import androidx.benchmark.StartupInsightsConfig import androidx.benchmark.macro.CompilationMode import androidx.benchmark.macro.FrameTimingMetric import androidx.benchmark.macro.MacrobenchmarkScope import androidx.benchmark.macro.StartupMode import androidx.benchmark.macro.StartupTimingMetric import androidx.benchmark.macro.junit4.MacrobenchmarkRule +import androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.uiautomator.By +import com.example.macrobenchmark.benchmark.permissions.allowNotifications import com.example.macrobenchmark.benchmark.util.DEFAULT_ITERATIONS import com.example.macrobenchmark.benchmark.util.TARGET_PACKAGE -import com.example.macrobenchmark.benchmark.permissions.allowNotifications import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +@OptIn(ExperimentalBenchmarkConfigApi::class, ExperimentalPerfettoCaptureApi::class) @RunWith(AndroidJUnit4::class) class LoginBenchmark { @@ -89,6 +94,7 @@ class LoginBenchmark { packageName = TARGET_PACKAGE, metrics = listOf(StartupTimingMetric(), FrameTimingMetric()), compilationMode = CompilationMode.DEFAULT, + experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(true)), startupMode = StartupMode.COLD, iterations = DEFAULT_ITERATIONS, setupBlock = setupBlock, diff --git a/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/FullyDrawnStartupBenchmark.kt b/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/FullyDrawnStartupBenchmark.kt index 576f577a..ab24b5f3 100644 --- a/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/FullyDrawnStartupBenchmark.kt +++ b/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/FullyDrawnStartupBenchmark.kt @@ -17,9 +17,13 @@ package com.example.macrobenchmark.benchmark.startup import android.content.Intent +import androidx.benchmark.ExperimentalBenchmarkConfigApi +import androidx.benchmark.ExperimentalConfig +import androidx.benchmark.StartupInsightsConfig import androidx.benchmark.macro.StartupMode import androidx.benchmark.macro.StartupTimingMetric import androidx.benchmark.macro.junit4.MacrobenchmarkRule +import androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest import androidx.test.uiautomator.By @@ -36,10 +40,12 @@ class FullyDrawnStartupBenchmark { @get:Rule val benchmarkRule = MacrobenchmarkRule() + @OptIn(ExperimentalBenchmarkConfigApi::class, ExperimentalPerfettoCaptureApi::class) @Test fun startup() = benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf(StartupTimingMetric()), + experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(true)), startupMode = StartupMode.COLD, iterations = DEFAULT_ITERATIONS, ) { diff --git a/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/StartupBenchmark.kt b/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/StartupBenchmark.kt index 0da8cfb8..d5923c96 100644 --- a/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/StartupBenchmark.kt +++ b/MacrobenchmarkSample/macrobenchmark/src/main/kotlin/com/example/macrobenchmark/benchmark/startup/StartupBenchmark.kt @@ -16,12 +16,15 @@ package com.example.macrobenchmark.benchmark.startup +import androidx.benchmark.ExperimentalBenchmarkConfigApi +import androidx.benchmark.ExperimentalConfig +import androidx.benchmark.StartupInsightsConfig import androidx.benchmark.macro.BaselineProfileMode import androidx.benchmark.macro.CompilationMode import androidx.benchmark.macro.StartupMode import androidx.benchmark.macro.StartupTimingMetric import androidx.benchmark.macro.junit4.MacrobenchmarkRule -import androidx.test.filters.SdkSuppress +import androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import com.example.macrobenchmark.benchmark.util.DEFAULT_ITERATIONS import com.example.macrobenchmark.benchmark.util.TARGET_PACKAGE @@ -55,16 +58,15 @@ class HotStartupBenchmark : AbstractStartupBenchmark(StartupMode.HOT) * Base class for benchmarks with different startup modes. * Enables app startups from various states of baseline profile or [CompilationMode]s. */ +@OptIn(ExperimentalBenchmarkConfigApi::class, ExperimentalPerfettoCaptureApi::class) abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) { @get:Rule val benchmarkRule = MacrobenchmarkRule() @Test - @SdkSuppress(minSdkVersion = 24) fun startupNoCompilation() = startup(CompilationMode.None()) @Test - @SdkSuppress(minSdkVersion = 24) fun startupPartialCompilation() = startup( CompilationMode.Partial( baselineProfileMode = BaselineProfileMode.Disable, @@ -73,7 +75,6 @@ abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) { ) @Test - @SdkSuppress(minSdkVersion = 24) fun startupPartialWithBaselineProfiles() = startup(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require)) @@ -83,6 +84,7 @@ abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) { private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf(StartupTimingMetric()), + experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(true)), compilationMode = compilationMode, iterations = DEFAULT_ITERATIONS, startupMode = startupMode, @@ -92,4 +94,4 @@ abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) { ) { startActivityAndWait() } -} \ No newline at end of file +}