Profiler un microbenchmark

Par défaut, les microbenchmarks vous fournissent des informations sur la temporalité et les allocations du code exécuté. Si vous souhaitez savoir pourquoi le code mesuré est lent, vous pouvez exécuter les benchmarks avec le profileur de processeur associé.

Pour sélectionner la configuration du profileur, ajoutez l'argument d'exécuteur d'instrumentation androidx.benchmark.profiling.mode avec un argument MethodTracing, StackSampling ou None, comme illustré dans l'extrait suivant.

Pour en savoir plus sur ces options, consultez Choisir une configuration d'enregistrement. MethodTracing est l'équivalent du traçage des méthodes Java, tandis que StackSampling est l'équivalent de l'échantillonnage des méthodes Java, comme défini dans ce document.

Groovy

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling'
    }
}

Kotlin

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling"
    }
}

Lorsque vous profilez un benchmark, un fichier .trace de sortie est copié sur l'hôte dans le répertoire avec les résultats JSON. Pour inspecter les résultats du profilage dans le Profileur de processeur d'Android Studio, sélectionnez File > Open (Fichier > Ouvrir). Pour en savoir plus sur la lecture et la compréhension des traces, consultez Inspecter les traces.

MethodTracing

Le traçage de méthode est utile lorsque vous essayez d'optimiser votre code, car il peut vous aider à identifier les méthodes dont l'exécution prend plus de temps que les autres. Vous pouvez ensuite vous concentrer sur l'optimisation des méthodes qui ont le plus d'impact sur les performances.

Le profilage se produit après la mesure du code. Votre test génère donc des résultats précis sur le plan de la temporalité et du profilage.

Échantillonnage de pile (StackSampling)

Le traçage d'échantillon peut également permettre d'identifier des méthodes coûteuses sans ralentir les performances du traçage de méthode. Toutefois, si votre application saisit une méthode après la capture d'une pile d'appel et quitte la méthode avant la capture suivante, l'appel de méthode n'est pas consigné. Pour suivre correctement les méthodes avec des cycles de vie courts, utilisez le traçage de méthode au lieu du traçage d'échantillon.

Avec l'échantillonnage de pile, les échantillons de benchmark appellent des piles une fois la préparation terminée. Vous pouvez contrôler la fréquence et la durée d'échantillonnage à l'aide d'arguments d'instrumentation.

Sur Android 10 (API 29) ou version ultérieure, l'échantillonnage de pile utilise Simpleperf pour échantillonner les piles d'appels d'application, y compris le code C++. Sous Android 9 (API 28) et versions antérieures, il utilise Debug.startMethodTracingSampling pour capturer des échantillons de pile.

Vous pouvez configurer ce mode de profilage en ajoutant d'autres arguments d'instrumentation :

  • androidx.benchmark.profiling.sampleFrequency

    • Nombre d'échantillons de pile à capturer par seconde
    • Type d'argument : entier
    • La valeur par défaut est de 1 000 échantillons par seconde.
  • androidx.benchmark.profiling.sampleDurationSeconds

    • Durée d'exécution du benchmark.
    • Type d'argument : entier
    • La valeur par défaut est de 5 secondes.

None

Cet argument ne capture pas de fichier de profilage. Les informations sur la temporalité et les allocations sont toujours mesurées.