Benchmark
androidx.benchmark
androidx.benchmark.junit4
androidx.benchmark.macro
androidx.benchmark.macro.junit4
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
11 décembre 2024 | 1.3.3 | - | - | 1.4.0-alpha06 |
Déclarer des dépendances
Pour ajouter une dépendance à Benchmark, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.
Macrobenchmark
Pour utiliser Macrobenchmark dans votre projet, ajoutez les dépendances suivantes à votre fichier build.gradle
pour votre module Macrobenchmark:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0") }
Microbenchmark
Pour utiliser Microbenchmark dans votre projet, ajoutez les dépendances suivantes à votre fichier build.gradle
pour votre module microbenchmark:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.3" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.3") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
The Microbenchmark library also provides a Gradle plugin to use with your microbenchmark module.
This plugin sets build configuration defaults for the module, sets up
benchmark output copy to the host,
and provides the
./gradlew lockClocks
task.
To use the plugin, include the following line in the `plugins` block in your top-level
build.gradle
file:
Groovy
plugins { id 'androidx.benchmark' version '1.3.3' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.3" apply false }
Then apply the plugin to your benchmark module's build.gradle
file
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Commentaires
Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Version 1.4
Version 1.4.0-alpha06
11 décembre 2024
Publication d'androidx.benchmark:benchmark-*:1.4.0-alpha06
. La version 1.4.0-alpha06 contient ces commits.
Modifications apportées à l'API
- Suppression de l'utilisation de
@Language("sql")
dansPerfettoTraceProcessor.Session.query()
, car la mise en surbrillance/l'analyse de Studio est défectueuse. (Idc2fa, b/377733398)
Correction de bugs
- Cette bibliothèque utilise désormais les annotations de nullité JSpecify, qui sont des annotations de type. Les développeurs Kotlin doivent utiliser les arguments de compilation suivants pour appliquer une utilisation correcte:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(I46810, b/326456246) - Correction de
ArtMetric
pour signaler le chargement de classe (et non l'initialisation) et amélioration des documents pour clarifier le comportement d'exécution. (I9915c) - Sur Android multi-utilisateur, exécutez les commandes en tant que root uniquement sur les appareils en mode root. (I88b44)
Version 1.4.0-alpha05
13 novembre 2024
Publication d'androidx.benchmark:benchmark-*:1.4.0-alpha05
. La version 1.4.0-alpha05 contient ces commits.
Correction de bugs
- Correction d'un problème sur les API 34 et versions ultérieures, qui entraînait des performances incohérentes de
CompilationMode.None()
non représentatives des performances initiales du pire des cas. Cela permet de contourner un changement de plate-forme qui permet à l'état de compilationverify
d'ART de compiler partiellement les applications (qui ne concerne que le chargement de classe) peu de temps après le premier lancement. (Ie48d0) - Correction d'un problème qui pouvait entraîner la capture de traces (surtout courtes) qui ne rapportaient pas les mesures des métriques Macrobenchmark intégrées, car le nom du processus était tronqué dans la trace Perfetto. Macrobenchmark contourne désormais ce problème en recherchant le nom de package tronqué dans toutes les requêtes intégrées, en plus du nom de package attendu. Notez que les implémentations
TraceMetric
personnalisées ou d'autres appelants directs dePerfettoSession.query
peuvent implémenter ce même comportement en remplaçantprocess.name LIKE "$packageName"
dans une requête Perfetto par(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
. (I5bf01, b/377565760)
Version 1.4.0-alpha04
30 octobre 2024
Publication d'androidx.benchmark:benchmark-*:1.4.0-alpha04
. La version 1.4.0-alpha04 contient ces commits.
Nouvelles fonctionnalités
- (Expérimental) Activez la génération de profils de référence et les analyses comparatives sur les applications installées pour un utilisateur secondaire, par exemple toute application sur des appareils Android Auto sans tête. Cette compatibilité a été testée dans certains scénarios, mais si elle ne fonctionne pas pour vous, signalez-le-nous en enregistrant un bug. (I9fcbe, b/356684617, b/373641155)
Correction de bugs
isProfileable
est désormais toujours remplacé dans les builds de référence, etisDebuggable
est également toujours remplacé dans les builds de référence etnonMinified
(capture de profil de référence). (I487fa, b/369213505)- Correction de la détection de compilation sur certains appareils physiques antérieurs à l'API 28. Cela affecte
context.compilationMode
JSON, ainsi que le comportement deandroidx.benchmark.requireAot=true
(qui ne génère plus d'erreurs incorrectes) (Ic3e08, b/374362482) - Dans les métriques
CpuEventCounter
, générer une exception si des mesures non valides sont observées (par exemple, instructions/cpucycles==0) (I8c503)
Version 1.4.0-alpha03
16 octobre 2024
Publication d'androidx.benchmark:benchmark-*:1.4.0-alpha03
. La version 1.4.0-alpha03 contient ces commits.
Modifications apportées à l'API
- Macrobenchmark: ajoute
ArtMetric
, qui peut être utilisé pour inspecter la couverture du profil ou les performances générales d'Android RunTime. Capture le nombre et la durée totale de l'initialisation JIT, de l'initialisation de la classe (le cas échéant) et de la validation de la classe. De plus,CaptureInfo
est modifié pour inclure la version principale facultative d'ART par défaut. (I930f7) - Ajoutez
coefficientOfVariation
à la sortie JSON du benchmark pour afficher la stabilité d'une exécution de benchmark donnée. (Ib14ea)
Correction de bugs
- Correction de
CollectBaselineProfileTask
lorsque l'appareil AVD comporte des espaces. (Ia0225, b/371642809) - Correction spéculative des erreurs provenant d'exceptions
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
.MacrobenchmarkScope.killProcess()
(y compris celui exécuté avant chaque itération, utilisé pour implémenter le comportement deStartupMode.COLD
) attendra de vérifier que les processus de l'application ont tous cessé de s'exécuter. (I60aa6, b/351582215) - Correction du problème qui entraînait l'affichage de l'erreur UNLOCKED_ sur certains émulateurs en mode root. (Ic5117)
- Cette bibliothèque utilise désormais les annotations de nullité JSpecify, qui sont des annotations de type. Les développeurs Kotlin doivent utiliser les arguments de compilateur suivants pour appliquer une utilisation correcte:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(I7104f, b/326456246)
Version 1.4.0-alpha02
2 octobre 2024
Publication d'androidx.benchmark:benchmark-*:1.4.0-alpha02
. La version 1.4.0-alpha02 contient ces commits.
Modifications apportées à l'API
- Les tâches Gradle
lockClocks
etunlockClocks
ont été déplacées vers les projets de référence, au lieu d'être disponibles au niveau supérieur. Ce changement était nécessaire, car il n'est malheureusement pas possible de les enregistrer en tant qu'actions de niveau supérieur sans interrompre l'isolation du projet. (I02b8f, b/363325823)
Correction de bugs
BaselineProfileRule
collecte désormais des profils pour les applications multiprocessus en signalant chaque processus en cours d'exécution à la fin du bloc pour vider les profils. Si une compilation basée sur un profil ne parvient jamais à trouver un processus à diffuser, la compilation échoue, car il est inhabituel de trouver des données de profil. Ajout d'un argument d'instrumentation pour contrôler la durée d'attente du vidage:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469)- Depuis l'analyse comparative
1.3.2
: correction du problème empêchant Firebase Test Lab (FTL) d'extraire les fichiers de résultats du profil de référence ou de Macrobenchmark à partir du plug-in Baseline Profile Gradle. (I2f678, b/285187547)
Pour utiliser FTL, appliquez le plug-in au module de profil de référence dans le bloc de plug-in, avec:
plugins {
...
id("com.google.firebase.testlab")
}
puis configurez Firebase Test Lab avec:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
L'appareil FTL créé doit également être ajouté à l'extension du profil de référence:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Version 1.4.0-alpha01
18 septembre 2024
Publication d'androidx.benchmark:benchmark-*:1.4.0-alpha01
. La version 1.4.0-alpha01 contient ces commits.
Nouvelle fonctionnalité : insights sur le démarrage des applications
- La version initiale des insights de démarrage de l'application peut être activée dans Macrobenchmark. (09fae38)
Pour l'activer dans un benchmark de démarrage:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
L'exécution du benchmark de démarrage analysera la trace pour rechercher les problèmes courants, puis les imprimera après les métriques dans la sortie du test Studio dans l'onglet "Benchmark", par exemple :
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
Cette fonctionnalité est encore en cours de développement. Nous allons améliorer la documentation et l'extensibilité, mais vos commentaires sont les bienvenus.
Nouvelles fonctionnalités
- Ajout de la propriété Gradle
androidx.baselineprofile.suppressWarnings
pour supprimer tous les avertissements de profil de référence. (314153a) - Les métriques Microbench sont désormais affichées dans les traces Perfetto sous forme de compteurs. (3214854)
- Ajout de scripts expérimentaux pour désactiver le jit (nécessite un redémarrage en mode root / runtime) et réinitialiser l'état des performances/tests de l'appareil. Elles ne sont pas publiées en tant que tâches Gradle pour le moment. (7c3732b)
- Ajout d'un argument de benchmark pour ignorer les tests lors de l'exécution sur un émulateur. Lorsque la compilation
automaticGenerationDuring
est activée, les benchmarks déclenchent également la génération de profils de référence. Cette opération échouera si des émulateurs sont utilisés. Avec le nouvel argumentskipBenchmarksOnEmulator
, nous pouvons ignorer le test. (0c2ddcd) - Modification de la logique d'activation des événements de performances pour l'exécuter sur l'API 23 ou version ultérieure (2550048)
Modifications apportées à l'API
- L'argument
PerfettoConfig
expérimental existant pourMacrobenchmarkRule.measureRepeated()
a été déplacé vers le nouvel objetExperimentalConfig
.
Correction de bugs
- Augmenter le nombre de tentatives
lockClocks.sh
(99e9dac) - Ne créez pas de types de builds
nonMinified
et de benchmarks s'ils existent déjà. En raison d'un bug, même si les types de compilationnonMinified
et "analyse comparative" existaient, ils allaient être recréés. (e75f0a5) - Ignore les tranches non finales des résultats
TraceSectionMetric
. (a927d20) - Amélioration de la vérification de l'émulateur pour prendre en compte le préfixe
sdk_
. (1587de8) - Traiter les packages non exécutés comme effacés dans
FrameTimingGfxInfoMetric
. (35cc79c) - Correction de
androidx.benchmark.cpuEventCounter
qui produisait des valeurs corrompues pour les événements autres que des instructions. (06edd59) - Correction de
resumeTiming/runWithTimingDisabled
pour respecter l'ordre de priorité des métriques et réduire considérablement l'impact de la mise en pause/reprise des métriques de priorité inférieure sur les résultats des métriques de priorité plus élevée. Par exemple, si vous utilisez des compteurs de performances de processeur via l'argument d'instrumentationcpuEventCounter.enable
, timeNs n'est plus considérablement réduit lors de la mise en pause/reprise. (5de0968)
Version 1.3
Version 1.3.3
16 octobre 2024
Publication d'androidx.benchmark:benchmark-*:1.3.3
. La version 1.3.3 contient ces commits.
Correction de bugs
- Correction de
CollectBaselineProfileTask
lorsque l'appareil AVD contient des espaces (Ia0225, b/371642809)
Version 1.3.2
2 octobre 2024
Publication d'androidx.benchmark:benchmark-*:1.3.2
. La version 1.3.2 contient ces commits.
Correction de bugs
- Correction du problème qui empêchait Firebase Test Lab (FTL) d'extraire les fichiers de résultats du profil de référence ou de Macrobenchmark à partir du plug-in Baseline Profile Gradle. (I2f678, b/285187547)
Pour utiliser FTL, appliquez le plug-in au module de profil de référence dans le bloc de plug-in, avec:
plugins {
...
id("com.google.firebase.testlab")
}
puis configurez Firebase Test Lab avec:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
L'appareil FTL créé doit également être ajouté à l'extension du profil de référence:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Version 1.3.1
18 septembre 2024
Publication d'androidx.benchmark:benchmark-*:1.3.1
. La version 1.3.1 contient ces commits.
Correction de bugs
- Ajout de la propriété Gradle
androidx.baselineprofile.suppressWarnings
pour supprimer tous les avertissements concernant les profils de référence. (I7c36e, b/349646646) - Correction du plug-in Baseline Profile Gradle pour utiliser des
nonMinified…
etbenchmark…
préexistants si créés par l'application au lieu de créer des wrappers. (Ia8934, b/361370179) - Correction de
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
lorsqueautomaticGenerationDuringBuild
est activé sur les émulateurs. Le nouvel argument permet d'ignorer le test. (If3f51, b/355515798) - Minimisation des microanalyses comparatives : conservez les sous-classes de
org.junit.runner.notification.RunListener
dans la bibliothèque de référence ProGuard (Ic8ed5, b/354264743) - Correction de
TraceSectionMetric
pour ignorer les tranches non finissantes. Auparavant, leur durée était considérée comme -1, par exemple lors de la somme ou de la recherche de la durée minimale. (If74b7) - Correction d'un problème dans
FrameTimingGfxInfoMetric
qui provoquait le plantage du démarrage de la métrique si le processus n'était pas déjà en cours d'exécution. (I6e412)
Version 1.3.0
21 août 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0
. La version 1.3.0 contient ces commits.
Modifications apportées aux microbenchmarks depuis la version 1.2.0
- Le traçage de méthode est activé par défaut dans les microbenchmarks lorsqu'ils s'exécutent sur la plupart des appareils.
- Le traçage de méthode s'exécute en tant que phase distincte, après les mesures. Cela permet d'obtenir à la fois des mesures précises et des traces de méthode à partir d'une seule exécution de benchmark.
- Le traçage de méthode sur certaines versions d'Android OS et d'ART affectera les phases de mesure ultérieures. Sur ces versions, le traçage de méthode est désactivé par défaut et un avertissement est imprimé dans la sortie de Studio.
- Benchmarks du thread principal et erreurs ANR
- Ajout de
measureRepeatedOnMainThread
pour les benchmarks de thread d'UI (par exemple, ceux qui interagissent avec les UI Compose/View) afin d'éviter les erreurs ANR lors de l'exécution pendant plusieurs secondes. - Les traces de méthode sont ignorées si elles sont censées dépasser la date limite d'évitement des erreurs ANR. Définissez
androidx.benchmark.profiling.skipWhenDurationRisksAnr
sur "false" pour désactiver ce comportement (non recommandé pour les exécutions de CI, car les erreurs ANR peuvent entraîner des problèmes lors de longues exécutions de CI).
- Ajout de
- Minimisation
- Règles ProGuard intégrées pour améliorer le micro-benchmarking avec la minification activée
- La minification/R8 dans un module de bibliothèque nécessite AGP 8.3 et peut être activée via
android.buildTypes.release.androidTest.enableMinification
dans votrebuild.gradle
. - Ajout d'une API
BlackHole.consume()
expérimentale pour éviter l'élimination du code mort. (If6812, b/286091643)
- Métriques
- Fonctionnalité expérimentale de compteur d'événements de processeur (métriques de
perf_event_open
, qui nécessite root sur la plupart des versions de la plate-forme), accès viaInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(peut être défini surtrue
), etandroidx.benchmark.cpuEventCounter.events
peut être défini par exemple sur (Instructions,CpuCycles
). Cette fonctionnalité devrait être compatible avec certains émulateurs userdebug, mais elle n'a pas été testée sur tous les émulateurs disponibles.
- Fonctionnalité expérimentale de compteur d'événements de processeur (métriques de
Modifications apportées à MACRObenchmark depuis la version 1.2.0
- Refonte du traçage de méthode pour les macrobenchmarks.
- Les traces de méthode sont désormais limitées à la durée de l'
measureBlock
et peuvent capturer plusieurs sessions si le processus démarre plusieurs fois. - Auparavant, le traçage de méthode ne fonctionnait que pour les benchmarks
StartupMode.COLD
et ne capturait rien pourmeasureBlocks
qui ne redémarrait pas le processus cible. - Correction du vidage des traces de méthode dans macrobenchmark, de sorte que les traces de méthode soient entièrement capturées et valides, même sur les appareils plus lents. (I6349a, b/329904950)
- Les traces de méthode sont désormais limitées à la durée de l'
- Échantillonnage correct du profil ART lors des itérations
warmUp
individuelles lorsque le processus est arrêté afin que les mesuresCompilationMode.Partial(warmup=N)
soient plus précises. (I17923) - Message d'échec de la diffusion du nuanceur
- Ajout de suggestions de débogage au message d'échec de la diffusion du nuanceur
- Ajout de deux arguments d'instrumentation pour forcer le comportement de suppression des nuanceurs afin de contourner les plantages lors des tests d'applications sans
ProfileInstaller
1.3 :androidx.benchmark.dropShaders.enable=true/false
: permet d'ignorer toutes les suppressions de nuanceurs (y compris celles effectuées lors des lancements deStartupMode.Cold
), en particulier lors des tests comparatifs d'applications qui n'utilisent pas encore ProfileInstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: permet de tolérer les échecs lors de la suppression de nuanceurs, par exemple lors de l'analyse comparative d'applications sans ProfileInstaller 1.3 (I4f573)
- Ajout d'une variante
MacrobenchmarkRule#measureRepeated
expérimentale qui utilise unPerfettoConfig
personnalisé pour l'enregistrement de traces Perfetto entièrement personnalisé. Notez que des configurations mal configurées peuvent entraîner l'échec des classes de métriques intégrées. (Idfd3d, b/309841164, b/304038384) - Annulez les tâches dexopt en arrière-plan avant d'exécuter un Macrobenchmark pour réduire les interférences. (I989ed)
- Macrobenchmark attend désormais une seconde pour que l'application cible vide un profil ART (auparavant, il attendait 500 ms). (I85a50, b/316082056)
- Refonte de TraceSectionMetric
- Remarque: Les modifications
TraceSectionMetric
ci-dessous peuvent affecter les sorties lors de l'utilisation de la CI, et peuvent créer des discontinuités ou interrompre l'analyse. - La somme est désormais la valeur par défaut, car la plupart des utilisations de cette métrique concernent des événements répétés, et les données seraient d'abord supprimées dans ce cas.
- Plus personnalisable, avec plus de modes disponibles
- Les noms de mode sont désormais intégrés au nom de la sortie de la métrique (dans Studio et JSON)
- Prise en charge des tranches créées à l'aide de
Trace.{begin|end}AsyncSection
.
- Remarque: Les modifications
- Métriques
- Alimentation : ajout de
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
etPowerMetric.deviceSupportsPowerEnergy()
Metric.getResult
a été renommé engetMeasurements
pour correspondre au type de retour.- Ajout de libellés log.w / exception à tous les échecs de détection de démarrage. Cela ne modifie pas le comportement actuel (certaines erreurs sont donc générées, et d'autres ne détectent pas le démarrage de manière silencieuse), mais le rend plus compréhensible. En général, les métriques de démarrage qui ne sont pas envoyées par
Log.w()
sont celles pour lesquelles des événements autres que des frames sont manquants, des exceptions sont générées lorsque le démarrage est détecté, à l'exception des informations de synchronisation des frames (à partir des tranches UI/RT). (Id240f, b/329145809) - Ajout de la mesure
frameCount
àFrameTimingMetric
pour faciliter la détection des scénarios où les mesures changent en raison de la modification du nombre de frames produits (nouvelles animations ajoutées, problèmes d'invalidation résolus). (I1e5aa) - Clarification :
frameOverrunMs
est la métrique de suivi privilégiée lorsqu'elle est disponible dans les documents, et pour quelle raison. (I18749, b/329478323) - Correction d'un problème où les trames non terminées au début et à la fin de la trace pouvaient être associées, ce qui était signalé à tort comme une seule trame extrêmement longue. (I39353, b/322232828)
- Amélioration de l'erreur
FrameTimingMetric
lorsque des frames ne sont pas générés, et toujours affichage du lien vers la trace en cas d'échec de l'analyse des métriques pour faciliter le diagnostic du problème. (I956b9) - Correction d'un plantage dans
FrameTimingMetric
qui ne parvenait pas à analyser l'ID de frame, en particulier sur certains appareils OEM. (Ia24bc, b/303823815, b/306235276) - Assouplissement de la rigueur des vérifications dans
FrameMetrics
et ajout de détails aux messages d'erreur. (Iadede)
- Alimentation : ajout de
Modifications apportées à la capture de profils de référence / au plug-in Gradle depuis la version 1.2.0
- Augmentation de la version maximale recommandée d'AGP à 9.0.0-alpha01.
- Assurez-vous que les tâches
mergeArtProfile
etmergeStartupProfile
attendent toujours la génération du profil de référence. (I623d6, b/343086054) - La génération d'un profil de référence génère un résumé des modifications apportées. (I824c8, b/269484510)
- Ajout d'un DSL pour désactiver les avertissements (Ic4deb, b/331237001)
- Correction pour s'assurer que les benchmarks utilisent les profils de référence générés lorsque
automaticGenerationDuringBuild
est désactivé. (Ic144f, b/333024280) - Correction des forçages de propriété du plug-in Gradle
BaselineProfile
pour activer la génération de profils de référence et les benchmarks lors de la personnalisation d'un type de compilationnonMinified
ou de benchmark. (Ib8f05, b/324837887) - Correction pour l'inclusion de profils de référence de bibliothèque dans l'AAR avant AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- Correction de l'URL de sortie du profil de référence et du profil de démarrage à la fin de la tâche de génération. (I802e5, b/313976958)
Autres modifications importantes depuis la version 1.2.0
- Capture de trace
- Réduction de l'erreur EXITCODE 2 lors du démarrage de perfetto à partir d'une erreur en avertissement consigné
- Activation du traçage AIDL par défaut dans les benchmarks(nécessite l'API 28) (Ia0af2, b/341852305)
- Activez le traçage des balises Porter par défaut dans les benchmarks. Cela permet de capturer, par exemple, les tracepoints de wakelock. (Icfe44, b/286551983)
- Augmentation du délai de démarrage de la capture de trace pour éviter les plantages lors du démarrage du traçage sur les appareils plus lents. (I98841, b/329145808)
- Ajout d'API publiques
PerfettoTraceProcessor.Session.queryMetrics
avec des variantes JSON, textproto et proto binaires (non décodées). Ils vous permettent d'interroger les métriques intégrées àTraceProcessor
. (I54d7f, b/304038382) - Activez le démarrage bloquant sur l'enregistrement de trace Perfetto pour réduire le risque de données manquantes au début de la trace. Compatible uniquement avec l'API 33 et les versions ultérieures. (Ie6e41, b/310760059)
- Sortie JSON
- Ajout d'informations supplémentaires dans le contexte du benchmark dans la sortie JSON :
context.artMainlineVersion
: version entière du module de ligne principale Art (si présent sur l'appareil,-1
sinon)context.build.id
: égal à android.os.Build.IDcontext.build.version.codename
: égal à android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
: correspond à la première lettre du nom de code de la version préliminaire (y compris dans les builds de version) (Ie5020)
- Ajout d'une liste
profilerOutput
à la sortie JSON pour faciliter l'utilisation des outils autour des traces de profilage (par exemple, Perfetto, traces de méthode) (I05ddd, b/332604449) - Ajout d'un avertissement lorsque Android Test Orchestrator est utilisé dans des modules de benchmark, car les fichiers JSON de sortie par module seront écrasés à plusieurs reprises. (Ia1af6, b/286899049)
- Exception lancée lorsque les noms de fichiers sont plus longs que 200 caractères pour éviter les plantages peu clairs lors de l'écriture ou du post-traitement de fichiers. (I4a5ab)
- Ajout d'informations supplémentaires dans le contexte du benchmark dans la sortie JSON :
Version 1.3.0-rc01
7 août 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-rc01
. La version 1.3.0-rc01 contient ces commits.
Correction de bugs
- Correction de
androidx.benchmark.cpuEventCounter
qui produisait des valeurs corrompues pour les événements autres que des instructions. (I7386a, b/286306579) - Correction de
resumeTiming
/runWithTimingDisabled
pour respecter l'ordre de priorité des métriques et réduire considérablement l'impact de la suspension/reprise des métriques de priorité inférieure sur les résultats des métriques de priorité plus élevée. Par exemple, si vous utilisez des compteurs de performances de processeur via l'argument d'instrumentationcpuEventCounter.enable
, timeNs n'est plus considérablement réduit lors de la mise en pause/reprise. (I39c2e, b/286306579, b/307445225) - Réduction des risques d'échantillonnage de la pile empêchant
measureRepeatedOnMainThread
d'atteindre le délai avant expiration du thread principal en déplaçant la conversion de l'échantillonnage de la pile du thread principal. (I487a8, b/342237318) - Suppression de la description manuelle de l'accès aux nouvelles API de la plate-forme, car cela se produit automatiquement via la modélisation d'API lorsque vous utilisez R8 avec AGP 7.3 ou version ultérieure (par exemple, R8 version 3.3) et pour tous les builds lorsque vous utilisez AGP 8.1 ou version ultérieure (par exemple, D8 version 8.1). Les clients qui n'utilisent pas AGP sont invités à passer à la version 8.1 de D8 ou ultérieure. Consultez cet article pour en savoir plus. (I9496c, b/345472586)
- Ajout d'une vérification de la version agp pour envoyer le nom du package en tant qu'argument instr. Avant AGP 8.4.0, le nom du package de l'application cible ne pouvait pas être envoyé à l'application d'instrumentation via des arguments d'instrumentation. (0c72a3f)
Version 1.3.0-beta02
10 juillet 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-beta02
. La version 1.3.0-beta02 contient ces commits.
Correction de bugs
- Gérez correctement EXITCODE
2
lors du démarrage de Perfetto pour consigner un avertissement, mais poursuivez.
Version 1.3.0-beta01
12 juin 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-beta01
. La version 1.3.0-beta01 contient ces commits.
Modifications apportées à l'API
MethodTracing.affectsMeasurementOnThisDevice
a été renomméAFFECTS_MEASUREMENT_ON_THIS_DEVICE
pour plus de cohérence. (I1bdfa)- Ajout d'une API
BlackHole.consume()
expérimentale pour éviter l'élimination du code inutilisé dans les micro-benchmarks. (If6812, b/286091643) - Microbenchmark génère désormais une exception pour éviter que le traçage de méthode n'interfère avec les mesures. Cela se produit sur certains appareils lorsque le traçage de méthode est activé de force (via des arguments d'instrumentation ou
MicrobenchmarkConfig
) et si une mesure est tentée après un traçage de méthode. Les appareils concernés exécutent les API 26 à 30 ou certaines versions de modules principaux ART affectées par cette interférence. Ils peuvent être détectés au moment de l'exécution viaProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864)
Correction de bugs
- La version maximale d'AGP recommandée est passée à 9.0.0-alpha01. (I5bbb0)
- Ajout du mode de compilation au contexte de benchmark (If5612, b/325512900)
- Activation du traçage AIDL par défaut (nécessite l'API 28) (Ia0af2, b/341852305)
- Ajout d'informations supplémentaires dans le contexte du benchmark dans la sortie JSON :
context.artMainlineVersion
: version entière du module de ligne principale Art (si présent sur l'appareil, -1 sinon)context.build.id
: équivaut àandroid.os.Build.ID
context.build.version.codename
: équivaut àandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
: correspond à la première lettre du nom de code de la version préliminaire (même sur les builds de version) (Ie5020)
- Correction de
StackSampling
pour respecterandroidx.benchmark.profiling.sampleDurationSeconds
. (Ib1d53) - Modifiez la dépendance macro->common pour qu'elle soit
api()
, afin qu'elle soit plus facile à utiliser (par exemple,PerfettoTrace
etPerfettoConfig
). (Icdae3, b/341851833) - Assurez-vous que les tâches
mergeArtProfile
etmergeStartupProfile
attendent toujours la génération du profil de référence. (I623d6, b/343086054) - Tenez compte de l'état d'activation de la variante pour décider si elle doit être activée. (I5d19e, b/343249144)
- Augmentation du délai d'expiration de démarrage par défaut pour le processeur de trace perfetto. (I87e8c, b/329145808)
Version 1.3.0-alpha05
14 mai 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-alpha05
. La version 1.3.0-alpha05 contient ces commits.
Correction de bugs
- Génération d'une exception plus claire lorsque la métrique macrobench renvoie des valeurs nulles pour toutes les itérations (Iab58f, b/314931695)
- Ajout de règles de contournement supplémentaires aux règles ProGuard microbench, y compris la prise en charge des règles d'écouteur et d'autres avertissements / erreurs observés. (I14d8f, b/329126308, b/339085669)
- Le traçage de méthode s'exécute en tant que phase distincte lors d'un macrobenchmark et n'affecte plus les mesures. (If9a50, b/285912360, b/336588271)
- Ajout de suggestions de débogage supplémentaires pour le message d'échec de la diffusion du nuanceur. (I5efa6, b/325502725)
Version 1.3.0-alpha04
1er mai 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-alpha04
. La version 1.3.0-alpha04 contient ces commits.
Modifications apportées à l'API
- Ajout d'une variante
MacrobenchmarkRule#measureRepeated
expérimentale qui utilise unPerfettoConfig
personnalisé pour l'enregistrement de traces Perfetto entièrement personnalisé. Notez que des configurations mal configurées peuvent entraîner l'échec des classes de métriques intégrées. (Idfd3d, b/309841164, b/304038384) PowerMetric.deviceSupportsPowerEnergy
a été renomméPowerMetric.deviceSupportsHighPrecisionTracking
pour plus de clarté (I5b82f)- Ajout de
PowerMetric.deviceBatteryHasMinimumCharge()
etPowerMetric.deviceSupportsPowerEnergy()
pour permettre de modifier ou d'ignorer les benchmarks en fonction de la capacité de mesure de la puissance de l'appareil. (I6a591, b/322121218)
Correction de bugs
- Ajout d'une comparaison avec le profil de référence précédent (I824c8, b/269484510)
- Ajout d'un DSL pour désactiver les avertissements (Ic4deb, b/331237001)
- Modification de l'exception dans le journal d'informations lorsque les variantes de benchmark sont désactivées. (I8a517, b/332772491)
- La capture des traces de méthode pour un Macrobenchmark est limitée à la durée de la
measureBlock()
réelle. Auparavant, il démarrait au lancement du processus cible et n'était compatible qu'avec les démarrages à froid (Iee85a, b/300651094) - Éviter les plantages lorsque le processeur de traces perfetto met du temps à démarrer (I98841, b/329145808)
Version 1.3.0-alpha03
17 avril 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-alpha03
. La version 1.3.0-alpha03 contient ces commits.
Nouvelles fonctionnalités
- Ajoute des API publiques
PerfettoTraceProcessor.Session.queryMetrics
avec des variantes JSON, textproto et proto binaires (non décodées). Elles vous permettent d'interroger les métriques intégrées à TraceProcessor (I54d7f, b/304038382). - Ajout de
profilerOutput
à la sortie JSON pour faciliter l'utilisation des outils autour des traces de profilage (par exemple, perfetto, traces de méthode). (I05ddd, b/332604449) - Ajout d'une balise d'alimentation pour comparer la configuration Perfetto. Cela permet de capturer, par exemple, les tracepoints de wakelock. (Icfe44, b/286551983)
- Ajout de l'argument inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, qui peut être défini sur "false" pour éviter de sauter les traces de méthode lorsque la durée prévue peut entraîner une erreur ANR. Nous vous recommandons vivement de ne pas l'utiliser dans les exécutions de CI. - Ajout de l'argument d'inst expérimental
androidx.benchmark.profiling.perfCompare.enable
. Définissez-le sur "true" pour exécuter le chronométrage de comparaison entre les phases de mesure et de profilage. Utile, par exemple, pour évaluer les frais généraux du traçage de méthode. (I61fb4, b/329146942)
Modifications apportées à l'API
- Modification de
TraceSectionMetric.Mode
en classe scellée pour permettre une future extension sans endommager les instructions "when" exhaustives (I71f7b) - Ajout de
TraceSectionMetric.Mode.Average
et.Count
, et réorganisation des arguments afin que l'argument le plus courant (mode) soit placé plus tôt dans la liste des arguments, ce qui réduit le besoin de spécifier des noms de paramètres. (Ibf0b0, b/315830077, b/322167531) Metric.getResult
renommégetMeasurements
pour correspondre au type de retour (I42595)
Correction de bugs
- Correction pour s'assurer que les benchmarks utilisent les profils de référence générés lorsque
automaticGenerationDuringBuild
est désactivé. (Ic144f, b/333024280) - Correction des forçages de propriété du plug-in Gradle
BaselineProfile
pour activer la génération de profils de référence et les benchmarks lors de la personnalisation d'un type de compilationnonMinified
ou de benchmark. (Ib8f05, b/324837887) - Correction du vidage des traces de méthode dans macrobenchmark, de sorte que les traces de méthode soient entièrement capturées et valides, même sur les appareils plus lents. (I6349a, b/329904950)
- Activez le démarrage bloquant sur l'enregistrement de trace Perfetto pour réduire le risque de données manquantes au début de la trace. Compatible uniquement avec l'API 33 et les versions ultérieures. (Ie6e41, b/310760059)
- Ajout d'un avertissement lorsque Android Test Orchestrator est utilisé dans des modules de benchmark, car les fichiers JSON de sortie par module seront écrasés à plusieurs reprises. (Ia1af6, b/286899049)
- Forcer la virgule (,) comme séparateur de milliers pour assurer la cohérence dans la sortie Studio, en ignorant les paramètres régionaux de l'appareil (I3e921, b/313496656)
TraceSectionMetric
est désormais compatible avec les tranches créées à l'aide deTrace.{begin|end}AsyncSection
. (I91b32, b/300434906)- Ajout de libellés log.w / exception à tous les échecs de détection de démarrage. Cela ne modifie pas le comportement actuel (certaines erreurs sont donc générées, et d'autres ne détectent pas le démarrage de manière silencieuse), mais le rend plus compréhensible. En général, les métriques de démarrage qui ne sont pas envoyées par
Log.w()
sont celles pour lesquelles des événements autres que des frames sont manquants, des exceptions sont générées lorsque le démarrage est détecté, à l'exception des informations de synchronisation des frames (à partir des tranches UI/RT). (Id240f, b/329145809) - Annulez les tâches dexopt en arrière-plan avant d'exécuter un Macrobenchmark pour réduire les interférences. (I989ed)
- Ajout de la mesure
frameCount
àFrameTimingMetric
pour faciliter la détection des scénarios où les mesures changent en raison de la modification du nombre de frames produits (nouvelles animations ajoutées, problèmes d'invalidation résolus). (I1e5aa) - Clarification :
frameOverrunMs
est la métrique de suivi privilégiée lorsqu'elle est disponible dans les documents, et pour quelle raison. (I18749, b/329478323)
Version 1.3.0-alpha02
20 mars 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-alpha02
. La version 1.3.0-alpha02 contient ces commits.
Nouvelles fonctionnalités
Prise en charge expérimentale de R8 dans microbench via des règles ProGuard intégrées. Notez que cette prise en charge est expérimentale et nécessite AGP 8.3 pour la minimisation des tests de modules de bibliothèque. Utilisez les éléments suivants pour activer la minification/l'optimisation R8 dans le fichier
build.gradle
de votre module de référence, ce qui devrait entraîner une augmentation significative des performances, en fonction de la charge de travail. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
Correction de bugs
- Correction de l'avertissement de traçage de méthode pour qu'il soit sur une ligne distincte de la sortie du microbench. (I0455c, b/328308833)
Version 1.3.0-alpha01
21 février 2024
Publication d'androidx.benchmark:benchmark-*:1.3.0-alpha01
. Liste des commits de la version 1.3.0-alpha01
Modifications apportées à l'API
- Modification du nom des paramètres booléens
MicrobenchmarkConfig
pour éviter l'utilisation inutile du mot "devrait" (Ia8f00, b/303387299) - Ajout de
BenchmarkRule.measureRepeatedOnMainThread
pour que les benchmarks du thread principal (par exemple, ceux qui touchent les vues ou les UI Compose) puissent éviter de déclencher des erreurs ANR, en particulier lors de grandes suites en CI. (I5c86d) - Ajout de
FrameTimingGfxInfoMetric
, une implémentation expérimentale deFrameTimingMetric
avec des mesures provenant directement de la plate-forme, plutôt que d'être extraites de la trace Perfetto. (I457cb, b/322232828) - Ajout de la possibilité de vider un profil ART lors des itérations individuelles de
warmUp
. (I17923) - Plusieurs modifications apportées à l'API
TraceSectionMetric
:- Ajouter
Mode.Min
,Mode.Max
- Ajouter un argument de libellé pour remplacer le nom de la section en tant que libellé de métrique
- Ajout du nom du mode à la sortie pour clarifier la signification de la métrique
- La valeur par défaut a été définie sur "somme", car la plupart des utilisations de cette métrique concernent des événements répétés. Tenez compte de ces modifications dans l'utilisation de la CI, car elles peuvent créer des discontinuités ou interrompre l'analyse. (Ic1e82, b/301892382, b/301955938)
- Ajouter
Correction de bugs
- Amélioration du message d'erreur dans le plug-in Gradle du profil de référence lorsque l'appareil géré spécifié n'existe pas (Idea2b, b/313803289)
- Correction de l'inclusion des profils de référence de la bibliothèque dans l'AAR avant AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- Correction de l'URL de sortie du profil de référence et du profil de démarrage à la fin de la tâche de génération. (I802e5, b/313976958)
- Ajustement des délais avant expiration des sources de données pour tenter de corriger
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
. (I8dc7d, b/323601788) - Ajout de deux arguments d'instrumentation pour forcer le comportement de suppression des nuanceurs afin de contourner les plantages lors des tests d'applications sans
ProfileInstaller
1.3 :androidx.benchmark.dropShaders.enable=true/false
: permet d'ignorer toutes les suppressions de nuanceurs (y compris celles effectuées lors des lancements deStartupMode.Cold
), en particulier lors des tests comparatifs d'applications qui n'utilisent pas encore ProfileInstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: permet de tolérer les échecs lors de la suppression de nuanceurs, par exemple lors de l'analyse comparative d'applications sans profileinstaller 1.3 (I4f573)
- Ignorez le traçage de méthode sur le thread d'interface utilisateur lorsque l'opération est censée prendre plus de quelques secondes, et nettoyez les traces de méthode lors de l'exception. (I6e768)
- Exception lancée lorsque les noms de fichiers sont plus longs que 200 caractères pour éviter les plantages peu clairs lors de l'écriture ou du post-traitement de fichiers. (I4a5ab)
- Correction d'un problème où les trames non terminées au début et à la fin de la trace pouvaient être associées, ce qui était signalé à tort comme une seule trame extrêmement longue. (I39353, b/322232828)
- Utilisez
--skip verification
sur l'API 30 ou version ultérieure lorsque vous réinstallez un package sur l'API 30 à 33 pour effacer les profils ART sur les builds utilisateur. Cela permet de contourner les avertissements Play Protect qui entraînent des défaillances sur certaines classes d'appareils. (Ic9e36) - Utilisez
am force-stop
pour fermer les applications qui ne sont pas des applications système, comme l'UI du système ou le lanceur. (I5e028) - Macrobenchmark attend désormais
1 second
pour que l'application cible vide un profil ART (auparavant, il attendait500 ms
). (I85a50, b/316082056) - Amélioration de l'erreur
FrameTimingMetric
lorsque des frames ne sont pas générés, et toujours affichage du lien vers la trace en cas d'échec de l'analyse des métriques pour faciliter le diagnostic du problème. (I956b9) - Correction d'un plantage dans
FrameTimingMetric
qui ne parvenait pas à analyser l'ID de frame, en particulier sur certains appareils OEM. (Ia24bc, b/303823815, b/306235276) - Assouplissement de la rigueur des vérifications dans
FrameMetrics
et ajout de détails aux messages d'erreur. (Iadede)
Version 1.2
Version 1.2.4
17 avril 2024
Publication d'androidx.benchmark:benchmark-*:1.2.4
. La version 1.2.4 contient ces commits.
Correction de bugs
- Corrige le fait que le srcset du profil de référence n'est pas configuré dans les variantes de référence. Corrige également
automaticGenerationDuringBuild
dans les bibliothèques, ce qui entraînait une dépendance circulaire. (I28ab7, b/333024280) - Utilisez
am force-stop
pour fermer les applications qui ne sont pas des applications système, comme l'UI du système ou le lanceur. Cela corrige les plantages des benchmarksStartupMode.COLD
en raison de l'erreur "Le package $package ne doit pas être en cours d'exécution avant le démarrage à froid !", car l'arrêt du processus n'est pas entièrement réussi. (I5e028)
Version 1.2.3
24 janvier 2024
Publication d'androidx.benchmark:benchmark-*:1.2.3
. Liste des commits de la version 1.2.3
Correction de bugs
- Suppression de l'exception du plug-in Baseline Profile Gradle lorsque la version d'AGP est 8.3.0 ou ultérieure.
- Correction pour l'inclusion de profils de référence de bibliothèque dans l'AAR avant AGP 8.3.0-alpha15.
Version 1.2.2
1er décembre 2023
Publication d'androidx.benchmark:benchmark-*:1.2.2
. Liste des commits de la version 1.2.2
Profils de référence
- Les journaux d'exécution affichent le chemin d'accès du fichier de sortie du profil de référence sous la forme d'un URI de fichier local (aosp/2843918, aosp/2853665, b/313976958)
Version 1.2.1
15 novembre 2023
Publication d'androidx.benchmark:benchmark-*:1.2.1
. Liste des commits de la version 1.2.1
Nouvelles fonctionnalités
- Amélioration du message d'erreur lorsque l'utilisateur désactive les variantes de test (b/307478189)
- Ajout de propriétés pour prendre en charge l'intégration des exécutions de test AS (b/309805233), (b/309116324)
Version 1.2.0
18 octobre 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0
. Liste des commits de la version 1.2.0
Changements importants depuis la version 1.1.0
Profils de référence
- Le nouveau plug-in Baseline Profile Gradle automatise la capture et l'inclusion de profils de référence dans votre workflow de test et de compilation.
BaselineProfileRule.collect
est désormais stable, une version simplifiée et rationalisée de l'ancienne API expérimentaleBaselineProfileRule.collectBaselineProfile
.- Il vous suffit de spécifier
packageName
et de piloter votre application.
- Il vous suffit de spécifier
- Pour les bibliothèques générant des profils de référence, vous pouvez désormais filtrer les règles générées soit dans le code (argument
BaselineProfileRule.collect
), soit encore plus simplement dans le plug-in Gradle. - Corrections
- Correction de la collecte du profil de référence sur Android U+ (Id1392, b/277645214)
Macrobenchmark
- Compilation
- Macrobenchmark réinitialise désormais correctement l'état de compilation pour chaque compilation. Pour ce faire, vous devez réinstaller l'APK avant Android 14. Nous vous recommandons donc vivement d'effectuer des analyses comparatives sur Android 14 ou version ultérieure si vous souhaitez conserver l'état (comme la connexion de l'utilisateur) dans ce qui est mesuré.
- Vous pouvez également contourner ce problème en contrôlant la compilation de l'application séparément et en ignorant la compilation avec
CompilationMode.Ignore()
ou l'argument d'instrumentation.
Arguments d'instrumentation
- Prise en charge de l'argument d'instrumentation
androidx.benchmark.dryRunMode.enable
(déjà disponible dans microbenchmark) pour des exécutions de validation plus rapides (par exemple, lors de la création du benchmark ou avant l'envoi) - Compatibilité avec
androidx.benchmark.profiling.mode=StackSampling
etMethodTracing
. - Ajout de
androidx.benchmark.enabledRules
pour permettre le filtrage d'exécution des tests de profil de référence par rapport aux règles de macrobenchmark - Ajout de l'argument
androidx.benchmark.perfettoSdkTracing.enable
pour activer le traçage avec tracing-perfetto, par exemple le traçage de la recomposition Compose. Notez que lorsque vous utilisezStartupMode.COLD
, le timing est considérablement affecté, car la bibliothèque de traçage est chargée et activée au démarrage de l'application.
- Prise en charge de l'argument d'instrumentation
Conditions requises
- Macrobenchmark nécessite désormais
ProfileInstaller
1.3.0 ou version ultérieure dans l'application cible pour activer la capture / réinitialisation de profil et la suppression du cache du nuanceur.
- Macrobenchmark nécessite désormais
Nouvelles API de métriques expérimentales
- Ajout d'une
TraceSectionMetric
expérimentale, qui permet d'extraire des délais simples à partir des blocstrace("") {}
de votre application, ou d'une TraceMetric pour exploiter toutes les fonctionnalités de requête de PerfettoTraceProcessor
. - Ajout d'un
PowerMetric
expérimental pour collecter des informations sur la consommation d'énergie - Ajout d'un
MemoryCountersMetric
expérimental pour comptabiliser les erreurs de page - Ajout de l'API expérimentale
PerfettoTraceProcessor
, qui est utilisée en interne pour extraire des métriques à partir de traces système (également appelées traces Perfetto).
- Ajout d'une
Correctifs
- Résolution des plantages lors de l'installation ou de l'extraction de profils à partir d'une application installée à partir de plusieurs APK (par exemple, à partir d'un app bundle).
- Correction de
FrameTimingMetric
qui ignorait les frames avec des ID de frame incohérents (généralement, les frames pendant les ondulations sur l'API 31 et versions ultérieures) (I747d2, b/279088460) - Correction des erreurs d'analyse sur les traces de plus de 64 Mo (Ief831, b/269949822)
- Clarification des erreurs lorsque l'image de l'OS de l'appareil (en particulier de l'émulateur) n'est pas correctement configurée pour le traçage ou la compilation
- Vérification du niveau de la batterie ignorée pour les appareils sans batterie (micro et macro)
- Amélioration de la sortie de fichier, avec des erreurs plus claires pour les répertoires de sortie non valides et des valeurs par défaut plus sûres
- Amélioration de la stabilité de
StartupMode.COLD
en supprimant systématiquement le cache du nuanceur (également exposé viaMacrobenchmarkScope.dropShaderCache
) - Correction du remplacement Leanback pour
startActivityAndWait
.
Microbenchmark
- Fonctionnalités
- Le profilage a été déplacé dans une phase distincte, après les autres métriques. Une seule exécution de test peut donc afficher à la fois des résultats précis sur le plan de la temporalité et du profilage.
- API expérimentales
- Ajout d'une API
MicrobenchmarkConfig
expérimentale pour définir des métriques personnalisées et configurer le traçage et le profilage. Peut être utilisé pour capturer des traces de méthode ou des points de trace (mais attention aux coûts liés au traçage). - Ajout d'API expérimentales pour contrôler
BenchmarkState
séparément deBenchmarkRule
, sans JUnit - Ajout d'un enregistrement
PerfettoTrace
expérimental pour permettre de capturer des traces Perfetto, avec une configuration personnalisée, distincte des API de benchmark.
- Ajout d'une API
- Corrections
- Contourner les espaces vides manquants dans la sortie du benchmark Android Studio.
- Correction d'un problème qui empêchait l'impression des avertissements dans la sortie du benchmark Android Studio.
- Correction du plantage
SampledProfiling
sur Android 13 (API 33) ou version ultérieure. - Amélioration considérable des performances de
dryRunMode
en ignorantIsolationActivity
et le traçage Perfetto (jusqu'à 10 fois plus rapide en mode simulation sur les anciennes versions de l'OS).
Version 1.2.0-rc02
6 octobre 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-rc02
. Liste des commits de la version 1.2.0-rc02
Correction de bugs
- Correction de la sortie du fichier de benchmark pour ne plus interrompre la copie des fichiers de plug-in
BaselineProfile
. Les fichiers ont été générés et copiés depuis l'appareil, mais ils ont été renommés de sorte que le plug-in Gradle ne les voit pas. (I8dbcc, b/303034735, b/296453339) - Clarification des messages d'erreur de chargement
tracing-perfetto
lors de l'injection à partir du module macrobenchmark dans l'application cible.
Version 1.2.0-rc01
20 septembre 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-rc01
. Liste des commits de la version 1.2.0-rc01
Correction de bugs
- Une exception (avec des instructions de correction) est désormais générée lorsque l'initialisation du traçage du SDK Perfetto échoue dans un benchmark. (I6c878, b/286228781)
- Correction du plantage OOM lors de la conversion de la trace de méthode ART au format Perfetto. (I106bd, b/296905344)
- (Macrobenchmark) Clarification du libellé de traçage de méthode lorsqu'il est associé à la sortie du test Studio, et correction des noms de fichiers de traçage de méthode pour qu'ils soient uniques sur l'appareil/l'hôte, afin qu'ils ne soient pas écrasés lorsque plusieurs benchmarks sont exécutés. (I08e65, b/285912360)
- Assure que l'appareil est actif lors de la capture d'un profil de référence. (I503fc)
Version 1.2.0-beta05
30 août 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-beta05
. Liste des commits de la version 1.2.0-beta05
Nouvelles fonctionnalités
- Le plug-in Baseline Profile Gradle est désormais compatible avec le plug-in Android Gradle 8.3. (aosp/2715214)
Version 1.2.0-beta04
23 août 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-beta04
. Liste des commits de la version 1.2.0-beta04
Nouvelles fonctionnalités
- Le plug-in Baseline Profile Gradle est désormais compatible avec le plug-in Android Gradle 8.3. (aosp/2715214)
Corrections de bugs
- Correction des échecs lors de l'écriture/du déplacement et de la récupération de fichiers (en particulier ceux provenant de tests paramétrés) en assainissant davantage les noms de fichiers de sortie, en évitant d'utiliser des '=' et ':'. (I759d8)
Version 1.2.0-beta03
9 août 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-beta03
. Liste des commits de la version 1.2.0-beta03
Modifications apportées à l'API
- Ajout d'un argument pour filtrer
TraceSectionMetric
uniquement sur le package cible, activé par défaut (Ia219b, b/292208786)
Corrections de bugs
- L'argument d'instrumentation
fullTracing.enable
a été renomméperfettoSdkTracing.enable
pour plus de cohérence avec le nom de l'artefact et d'autres références.fullTracing.enable
continuera de fonctionner comme une solution de secours. (I7cc00) - Les points de trace internes de la bibliothèque Benchmark (y compris le traçage des boucles/phases des microbenchmarks) apparaissent désormais dans le lecteur de traces du système Studio et s'imbriquent dans le bon processus dans Perfetto. (I6b2e7, b/293510459)
- Suppression de l'erreur NOT-PROFILEABLE du macrobenchmark sur les API de niveau 31 ou plus, et passe la vérification du profilage sur les appareils eng/userdebug en mode root. (I2abac, b/291722507)
- Lors de l'utilisation des optimisations de mise en page DEX, les règles de profil de démarrage sont désormais également considérées comme des règles de profil de référence. (aosp/2684246, b/293889189)
Version 1.2.0-beta02
26 juillet 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-beta02
. Liste des commits de la version 1.2.0-beta02
Modifications apportées à l'API
- Ajout d'API expérimentales pour la configuration et les métriques personnalisées de microbench (par exemple, le profileur et le traçage). (I86101, b/291820856)
Corrections de bugs
- Signalement d'une erreur dans macrobench lorsque l'OS est mal configuré pour le traçage, comme cela a été récemment corrigé dans les émulateurs ARM64 pour les API 26/28. (I0a328, b/282191686)
- Ajout de précisions sur l'échec de la réinitialisation de la compilation pour suggérer la mise à jour de l'émulateur, car certains émulateurs ont récemment corrigé ce problème. (I8c815, b/282191686)
- Fait d'
androidx.test.uiautomator:uiautomator:2.2.0
uneapi
plutôt qu'une dépendanceimplementation
. (I1981e)
Version 1.2.0-beta01
18 juillet 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-beta01
. Liste des commits de la version 1.2.0-beta01
Corrections de bugs
- Correction des avertissements qui sont parfois supprimés dans la sortie du benchmark dans Studio, et contournement des espaces blancs dans la sortie du benchmark qui n'apparaissent pas dans Studio. (Ia61d0, b/227205461, b/286306579, b/285912360)
- Correction du commentaire pour
FrameTimingMetric
. La sous-métrique est nomméeframeDurationCpuMs
. (Ib097f, b/288830934).
Version 1.2.0-alpha16
21 juin 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha16
. Liste des commits de la version 1.2.0-alpha16
Modifications apportées à l'API
- L'API
BaselineProfileRule.collectBaselineProfile()
a été renomméeBaselineProfileRule.collect()
. (I4b665)
Corrections de bugs
- Prise en charge du macrobenchmark pour
androidx.benchmark.profiling.mode = MethodTracing
. (I7ad37, b/285912360) - Le profilage des microbenchmarks a été déplacé dans une phase distincte, de sorte qu'il se produit après la mesure, au lieu de la remplacer. Les sections de trace
MethodTracing
sont désormais incluses dans la trace Perfetto capturée, le cas échéant. (I9f657, b/285014599) - Ajout de la mesure de comptage à
TraceSectionMetric
avecMode.Sum
. (Ic121a, b/264398606)
Version 1.2.0-alpha15
7 juin 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha15
. Liste des commits de la version 1.2.0-alpha15
Nouvelles fonctionnalités
- Ajout d'un
MemoryUsageMetric
expérimental pour suivre l'utilisation de la mémoire d'une application cible. (I56453, b/133147125, b/281749311) - Ajout de la prise en charge des configurations Perfetto entièrement personnalisées avec
PerfettoTrace.record
. (If9d75, b/280460183) - Ajout d'une propriété pour ignorer la génération de profils de référence. Utilisation :
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
Modifications apportées à l'API
- L'API
collectBaselineProfile
ne génère que des profils de référence stables. L'APIcollectStableBaselineProfile
a été supprimée. Il faut dorénavant utilisercollectBaselineProfile
. (I17262, b/281078707) - Modification de l'argument
filterPredicate
deBaselineProfileRule
pour qu'il soit non nul, avec une valeur par défaut équivalente afin que le comportement du filtre par défaut soit plus clair dans la documentation. (I3816e)
Corrections de bugs
- Désactivation d'
IsolationActivity
et du traçage Perfetto dansdryRunMode
pour améliorer grandement les performances, étant donné qu'il s'agit de la majeure partie du temps d'exécution. (Ie4f7d) - Prise en charge de l'échantillonnage de la pile d'appel dans les Macrobenchmarks à l'aide des arguments de test d'instrumentation
androidx.benchmark.profiling.mode=StackSampling
etandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Correction d'un plantage lors de l'abandon de nuanceurs sur Android U (API 34), ainsi que sur les émulateurs. (I031ca, b/274314544)
Version 1.2.0-alpha14
3 mai 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha14
. Liste des commits de la version 1.2.0-alpha14
Corrections de bugs
- Correction de
FrameTimingMetric
ignorant les cadres avec des ID de cadre incohérents. Sur les versions récentes de la plate-forme (API 31 et ultérieures), certaines animations pouvaient ignorer plusieurs cadres pendant l'animation deRenderThread
(par exemple, lors d'une ondulation). (I747d2, b/279088460) - Correction de l'analyse du processeur de traces pour les traces de plus de 64 Mo. (Ief831, b/269949822)
- Correction de l'échec de la génération du profil de référence sur Android U en raison de différentes sorties de la commande
pm dump-profiles
. (Id1392, b/277645214) - Correction du script de verrouillage de l'horloge du GPU pour comparer correctement les chaînes. (I53e54, b/213935715)
Version 1.2.0-alpha13
5 avril 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha13
. Liste des commits de la version 1.2.0-alpha13
Modifications apportées à l'API
- Ajout d'un paramètre de type de profil lors de la génération de profils de référence afin de prendre en charge la prochaine fonctionnalité de profil de démarrage. (Ie20d7, b/275093123)
- Ajout d'une nouvelle API
TraceMetric
expérimentale pour définir des métriques entièrement personnalisées basées sur le contenu d'une trace Perfetto. (I4ce31, b/219851406) - Ajout d'une mesure expérimentale pour déterminer le nombre d'erreurs de page au cours d'un benchmark. (I48db0)
Version 1.2.0-alpha12
22 mars 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha12
. Liste des commits de la version 1.2.0-alpha12
Nouvelles fonctionnalités
- Le nouveau plugin Baseline Profile Gradle est disponible en version alpha, facilitant la génération d'un profil de référence et simplifiant le flux de travail des développeurs.
Modifications apportées à l'API
- Suppression de la prise en charge du traçage Perfetto sur les API 21 et 22, ce qui inclut à la fois les microbenchmarks et les API
PerfettoTrace
expérimentales. Avant cette version, les connexionsUiAutomation
n'étaient pas fiables sur certains appareils. (I78e8c) - Ajout d'une API
PerfettoTraceProcessor
publique expérimentale pour activer l'analyse du contenu de la trace. Il s'agit d'une étape vers des métriques entièrement personnalisées basées sur les données de traçage de Perfetto. (I2659e, b/219851406)
Version 1.2.0-alpha11
8 mars 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha11
. Liste des commits de la version 1.2.0-alpha11
Corrections de bugs
- Résolution des plantages dans
MacrobenchmarkRule
etBaselineProfileRule
lors de la réinstallation ou de l'extraction de profils à partir d'un app bundle contenant plusieurs APK. (I0d8c8, b/270587281)
Version 1.2.0-alpha10
22 février 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha10
. Liste des commits de la version 1.2.0-alpha10
Nouvelles fonctionnalités
- Sur Android 14 et versions ultérieures, Macrobenchmark ne réinstalle plus les applications cibles pour réinitialiser l'état de la compilation, grâce à une nouvelle fonctionnalité de plate-forme. Auparavant, il était nécessaire de disposer d'un appareil en mode root ou de supprimer tout état de l'application (par exemple, la connexion de l'utilisateur) avant chaque benchmark. (I9b08c, b/249143766)
Corrections de bugs
- Correction de
DryRunMode
pour empêcher les plantages en raison d'un profil vide, car la compilation était ignorée. Désormais, une seule itération est exécutée et le profil est extrait pour s'assurer de capturer quelque chose. (I2f05d, b/266403227) - Résolution du plantage de
PowerMetric
lors de la vérification de la présence de powerstats sur les anciens niveaux d'API. (5faaf9, b/268253898)
Version 1.2.0-alpha09
11 janvier 2023
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha09
. Liste des commits de la version 1.2.0-alpha09
Corrections de bugs
- Activation de la transmission de
None
à l'argument d'instrumentationandroidx.benchmark.enabledRules
pour désactiver tous les benchmarks ou la génération de profils de référence (I3d7fd, b/258671856) - Correction de la capture de
PerfettoTrace
dans les modules d'application (c'est-à-dire dans les APK sans autotest d'instrumentation) (I12cfc) - Correction de l'ordre des arguments d'extraction adb de profil de référence dans la sortie Studio (I958d1, b/261781624)
- API d'émulateur Arm 33 désormais reconnue lors de l'exécution d'un macrobenchmark et capable d'afficher correctement l'avertissement (69133b,b/262209591)
- Vérification du niveau de la batterie ignorée sur les appareils sans batterie dans Macrobenchmark (fe4114, b/232448937)
Version 1.2.0-alpha08
7 décembre 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha08
. Liste des commits de la version 1.2.0-alpha08
Modifications apportées à l'API
- Ajout des nouvelles API expérimentales
PerfettoTrace.record {}
etPerfettoTraceRule
pour capturer les traces de Perfetto (également appelées traces système) dans le cadre d'un test, afin d'inspecter le comportement et les performances du test. (I3ba16) BaselineProfileRule
accepte désormais un prédicat de filtre au lieu d'une liste de préfixes de package. Vous bénéficiez ainsi d'un contrôle total sur le filtrage. (I93240)- Ajout d'une API expérimentale
BaselineProfileRule.collectStableBaselineProfile
qui attend qu'un profil de référence soit stable pendant N itérations. (I923f3) - Possibilité de spécifier un préfixe de nom de fichier de sortie lors de la génération de profils de référence avec
BaselineProfileRule
. (I7b59f, b/260318655)
Corrections de bugs
- Amélioration de la sécurité de l'écriture de sortie des fichiers, ce qui devrait empêcher les fichiers de sortie d'être écrits/ajoutés sans notification, en particulier sur l'API 21/22. (If8c44, b/227510293)
- Correction du traceur
simpleperf
pour créer et placer le fichier correctement. De manière générale, cela devrait également résoudre les problèmes d'extraction de fichier par Gradle. (I12a1c, b/259424099) - Amélioration du message d'erreur profileinstaller affiché lorsque l'extension est trop ancienne. Un message vous invite désormais à mettre à jour la version de profileinstaller (1.2.1) pour mesurer les profils de référence sur les API 31 à 33, au lieu d'indiquer simplement un problème de compatibilité. (Ia517f, b/253519888)
- Correction de plusieurs échecs de commande shell avec le message d'erreur Print needed sur l'API 23 ou version ultérieure, y compris l'échec de la configuration binaire de capture perfetto et les échecs de capture de trace. (Ib6b87, b/258863685)
- Tri automatique des règles de profil générées pour réduire le nombre de modifications dans le temps (lors de l'enregistrement des règles de profil dans le contrôle source). (Ie2509)
- Résolution du plantage sur les builds en mode non root sous Android 13 (API 33) ou version antérieure avec le message
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
. (I6c245, b/259508183)
Problèmes connus : MacrobenchmarkScope.dropShaderCache()
peut planter en raison de l'absence du registre de diffusion dans le fichier manifeste profileinstaller, qui n'a pas encore été publié. (I5c728, b/258619948) Pour résoudre le problème dans profileinstaller:1.3.0-alpha02
, ajoutez ce qui suit au fichier AndroidManifest.xml de votre application (et non au fichier de Benchmark) :
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Version 1.2.0-alpha07
9 novembre 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha07
. Liste des commits de la version 1.2.0-alpha07
Modifications apportées à l'API
- Ajout de l'API
PowerMetric
pour mesurer l'énergie et la puissance dans Macrobenchmarks. (Ife601, b/220183779) - Correction de
MacrobenchmarkScope.dropShaderCache()
pour vider le cache du nuanceur. Cela permet d'éliminer environ 20 ms de bruit pourStartupMode.COLD
, car les nuanceurs sont désormais systématiquement effacés à chaque itération. Auparavant, la compilationPartial
avec des itérations de préchauffage indiquait des valeurs trop rapides, car la mise en cache du nuanceur était plus susceptible de se produire pendant le préchauffage. Ce correctif nécessite un appareil en mode root ouprofileinstaller:1.3.0-alpha02
dans l'application cible. Pour en savoir plus sur les modifications de l'API de la bibliothèqueProfileInstaller
, veuillez consulter la page ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) - Ajout de
TraceSectionMode("label", Mode.Sum)
, permettant de mesurer le temps total passé sur plusieurs sections de trace avec le même libellé. Par exemple,TraceSectionMetric("inflate", Mode.Sum)
enregistre une métriqueinflateMs
pour le temps total dans un macrobenchmark consacré à l'inflation. L'API 29 n'est plus obligatoire, carTraceSectionMetric
fonctionne avecandroidx.tracing.Trace
à des niveaux d'API inférieurs, avec l'utilisation deforceEnableAppTracing
dans l'application cible. (Id7b68, b/231455742).
Corrections de bugs
- Validation de toutes les erreurs/sorties pour une sécurité renforcée de toutes les commandes d'interface système internes. (I5984d, b/255402908, b/253094958)
- Spécification de l'appareil dans la commande de profil de référence
adb pull
afin que la commande pull puisse être simplement copiée si plusieurs appareils sont connectés (un émulateur maximum). (I6ac6c, b/223359380) - Ajout d'une erreur si l'APK de test macrobenchmark n'est pas configuré pour l'auto-instrumentation. Cette erreur empêche le macrobenchmarking depuis le processus de l'application cible. En cours de traitement, macrobench ne pourrait pas compiler/abandonner/démarrer l'application ni contrôler ses propres autorisations. (I4279b).
- Correction d'un problème dans
measureRepeated()
qui empêchaitStartupMode.COLD
d'abandonner le processus cible aprèssetupBlock
. Désormais, sisetupBlock
interagit avec l'application, son processus ne restera pas en cours d'exécution avec une mesure du démarrage à froid non valide. (I8ebb7)
Version 1.2.0-alpha06
24 octobre 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha06
. Liste des commits de la version 1.2.0-alpha06
Modifications apportées à l'API
BaselineProfileRule
n'a plus besoin d'être racine sur Android 13 (API 33) et n'est plus expérimentale. (Ie0a7d, b/250083467, b/253094958)- Cette modification corrige également la suppression des profils d'une application sur le disque des appareils en mode non root, mais elle nécessite la mise à jour de la dépendance profileinstaller de l'application cible.
- Pour utiliser
BaselineProfileRule
ouCompilationMode.Partial(warmupIterations)
sur un appareil en mode non root, vous devez également mettre à jour votre application cible pour qu'elle utiliseandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Cela permet de vider correctement le profil sur le disque afin de pouvoir le compiler/l'extraire.
Corrections de bugs
- Correction du plantage de
SampledProfiling
sur l'API 33 et les versions ultérieures. (I40743, b/236109374)
Version 1.2.0-alpha05
5 octobre 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha05
. Liste des commits de la version 1.2.0-alpha05
Corrections de bugs
- Correction de la répartition des frames dans le lecteur de traces système Studio pour les traces capturées par benchmark. (I3f3ae, b/239677443)
- Correction de
FrameTimingMetric
pour indiquer queFrameOverrun
nécessite l'API 31 au lieu de 29. (I716dd, b/220702554) - Définition d'une itération dans
BaselineProfileRule
et indication claire si le package cible n'est pas installé (déjà fait pour MacrobenchmarkRule). (Ic09a3, b/227991471)
Version 1.2.0-alpha04
21 septembre 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha04
. Liste des commits de la version 1.2.0-alpha04
Nouvelles fonctionnalités
Prise en charge de l'argument d'instrumentation
dryRunMode.enable
avec macrobenchmark (déjà disponible dans la version micro) pour accélérer le développement local, et validation de l'automatisation des applications (par exemple, avant l'envoi). Cela remplace les itérations par 1, ignore la compilation, supprime toutes les erreurs de configuration et désactive la sortie du fichier .json de mesure. (Ib51b4, b/175149857)Sur la ligne de commande Gradle :
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
Dans build.gradle :
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Corrections de bugs
- Correction de
StartupTimingMetric
pour ne plus exiger que les activités mesurées soient lancées viaMacrobenchmarkScope.startActivityAndWait()
. Cela signifie que cette métrique peut identifier les lancements à partir des notifications, deContext.startActivity()
, de la navigation basée sur l'activité dans l'application ou des commandes shell. (Ia2de6, b/245414235) - Correction d'un bug qui entraînait l'expiration du délai de
startActivityAndWait
lors de la tentative de lancement sur les émulateurs en réduisant la sévérité de la détection des frames. (Ibe2c6, b/244594339, b/228946895)
Version 1.2.0-alpha03
7 septembre 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha03
. Liste des commits de la version 1.2.0-alpha03
Nouvelles fonctionnalités
- Ajout d'API expérimentales pour utiliser
BenchmarkState
séparément, indépendamment deBenchmarkRule
/JUnit4
. (Id478f, b/228489614)
Corrections de bugs
- Ajout d'un remplacement Leanback pour
startActivityAndWait
. (01ed77, b/242899915)
Version 1.2.0-alpha02
24 août 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha02
. Liste des commits de la version 1.2.0-alpha02
Modifications apportées à l'API
- Valeur par défaut
am force stop
pourMacrobenchmarkScope.killProcess()
, même en mode root, sauf pendant la génération du profil de référence. Vous pouvez remplacer ceci par un argument booléen facultatif. (02cce9, b/241214097)
Corrections de bugs
- Prise en charge de la génération de profils de référence pour les applications système. (I900b8, b/241214097)
- Prise en charge de la vérification des métriques de puissance ODPM sur les appareils non rootés. (a38c78, b/229623230)
Version 1.2.0-alpha01
27 juillet 2022
Publication d'androidx.benchmark:benchmark-*:1.2.0-alpha01
. Liste des commits de la version 1.2.0-alpha01
Nouvelles fonctionnalités
- Nouveau composant "trace-perfetto-common" permettant aux outils d'activer le traçage du SDK Perfetto dans une application qui l'expose. (I2cc7f)
Ajout d'un argument d'instrumentation
androidx.benchmark.enabledRules
pour permettre le filtrage d'exécutions macrobenchmark uniquement aux benchmarks ou à la génération de profils de référence. Transmettez "Macrobenchmark" ou "BaselineProfile" pour n'exécuter qu'un seul type de test, par exemple lorsque vous générez simplementBaselineProfiles
sur un émulateur. Les listes d'éléments séparés par une virgule sont également compatibles. (I756b7, b/230371561)Par exemple, dans le build.gradle de votre macrobenchmark :
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Ou à partir de la ligne de commande Gradle :
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Modifications apportées à l'API
- Ajout d'un
PowerMetric
pour mesurer les tâches liées à l'énergie et à l'alimentation dans les benchmarks. (I9f39b, b/220183779) - Ajout d'un nouveau mode de compilation
CompilationMode.Ignore
pour ignorer la réinitialisation et la compilation du profil. (Ibbcf8, b/230453509) - Ajout d'un paramètre à
BaselineProfileRule#collectBaselineProfile
pour filtrer le fichier de sortie par nom de package. (If7338, b/220146561) - Permet au développeur de décharger l'appareil pour mesurer la consommation d'énergie. (I6a6cb)
- Ajout de la possibilité de vider le cache du nuanceur dans
MacrobenchmarkScope
. (I32122) - Permet au développeur de configurer l'affichage du type de métrique et de détailler les catégories de sous-systèmes souhaitées. (I810c9)
- Auparavant, une erreur
UnsupportedOperationException
était générée dans le benchmark si l'exécution était lancée sur un appareil non compatible. Maintenant, cette erreur ne s'applique que si la métrique est utilisée sur un appareil non compatible (à savoir,PowerMetric.configure
). (I5cf20, b/227229375) - Ajout de
TotalPowerMetric
et deTotalEnergyMetric
pour mesurer la puissance et l'énergie totales dans chaque catégorie du système dans les macrobenchmarks. (I3b26b, b/224557371)
Corrections de bugs
- Les méthodes compilées n'étaient pas correctement réinitialisées entre chaque macrobenchmark sur des versions non rootées. Ce problème a été résolu. Malheureusement, vous devez réinstaller l'APK à chaque itération, ce qui effacera les données de l'application pour chaque macrobenchmark. (I31c74, b/230665435)
- Correction du plantage lié à l'enregistrement des traces sur l'API 21/22. (If7fd6, b/227509388, b/227510293, b/227512788)
- Remaniement de la détection de l'achèvement du lancement d'une activité pour corriger l'exception "Impossible de lire les métriques" dans les macrobenchmarks de démarrage. (Ia517c)
Version 1.1.1
Version 1.1.1
9 novembre 2022
Publication d'androidx.benchmark:benchmark-*:1.1.1
. Liste des commits de la version 1.1.1
Corrections de bugs
- Correction d'
android.system.ErrnoException: open failed: EACCES
qui se produisait sur certains appareils Android 11 (API 30) ou versions ultérieures. Il s'agit d'une solution proposée par1.2.0-alpha01
. (aosp/2072249)
Version 1.1.0
Version 1.1.0
15 juin 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0
. Liste des commits de la version 1.1.0
- Cette version est identique à la version
androidx.benchmark:benchmark-*:1.1.0-rc03
.
Modifications importantes depuis la version 1.0.0
La prise en charge des macrobenchmarks Jetpack, qui vous permettent de mesurer les interactions avec l'ensemble de l'application, comme le démarrage et le défilement, permet également de capturer les traces et de mesurer les sections de trace.
Prise en charge des profils de référence
CompilationMode.Partial
pour mesurer l'efficacité des profils de référence.@BaselineProfileRule
afin de générer automatiquement des profils de référence pour un critical user journey.
Prise en charge des métriques d'allocation et du profilage pendant l'exécution du microbenchmark.
Version 1.1.0-rc03
1er juin 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-rc03
. Liste des commits de la version 1.1.0-rc03
Corrections de bugs
Plus besoin de réinstaller le package cible à chaque itération du benchmark. (aosp/2093027, b/231976084)
Suppression de la latence de
300ms
depressHome()
. (aosp/2086030, b/231322975)Amélioration de la vitesse d'itération des macrobenchmarks en optimisant les commandes Shell utilisées en arrière-plan. (aosp/2086023, b/231323582)
Prise en charge des appareils Gradle gérés lors de la génération de profils de référence avec des macrobenchmarks. (aosp/2062228, b/228926421)
Version 1.1.0-rc02
11 mai 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-rc02
. Liste des commits de la version 1.1.0-rc02
- Notez que cette version entraîne un changement de comportement, car les applications sont désormais complètement réinstallées entre chaque benchmark pour garantir des mesures précises.
Correction de bugs/Nouveaux comportements
La compilation d'applications n'était pas correctement réinitialisée entre les macrobenchmarks et ne se réinitialisait pas du tout pour les versions non rootées. Ce problème a été résolu. Dans de nombreux cas, l'exécution de plusieurs tests entraînait peu ou pas d'effet sur les mesures pour
CompilationMode
. Pour contourner ce problème, désormais, l'application cible réinstalle entièrement chaque méthode de test, ce qui efface les données de l'application entre chaque macrobenchmark. (I31c74, b/230665435)Étant donné que cela empêche les applications de configurer l'état avant les tests, il est désormais possible d'ignorer la compilation/réinstallation pour résoudre ce problème. Par exemple, vous pouvez compiler entièrement la cible avec une commande Shell
cmd package compile -f -m speed <package>
, puis ignorer l'étape de compilation du macrobenchmark.Par exemple, dans le build.gradle de votre macrobenchmark :
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
Ou à partir de la ligne de commande Gradle :
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
Ajout d'un argument d'instrumentation
androidx.benchmark.enabledRules
pour permettre le partage d'un module entre les tests de macrobenchmark et de génération de profil de référence. Transmettez "Macrobenchmark" ou "BaselineProfile" pour n'exécuter qu'un seul type de test, par exemple lorsque vous générezBaselineProfiles
sur un émulateur. (I756b7, b/230371561)Par exemple, dans le build.gradle de votre macrobenchmark :
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Ou à partir de la ligne de commande Gradle :
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Version 1.1.0-rc01
20 avril 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-rc01
. Liste des commits de la version 1.1.0-rc01
Corrections de bugs
- Dans Android Studio, les liens de sortie des profils de référence utilisent désormais un nom de fichier unique. De cette façon, la sortie reflète toujours les derniers résultats de l'utilisation d'un
BaselineProfileRule
. (aosp/2057008, b/228203086)
Version 1.1.0-beta06
6 avril 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-beta06
. Liste des commits de la version 1.1.0-beta06
Corrections de bugs
- Correction du plantage lié à l'enregistrement des traces sur l'API 21/22. (If7fd6, b/227509388)
- Remaniement de la détection de l'achèvement du lancement d'une activité pour corriger l'exception "Impossible de lire les métriques" dans les macrobenchmarks de démarrage. (Ia517c)
- Correction des métriques de démarrage pour les macrobenchmarks lorsque
CompilationMode.None()
est utilisé. Avant cette modification,CompilationMode.Partial()
semblait plus lent queCompilation.None()
. (611ac9).
Version 1.1.0-beta05
23 mars 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-beta05
. Liste des commits de la version 1.1.0-beta05
Corrections de bugs
- Suppression du package après avoir ignoré l'installation du profil lorsque vous utilisez
CompilationMode.None
. (aosp/1991373) - Correction d'un problème qui empêchait les macrobenchmarks de récupérer les métriques de démarrage avec
StartupMode.COLD
. (aosp/2012227 b/218668335)
Version 1.1.0-beta04
23 février 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-beta04
. Liste des commits de la version 1.1.0-beta04
Corrections de bugs
Correction des métriques manquantes sous Android 10 et de l'erreur
NoSuchElementException
. Ces deux effets étaient dus aux noms des processus qui n'étaient pas correctement capturés dans les traces. (Ib4c17, b/218668335)Utilisation de
PowerManager
pour la détection de limitation thermique sur Q (API 29) et versions ultérieures. Cette solution réduit considérablement la fréquence des faux positifs lors de la détection de la limitation thermique (nouveau lancement du benchmark après un délai d'attente de 90 secondes) et accélère considérablement les benchmarks sur les builds de l'utilisateur. Cela permet également de détecter les limitations même si les horloges sont verrouillées (si elles sont verrouillées trop haut pour l'environnement physique de l'appareil). (I9c027, b/217497678, b/131755853)Filtrage du profilage échantillonné Simpleperf sur le thread
measureRepeated
uniquement pour simplifier l'inspection. (Ic3e12, b/217501939)Prise en charge des métriques associées aux sous-processus de l'interface utilisateur nommés dans les applications multiprocessus. (Ice6c0, b/215988434)
Filtrage des règles de profil de référence pour cibler Android 9 (SDK 28). aosp/1980331 b/216508418
Installation du profil ignorée lorsque vous utilisez
Compilation.None()
. De plus, le système avertit lorsque l'application utilise une ancienne version deandroidx.profileinstaller
et du plug-in Android Gradle. aosp/1977029
Version 1.1.0-beta03
9 février 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-beta03
. Liste des commits de la version 1.1.0-beta03
Modifications apportées à l'API
- Ajout de
AudioUnderrunMetric
à la bibliothèque de macrobenchmark sous l'indicateur expérimental pour permettre la détection des sous-diffusions audio. (Ib5972) BaselineProfileRule
n'accepte plus de blocsetup
, car il fonctionnait de la même manière queprofileBlock
. (Ic7dfe, b/215536447)Par exemple :
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Corrections de bugs
- Résolution d'un problème de mise à jour des traces du profileur microbenchmark lors des exécutions ultérieures en cas d'association avec la sortie Studio. (I5ae4d, b/214917025)
- Interdiction des commandes Shell de compilation sous l'API 23. (Ice380)
- Nouveaux noms (
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
) pour indiquer des durées, et non des horodatages, et pour faire correspondre les préfixes. (I0eba3, b/216337830)
Version 1.1.0-beta02
26 janvier 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-beta02
. Liste des commits de la version 1.1.0-beta02
Corrections de bugs
- Les résultats du microbenchmark pour le profil d'échantillonnage de pile/traçage de méthode sont désormais liés dans la sortie Studio, comme les autres sorties de profilage, et ne suppriment pas la métrique d'allocation. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule affiche désormais la commande
adb pull
dans Logcat et dans la sortie Studio pour extraire le fichier texte BaselineProfile généré. (f08811)
Version 1.1.0-beta01
12 janvier 2022
Publication d'androidx.benchmark:benchmark-*:1.1.0-beta01
. Liste des commits de la version 1.1.0-beta01
Corrections de bugs
- Correction d'un bug qui annulait l'activation de l'option d'argument du profileur. (I37373, b/210619998)
- Suppression de
CompliationModes
obsolètes. (I98186, b/213467659) - Pour plus de clarté, l'argument de profil de référence
CompilationMode.Partial
a été remplacé par une énumération. (Id67ea)
Version 1.1.0-alpha13
15 décembre 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha13
. Liste des commits de la version 1.1.0-alpha13
Modifications apportées à l'API
- Ajout d'un traçage système simple à la sortie du microbenchmark sous Android Q (API 29 ou version ultérieure). Notez qu'à l'heure actuelle, cette méthode ne capture pas le traçage personnalisé (via les API Jetpack
android.os.Trace
ouandroidx.tracing
) afin d'éviter d'affecter les résultats. Ce traçage peut être utile pour diagnostiquer les problèmes d'instabilité, en particulier pour les sources externes au benchmark. (I298be, b/205636583, b/145598917) - Clarification de
CompilationModes
en trois classes : "Full" (complète), "None" (aucune) ou "Partial" (partielle). Auparavant, ces classes étaient nommées de manière incohérente en fonction des arguments de compilation (que nous traitons maintenant comme des détails d'implémentation) et des fonctionnalités. Ainsi, les échanges, les combinaisons potentielles et le comportement des différentes versions de la plate-forme sont plus clairs. (I3d7bf, b/207132597) - La configuration et la mesure sont désormais toujours par paire, dans l'ordre. Vous pouvez maintenant interroger le nom du package et l'itération (mais l'itération peut être
null
dans certains scénarios de préchauffage). (Id3b68, b/208357448, b/208369635)
Corrections de bugs
- Correction de
CompilationMode.Speed
, qui était traité à tort commeNone
. (I01137)
Version 1.1.0-alpha12
17 novembre 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha12
. Liste des commits de la version 1.1.0-alpha12
Nouvelles fonctionnalités
- Ajout d'une fonctionnalité expérimentale TraceSectionMetric pour les mesures de timing personnalisées basées sur les traces. (I99db1, b/204572664)
Corrections de bugs
- Activation de l'appareil à chaque itération afin de s'assurer que l'interface utilisateur peut être testée. L'écran de verrouillage doit être désactivé. (Ibfa28, b/180963442)
- Correction de plusieurs plantages en mode de profilage StackSampling sur les émulateurs et les appareils non rootés. (Icdbda, b/202719335)
- Suppression du délai de 0,5 seconde à la fin de chaque itération. Si des métriques ne s'affichent pas suite à cette modification, veuillez signaler un bug. (Iff6aa)
- Réduction du risque de perte de données et de surcharge de la mémoire due au traçage. (Id2544, b/199324831, b/204448861)
- Réduction de la taille de la trace d'environ 40 % en passant au format de stockage sched compact. (Id5fb6, b/199324831)
- Mise à jour des implémentations pour les métriques de démarrage afin qu'elles se terminent toujours à la fin du thread de rendu. Ce changement rendra le système plus contrôlable entre les versions de la plate-forme et plus proche des mesures dans l'application. (Ic6b55)
Version 1.1.0-alpha11
3 novembre 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha11
. Liste des commits de la version 1.1.0-alpha11
Modifications apportées à l'API
- Macrobenchmark dispose désormais d'une
minSdkVersion
de23
. (If2655) - Ajout d'un
BaselineProfileRule
expérimental capable de générer des profils de référence pour le critical user journey de l'application. Documentation détaillée à suivre. (Ibbefa, b/203692160) - Suppression de la variante d'interface measureRepeated, qui a été ajoutée pour les appelants Java, car elle semblait ambiguë dans le traitement/la résolution de la méthode. Les appelants Java devront à nouveau renvoyer Unit.Instance à partir de measureRepeated. Si cela vous pose problème, veuillez signaler un bug. Nous reviendrons sur ce point dans une prochaine version. (Ifb23e, b/204331495)
Version 1.1.0-alpha10
27 octobre 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha10
. Liste des commits de la version 1.1.0-alpha10
Modifications apportées à l'API
- Rétroportage de StartupTimingMetric pour revenir à l'API 23. Cette nouvelle implémentation gère également mieux reportFullyDrawn() en attendant que le contenu correspondant s'affiche. (If3ac9, b/183129298)
- Ajout de JvmOverloads à plusieurs méthodes MacrobenchmarkScope pour les appelants Java. (I644fe, b/184546459)
- Ajout d'une autre fonction MacrobenchmarkRule.measureRepeated qui utilise un
Consumer<MacrobenchmarkScope>
pour une utilisation naturelle en langage Java. (If74ab, b/184546459)
Corrections de bugs
- Correction du problème des traces qui ne commençaient pas assez tôt et pour lesquelles des données de métriques étaient manquantes. Ceci devrait résoudre les exceptions de type "Impossible de lire les métriques lors du benchmark" causées par la bibliothèque elle-même. (I6dfcb, b/193827052, b/200302931)
- FrameNegativeSlack a été renommé en FrameOverrun afin de clarifier sa signification : dans quelle mesure le cadre a dépassé son budget de temps. (I6c2aa, b/203008701)
Version 1.1.0-alpha09
13 octobre 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha09
. Liste des commits de la version 1.1.0-alpha09
Corrections de bugs
- Prise en charge de la suppression du cache des pages du noyau sans être en mode root sur l'API 31/S+, ce qui améliorera la précision des lancements avec StartupMode.COLD. (Iecfdb, b/200160030)
Version 1.1.0-alpha08
29 septembre 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha08
. Liste des commits de la version 1.1.0-alpha08
Modifications apportées à l'API
- Activation du défilement des macrobenchmarks pour revenir à l'API 23. (If39c2, b/183129298)
- Ajout d'un nouveau type de métrique par échantillons à la sortie UI et JSON, axée sur les centiles de plusieurs échantillons par itération. (I56247, b/199940612)
- Passage aux métriques à virgule flottante dans toutes les bibliothèques de benchmark (tronquées dans l'interface utilisateur de Studio). (I69249, b/197008210)
Version 1.1.0-alpha07
1er septembre 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha07
. Liste des commits de la version 1.1.0-alpha07
Modifications apportées à l'API
- Augmentation de la valeur minimale de l'API à 21 pour refléter le niveau d'API le plus bas attendu. Seules les API de ce niveau ou supérieur seront prises en charge à l'avenir. L'API minimale actuelle continue d'être transmise via RequiredApi() et est actuellement de niveau 29. (I440d6, b/183129298)
Corrections de bugs
- Correction de
ProfileInstaller
afin de faciliter l'exécution de macrobenchmarks parCompilationMode.BaselineProfile
pour les applications utilisant des profils de référence. (I42657, b/196074999) REMARQUE : vous devez également passer àandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
ou à une version ultérieure. - Les benchmarks
StartupMode.COLD
etCompilationMode.None
sont désormais plus stables. (I770cd, b/196074999)
Version 1.1.0-alpha06
18 août 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha06
. Liste des commits de la version 1.1.0-alpha06
Modifications apportées à l'API
- Ajout de l'argument d'instrumentation
androidx.benchmark.iterations
pour permettre le forçage manuel du nombre d'itérations lors des tests ou du profilage en local. (6188be, b/194137879)
Corrections de bugs
- Passage à Simpleperf en tant que profileur d'échantillonnage par défaut pour les API de niveau 29 ou supérieur. (Ic4b34, b/158303822)
Problèmes connus
CompilationMode.BaselineProfile
est encore en cours d'élaboration. Évitez de l'utiliser pour déterminer la qualité d'un profil.
Version 1.1.0-alpha05
4 août 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha05
. Liste des commits de la version 1.1.0-alpha05
La version 1.1.0-alpha04
a été annulée avant son lancement en raison de plantages fréquents. b/193827052
Modifications apportées à l'API
- Modification de startActivityAndWait pour appeler le lancement via
am start
, ce qui réduit le temps de chaque itération de mesure d'environ 5 secondes, au détriment de la compatibilité des parcelables d'intent. (I5a6f5, b/192009149
Corrections de bugs
- Réduction de la sensibilité de détection des limitations thermiques et nouveau calcul de la référence si des limitations sont fréquemment détectées. (I7327b)
- Correction de FrameTimingMetric pour un fonctionnement sous Android S bêta. (Ib60cc, b/193260119)
- Utilisation d'une
EmptyActivity
pour sortir l'application cible d'un état d'arrêt forcé afin de mieux prendre en chargeCompilationMode.BaselineProfile
. (Id7cac, b/192084204) - Extension de fichier de suivi remplacée par
.perfetto-trace
pour correspondre au standard de plate-forme. (I4c236, b/174663039) - StartupTimingMetric génère désormais la métrique "fullyDrawnMs" pour mesurer le temps nécessaire au rendu pour votre application. Pour définir cette métrique pour votre application, appelez Activity.reportFullyDrawn lorsque votre contenu initial est prêt, par exemple lorsque vos éléments de liste initiaux sont chargés à partir de la base de données ou du réseau. (La méthode reportFullyDrawn est disponible sans vérification des versions de compilation sur ComponentActivity.) Notez que votre test doit être suffisamment long pour capturer la métrique (startActivityAndWait n'attend pas reportFullyDrawn). (If1141, b/179176560)
- Réduction du coût d'ajout des métadonnées UI aux traces de plus de 50 ms. (Ic8390, b/193923003)
- La fréquence d'interrogation a considérablement augmenté lors de l'arrêt du traçage, ce qui peut réduire de plus de 30 % le temps d'exécution du benchmark de démarrage, par exemple. (Idfbc1, b/193723768)
Version 1.1.0-alpha03
16 juin 2021
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha03
. Liste des commits de la version 1.1.0-alpha03
Nouvelles fonctionnalités
- Ajout d'un nouveau
CompilationMode.BaselineProfile
pour les profils installés à l'aide de la bibliothèque Jetpack ProfileInstaller. (aosp/1720930)
Corrections de bugs
L'exemple de code Gradle pour la suppression des erreurs de benchmark a été mis à jour de manière à utiliser une API non obsolète avec une syntaxe qui correspond également aux utilisateurs de .gradle.kts.
Exemple :
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Version 1.1.0-alpha02
18 mai 2021
La version de benchmark 1.1.0-alpha02 apporte un composant-clé : le macrobenchmark. En plus du benchmark, qui permet de mesurer les boucles du processeur, le macrobenchmark permet de mesurer les interactions avec l'application dans son ensemble (comme le démarrage et le défilement), et de capturer des traces. Pour en savoir plus, consultez la documentation de la bibliothèque.
Publication d'androidx.benchmark:benchmark-*:1.1.0-alpha02
. Liste des commits de la version 1.1.0-alpha02
Nouvelles fonctionnalités
Artefacts de macrobenchmark ajoutés (androidx.benchmark:benchmark-macro-junit4
et androidx.benchmark:benchmark-macro
).
- Capturez les métriques de performances de démarrage, de défilement/d'animation à partir de votre application, en local ou dans CI.
- Capture et inspection des traces depuis Android Studio.
Corrections de bugs
- Solution de contournement pour le problème des autorisations Shell avec le répertoire de sortie sous Android 12 (Remarque : vous devrez peut-être mettre à jour le plug-in Android Gradle vers la version Canary 7.0.0 et Android Studio vers Arctic Fox 2020.3.1 pour continuer à capturer des fichiers de sortie sur les appareils concernés). (Icb039)
- Prise en charge de la mise en cache de la configuration dans BenchmarkPlugin. (6be1c1, b/159804788)
- Sortie de fichier simplifiée activée par défaut pour les répertoires ne nécessitant pas
requestLegacyExternalStorage=true
. (8b5a4d, b/172376362) - Correction des avertissements Logcat d'affichage de bibliothèque concernant l'absence de thread JIT sur les versions de plate-forme où il n'est pas présent. (I9cc63, b/161847393)
- Correction de la fréquence maximale pour les appareils de lecture. (I55c7a)
Version 1.1.0-alpha01
10 juin 2020
Publication d'androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
et androidx.benchmark:benchmark-junit4:1.1.0-alpha01
. Liste des commits de la version 1.1.0-alpha01
Nouvelles fonctionnalités de la version 1.1
- Métrique d'allocation : les benchmarks exécutent désormais une phase supplémentaire après le préchauffage et le timing, afin de capturer le nombre d'allocations. Les allocations peuvent entraîner des problèmes de performances sur les anciennes versions de la plate-forme (140 ns pour O deviennent 8 ns pour M, mesuré sous Nexus 5X avec horloges verrouillées). Cette métrique s'affiche dans les résultats de la console Android Studio.
- Prise en charge du profilage : vous pouvez désormais capturer des données de profilage pour une exécution de benchmark afin de déterminer pourquoi votre code s'exécute lentement. Le benchmark permet de capturer le traçage de méthode ou l'échantillonnage de méthode à partir d'ART. Ces fichiers peuvent être inspectés avec le profileur dans Android Studio via Fichier > Ouvrir.
- Le plug-in de benchmark de Gradle fournit désormais des valeurs par défaut pour simplifier la configuration :
testBuildType
est configuré de manière à être utilisé par défaut, afin d'éviter d'utiliser des dépendances avec une couverture de code intégrée. Le buildType de la version est également configuré par défaut, ce qui permet à Android Studio de sélectionner automatiquement la bonne variante de compilation lorsque vous ouvrez un projet pour la première fois. (b/138808399)signingConfig.debug
est utilisé comme configuration de signature par défaut. (b/153583269)
** Corrections de bugs **
- Réduction significative des coûts liés à la transition de préchauffage : la première mesure de chaque benchmark était artificiellement plus élevée que les autres. Ce problème était plus marqué dans les benchmarks de taille particulièrement réduite (une microseconde ou moins). (b/142058671)
- Correction de l'erreur
InstrumentationResultParser
affichée pour chaque benchmark lors de l'exécution à partir de la ligne de commande. (I64988, b/154248456)
Problèmes connus
- Les appels Gradle en ligne de commande des benchmarks n'affichent pas directement les résultats. Pour contourner ce problème, vous pouvez soit utiliser Studio, soit analyser le fichier de sortie JSON pour obtenir les résultats.
- Le système de création de rapports de benchmark ne parvient pas à extraire de rapport à partir des appareils sur lesquels une application est associée à un applicationId se terminant par "android" ou "download" (non sensible à la casse). Les utilisateurs qui rencontrent ce problème doivent mettre à jour le plug-in Android Gradle vers la version 4.2-alpha01 ou ultérieure.
Version 1.0.0
Version de benchmark 1.0.0
20 novembre 2019
androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
et androidx.benchmark:benchmark-junit4:1.0.0
sont publiés sans modification par rapport à la version 1.0.0-rc01. Liste des commits de la version 1.0.0
Principales fonctionnalités de la version 1.0.0
La bibliothèque de benchmark vous permet d'écrire des benchmarks de performances du code de votre application et d'obtenir des résultats rapidement.
Elle empêche les problèmes de configuration de la compilation et d'exécution, et stabilise les performances de l'appareil pour garantir la précision et la cohérence des mesures. Exécutez les benchmarks directement dans Android Studio ou dans l'intégration continue afin d'observer les performances du code au fil du temps et d'éviter les régressions.
Exemples de fonctionnalités clés :
- Stabilisation de l'horloge
- Priorisation automatique des threads
- Prise en charge des tests de performances de l'interface utilisateur, comme dans l'exemple RecyclerView
- Préchauffage et bouclage prenant en compte JIT
- Résultats du benchmark au format JSON pour le post-traitement
Version 1.0.0-rc01
23 octobre 2019
Publication d'androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
et androidx.benchmark:benchmark-junit4:1.0.0-rc01
. Liste des commits de la version 1.0.0-rc01
Nouvelles fonctionnalités
- Ajout du traçage systrace aux benchmarks
Correction de bugs
- Résolution du problème d'instabilité des métriques : JIT ne s'achevait pas avant le préchauffage en raison d'une priorité trop faible. (b/140773023)
- Unification du répertoire de sortie JSON pour les plug-ins Android Gradle 3.5 et 3.6.
Version 1.0.0-beta01
9 octobre 2019
Publication d'androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
et androidx.benchmark:benchmark-junit4:1.0.0-beta01
. Liste des commits de la version 1.0.0-beta01
Nouvelles fonctionnalités
- Exécution de la récupération de mémoire avant chaque préchauffage pour réduire la pression sur la mémoire : chaque benchmark bénéficie de la continuité du précédent. (b/140895105)
Correction de bugs
- Ajout de la dépendance
androidx.annotation:android-experimental-lint
, de sorte que le code Java génère correctement des erreurs lint lorsque l'API expérimentale n'est pas utilisée, de la même manière que l'annotation expérimentale Kotlin fournit ces erreurs pour les appelants Kotlin. - Correction de la détection de l'utilisation de l'argument d'instrumentation
additionalTestOutputDir
pour la sortie avec le plug-in Android Gradle 3.6, afin de savoir quand AGP traitera la copie des données. - Correction de la fréquence d'horloge non détectée en JSON pour afficher correctement
-1
. (b/141945670)
Version 1.0.0-alpha06
18 septembre 2019
Publication d'androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
et androidx.benchmark:benchmark-junit4:1.0.0-alpha06
. Liste des commits de la version 1.0.0-alpha06
Nouvelles fonctionnalités
- Ajout d'une vérification de l'utilisation correcte de l'ancien package pour l'exécuteur de test, qui fournit désormais un message d'erreur plus utile.
Modifications apportées à l'API
- L'annotation expérimentale
ExperimentalAnnotationReport
est désormais publique, comme attendu. L'utilisation de l'API expérimentale BenchmarkState#report nécessite désormais cette annotation.
Version 1.0.0-alpha05
5 septembre 2019
Publication d'androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
et androidx.benchmark:benchmark-junit4:1.0.0-alpha05
. Les commits inclus dans cette version sont disponibles sur cette page.
Modifications apportées à l'API
- L'API
BenchmarkState.reportData
est maintenant indiquée comme expérimentale.
Correction de bugs
- Correction du script de verrouillage de l'horloge, qui échouait sur les appareils qui ne disposaient pas des utilitaires d'interface système
cut
ouexpr
. - Correction d'un problème lié à la tâche
./gradlew lockClocks
qui se figeait sur les appareils en mode root avec une version antérieure de l'utilitaire su, pour laquelle l'indicateur-c
n'était pas pris en charge.
Version 1.0.0-alpha04
7 août 2019
Publication d'androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
et androidx.benchmark:benchmark-junit4:1.0.0-alpha04
. Les commits inclus dans cette version sont disponibles sur cette page.
Nous avons également ajouté de la documentation sur l'utilisation de la bibliothèque Benchmark sans Gradle, à la fois pour l'utiliser avec différents systèmes de compilation (tels que Bazel ou Buck) et pour l'exécution en CI. Pour en savoir plus, consultez les sections Créer des benchmarks sans Gradle et Exécuter des benchmarks dans un environnement d'intégration continue.
Nouvelles fonctionnalités
- Plug-in Gradle
- Désactive automatiquement la couverture de test et définit
AndroidBenchmarkRunner
par défaut (b/138374050). - Ajout de la prise en charge de la nouvelle copie de données basée sur AGP lors de l'exécution de benchmarks avec AGP 3.6 ou version ultérieure.
- Désactive automatiquement la couverture de test et définit
- Ajouts au format JSON
- Sortie de la durée totale d'exécution du test de benchmark. (b/133147694)
- Les benchmarks
@Parameterized
utilisant une chaîne de nom (par exemple,@Parameters(name = "size={0},depth={1}")
) génèrent désormais des noms et des valeurs de paramètres par benchmark dans la sortie JSON. (b/132578772)
- Ajout d'un mode de simulation. (b/138785848)
- Ajout d'un mode de simulation pour exécuter chaque boucle de benchmark une seule fois, afin de rechercher les erreurs ou plantages sans capturer les mesures. Cela peut être utile, par exemple, pour exécuter rapidement des benchmarks lors de l'envoi préalable afin de vérifier que tout fonctionne comme prévu.
Modifications apportées à l'API
- La structure du module a changé, la bibliothèque a été scindée. (b/138451391)
benchmark:benchmark-junit4
contient les classes avec dépendance JUnit (AndroidBenchmarkRunner
etBenchmarkRule
), qui ont toutes les deux été déplacées dans le packageandroidx.benchmark.junit4
.benchmark:benchmark-common
contient le reste de la logique, y compris l'API BenchmarkState.- À l'avenir, cette division permettra à la bibliothèque d'effectuer des benchmarks sans les API JUnit4.
- Les avertissements de configuration sont désormais traités comme des erreurs et entraînent le plantage du test. (b/137653596)
- Cela permet d'assurer des mesures précises, en particulier dans les systèmes CI.
- Ces erreurs peuvent être transformées à nouveau en avertissements à l'aide d'un argument d'instrumentation. Par exemple :
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Correction de bugs
- Les erreurs d'écriture sur un périphérique de stockage externe sur les appareils Q fournissent des messages plus descriptifs, avec des suggestions pour résoudre le problème.
- Les écrans sont automatiquement allumés lors des benchmarks, au lieu d'échouer lorsqu'ils sont éteints.
Contributions externes
- Merci à Sergey Zakharov d'avoir contribué à l'amélioration de la sortie JSON et à la correction des problèmes de désactivation de l'écran !
Version 1.0.0-alpha03
2 juillet 2019
Publication d'androidx.benchmark:benchmark:1.0.0-alpha03
et d'androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
- Le rapport JSON complet indique désormais la durée de veille en raison de la limitation thermique par benchmark.
Correction de bugs
- Il n'est plus nécessaire d'appliquer le plug-in Gradle après les plug-ins Android et le bloc Android.
- Ajout de la prise en charge des rapports de benchmark sur les appareils Android 10 utilisant un espace de stockage cloisonné.
Version 1.0.0-alpha02
6 juin 2019
Publication d'androidx.benchmark:1.0.0-alpha02
et d'androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
. Les commits inclus dans cette version sont disponibles sur cette page.
Notez que nous traitons le schéma JSON comme une API. Nous prévoyons de respecter les mêmes contraintes de stabilité que les autres API : stables (avec de très rares exceptions) une fois en version bêta et corrigées dans la version finale, avec des ajouts uniquement dans les versions mineures et des modifications/suppressions dans les versions principales.
Modifications apportées à l'API
Refonte du schéma JSON. D'autres modifications du schéma JSON sont susceptibles d'être limitées à des ajouts :
- Réorganisation de la structure d'objet de résultat pour prendre en charges d'autres groupes de métriques. (b/132713021)
- Ajout d'informations de contexte d'exécution de test, telles que des informations sur l'appareil et le build, et si les horloges sont verrouillées ou non, à l'objet d'ordre supérieur. (b/132711920)
- Le nom des métriques de temps contient maintenant "ns". (b/132714527)
- Statistiques supplémentaires ajoutées par métrique rapportée (maximum, médiane, minimum) et suppression de la statistique récapitulative "milliardième" simplifiée. (b/132713851)
Suppression de la sortie XML (b/132714414).
Détection de la limitation thermique supprimée de l'API
BenchmarkState.reportData
. (b/132887006)
Correction de bugs
- Correction d'un problème de
./gradlew lockClocks
sur certains appareils équipés d'OS récents. (b/133424037) - Détection de la limitation désactivée pour l'émulateur. (b/132880807)
Version 1.0.0-alpha01
7 mai 2019
Publication d'androidx.benchmark:benchmark:1.0.0-alpha01
. Les commits inclus dans cette version sont disponibles sur cette page.