Automatiser les mesures avec la bibliothèque Macrobenchmark

Il est conseillé d'utiliser Jetpack Macrobenchmark pour tester les performances d'une appli lorsque les profils de référence sont activés, puis de comparer ces résultats à une analyse comparative avec les profils de références désactivés. Cela vous permettra de mesurer le temps de démarrage de l'appli (délai d'affichage initial et complet) ou les performances d'affichage de l'environnement d'exécution (pour voir si les images produites peuvent provoquer des à-coups).

Les bibliothèques Macrobenchmark vous permettent de contrôler la compilation avant mesure via l'API CompilationMode. Pour mesurer les résultats, vous devez définir le paramètre compilationMode sur la valeur correcte, comme indiqué dans l'extrait de code suivant :

@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    @Test
    fun startupNoCompilation() = startup(CompilationMode.None())

    @Test
    fun startupBaselineProfile() = startup(CompilationMode.Partial())

    @Test
    fun startupFullCompilation() = startup(CompilationMode.Full())

    private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(
        packageName = "com.example.macrobenchmark.target",
        metrics = listOf(StartupTimingMetric()),
        compilationMode = compilationMode,
        iterations = 10,
        startupMode = StartupMode.COLD,
        setupBlock = {
            pressHome()
        }
    ) {
        // Waits for the first rendered frame, which represents time to initial display.
        startActivityAndWait()

        // Waits for content to be visible, which represents time to fully drawn.
        device.wait(Until.hasObject(By.res("my-content")), 5_000)
    }
}

Vous pouvez consulter les résultats directement dans Android Studio, comme illustré dans la capture d'écran suivante pour l'application exemple Now in Android exécutée sur le Google Pixel 7. D'après les résultats, vous pouvez constater que l'application a démarré plus rapidement lors de l'utilisation de profils de référence (275,1 ms) qu'en l'absence de compilation (378,6 ms). Notez que la compilation anticipée (AOT) complète peut prendre encore plus de temps (393 ms), car le système doit charger un fichier plus volumineux à partir du disque.

Résultats de ColdStartupBenchmark indiquant un délai d'affichage initial sans compilation = 393 ms, avec compilation complète = 393 ms, avec des profils de référence = 275 ms

Notez que l'exemple précédent affiche des résultats de démarrage d'application capturés avec StartupTimingMetric. Il existe toutefois d'autres métriques importantes que vous pouvez prendre en compte, comme FrameTimingMetric. Pour en savoir plus sur tous les types de métriques, consultez Capturer les métriques.