75 lines
3.1 KiB
Kotlin
75 lines
3.1 KiB
Kotlin
package com.lagradost.cloudstream3.baselineprofile
|
|
|
|
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.ext.junit.runners.AndroidJUnit4
|
|
import androidx.test.filters.LargeTest
|
|
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
import org.junit.runner.RunWith
|
|
|
|
/**
|
|
* This test class benchmarks the speed of app startup.
|
|
* Run this benchmark to verify how effective a Baseline Profile is.
|
|
* It does this by comparing [CompilationMode.None], which represents the app with no Baseline
|
|
* Profiles optimizations, and [CompilationMode.Partial], which uses Baseline Profiles.
|
|
*
|
|
* Run this benchmark to see startup measurements and captured system traces for verifying
|
|
* the effectiveness of your Baseline Profiles. You can run it directly from Android
|
|
* Studio as an instrumentation test, or run all benchmarks for a variant, for example benchmarkRelease,
|
|
* with this Gradle task:
|
|
* ```
|
|
* ./gradlew :baselineprofile:connectedBenchmarkReleaseAndroidTest
|
|
* ```
|
|
*
|
|
* You should run the benchmarks on a physical device, not an Android emulator, because the
|
|
* emulator doesn't represent real world performance and shares system resources with its host.
|
|
*
|
|
* For more information, see the [Macrobenchmark documentation](https://d.android.com/macrobenchmark#create-macrobenchmark)
|
|
* and the [instrumentation arguments documentation](https://d.android.com/topic/performance/benchmarking/macrobenchmark-instrumentation-args).
|
|
**/
|
|
@RunWith(AndroidJUnit4::class)
|
|
@LargeTest
|
|
class StartupBenchmarks {
|
|
|
|
@get:Rule
|
|
val rule = MacrobenchmarkRule()
|
|
|
|
@Test
|
|
fun startupCompilationNone() =
|
|
benchmark(CompilationMode.None())
|
|
|
|
@Test
|
|
fun startupCompilationBaselineProfiles() =
|
|
benchmark(CompilationMode.Partial(BaselineProfileMode.Require))
|
|
|
|
private fun benchmark(compilationMode: CompilationMode) {
|
|
// This example works only with the variant with application id `com.lagradost.cloudstream3.prerelease`."
|
|
rule.measureRepeated(
|
|
packageName = "com.lagradost.cloudstream3.prerelease.debug",
|
|
metrics = listOf(StartupTimingMetric()),
|
|
compilationMode = compilationMode,
|
|
startupMode = StartupMode.COLD,
|
|
iterations = 10,
|
|
setupBlock = {
|
|
pressHome()
|
|
},
|
|
measureBlock = {
|
|
startActivityAndWait()
|
|
|
|
// TODO Add interactions to wait for when your app is fully drawn.
|
|
// The app is fully drawn when Activity.reportFullyDrawn is called.
|
|
// For Jetpack Compose, you can use ReportDrawn, ReportDrawnWhen and ReportDrawnAfter
|
|
// from the AndroidX Activity library.
|
|
|
|
// Check the UiAutomator documentation for more information on how to
|
|
// interact with the app.
|
|
// https://d.android.com/training/testing/other-components/ui-automator
|
|
}
|
|
)
|
|
}
|
|
} |