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, inspectez la trace de méthode (capturée par défaut sur les versions d'OS compatibles) ou sélectionnez d'autres configurations de profilage.
Pour sélectionner la configuration du profileur, ajoutez l'argument d'exécuteur d'instrumentation
androidx.benchmark.profiling.mode avec un argument
MethodTracing (par défaut),
StackSampling ou None, comme illustré dans l'extrait
suivant.
Pour en savoir plus sur ces options, consultez Enregistrer des méthodes Java/Kotlin.
MethodTracing est l'équivalent du traçage, tandis que StackSampling est l'équivalent de l'échantillonnage, 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 de profilage dans Android Studio, sélectionnez le lien Method Trace (Trace de méthode) ou Stack Sampling Trace (Trace d'échantillonnage de pile) dans les résultats du microbenchmark.
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.
Le traçage de méthode est activé par défaut.
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 le comportement d'échantillonnage, comme la fréquence d'échantillonnage 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.
androidx.benchmark.profiling.skipWhenDurationRisksAnr- Ignore le traçage de méthode lorsqu'il est susceptible de provoquer une erreur ANR. Vous devez laisser cette option activée pour les exécutions d'intégration continue, car les erreurs ANR peuvent entraîner des problèmes lors des longues exécutions d'intégration continue.
- Type d'argument : booléen
- La valeur par défaut est
true.
Aucun
Cet argument ne capture pas de fichier de profilage. Les informations sur la temporalité et les allocations sont toujours mesurées.
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé.
- Arguments d'instrumentation de Microbenchmark
- Exécuter des benchmarks dans l'intégration continue