ProfileInstaller

  
Permet aux bibliothèques de préremplir les traces de compilation à l'avance afin qu'elles puissent être lues par ART.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
7 février 2024 1.3.1 - - 1.4.0-alpha01

Déclarer des dépendances

Pour ajouter une dépendance à ProfileInstaller, 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.

Ajoutez les dépendances correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou de votre module :

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.3.1"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")
}

Pour en savoir plus sur les dépendances, consultez Ajouter des dépendances de compilation.

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.

Signaler un nouveau problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 1.4

Version 1.4.0-alpha01

7 février 2024

Publication d'androidx.profileinstaller:profileinstaller:1.4.0-alpha01. Liste des commits de la version 1.4.0-alpha01.

Correction de bugs

  • Ajout d'un code d'erreur indiquant que l'outil de vérification des profils n'a pas intégré de profil. (Ifb109, b/313928520).
  • Correction d'un plantage lors de l'abandon de nuanceurs sur Android U (API 34), ainsi que sur les émulateurs. (I031ca, b/274314544)
  • Activation de la prise en charge d'Android U dans le programme d'installation de profils. (Iaf177)
  • Correction de l'échec du programme d'installation de profils dans Android U, en raison du fait que le profil actuel n'est pas créé vide lors du démarrage de la procédure. (Ie3899)
  • Correction du transcodage par bitmap de la méthode au format de profil V_015S. (aosp/2906631) et (aosp/2847740).

Version 1.3

Version 1.3.1

3 mai 2023

Publication d'androidx.profileinstaller:profileinstaller:1.3.1. Liste des commits de la version 1.3.1

Correction de bugs

  • Activation de la prise en charge d'Android U dans le programme d'installation de profils. (Iaf177)
  • Correction de l'échec du programme d'installation de profils dans Android U, en raison du fait que le profil actuel n'est pas créé vide lors du démarrage de la procédure. (Ie3899)

Version 1.3.0

22 mars 2023

Publication d'androidx.profileinstaller:profileinstaller:1.3.0. Liste des commits de la version 1.3.0

Changements importants depuis la version 1.2.0

  • Correction d'une NullPointerException dans ProfileInstallReceiver. (b/243851384).
  • Ajout de l'API ProfileVerifier pour vérifier depuis l'application si un profil de référence a été compilé, s'il a été planifié ou s'il est manquant. (I263a4, b/246653809)
  • Ajout d'une annonce shell qui permet à Macrobenchmark de vider complètement les données de profil en mémoire sur le disque, afin de les inclure dans la génération de profils de référence. Cette mise à jour est nécessaire pour utiliser la bibliothèque macrobenchmark afin de capturer des profils de référence avec BaselineProfileRule et évaluer les performances des profils à l'aide de CompilationMode.Partial(warmupIterations).
  • Ajout d'un code de diagnostic pour détecter les profils de référence compressés. Les profils de référence compressés ne peuvent pas être installés par Profileinstaller dans Macrobenchmarks ou en production en raison de la surcharge du processeur. Ils doivent être évités lors de la création de votre application en mettant à jour Studio/AGP Electric Eel ou bundletool version 1.13.1. (I86413, b/261998144)
  • Ajout de hooks pour macrobenchmark afin de capturer des profils et de supprimer le cache du nuanceur, nécessaires pour générer des profils de référence ou des macrobenchmarks sur les appareils non rootés. (Ie0a7d, b/250083467, b/253094958) (Ia5171, b/231455742)

Version 1.3.0-rc01

8 mars 2023

Publication d'androidx.profileinstaller:profileinstaller:1.3.0-rc01 sans modification par rapport à la dernière version bêta. Liste des commits de la version 1.3.0-rc01

Version 1.3.0-beta01

8 février 2023

Publication d'androidx.profileinstaller:profileinstaller:1.3.0-beta01. Liste des commits de la version 1.3.0-beta01

Modifications apportées à l'API

  • Suppression de la gestion des profils compressés : l'ouverture et la décompression génèrent des régressions de 10 ms sur l'utilisation du processeur au démarrage. Nous avons donc ajouté un diagnostic pour identifier les profils de référence compressés de manière incorrecte. (I86413, b/261998144)

Version 1.3.0-alpha03

11 janvier 2023

Publication d'androidx.profileinstaller:profileinstaller:1.3.0-alpha03. Liste des commits de la version 1.3.0-alpha03

Correction de bugs

  • Gestion des profils de référence compressés ou non compressés (Ic61a0)
  • Correction du plantage de MacrobenchmarkScope.dropShaderCache() grâce à la correction du registre de diffusion dans le fichier manifeste profileinstaller (I5c728, b/258619948)

Version 1.3.0-alpha02

9 novembre 2022

Publication d'androidx.profileinstaller:profileinstaller:1.3.0-alpha02. Liste des commits de la version 1.3.0-alpha02

Modifications apportées à l'API

  • Ajout d'un hook pour que les benchmarks suppriment le cache du nuanceur, afin d'assurer des performances constantes pour les démarrages à froid, en particulier lors de la compilation avec des profils à partir d'itérations de préchauffage. Cette mise à jour est nécessaire pour mesurer les démarrages à froid avec benchmark-macro-junit4:1.2.0-alpha05 ou une version ultérieure. Pour en savoir plus sur les modifications apportées à l'API de la bibliothèque Benchmark, veuillez consulter la page Benchmark 1.2.0-alpha07. (Ia5171, b/231455742)

Version 1.3.0-alpha01

24 octobre 2022

Publication d'androidx.profileinstaller:profileinstaller:1.3.0-alpha01. Liste des commits de la version 1.3.0-alpha01

Modifications apportées à l'API

  • Ajout de l'API ProfileVerifier pour vérifier depuis l'application si un profil de référence a été compilé, s'il a été planifié ou s'il est manquant. (I263a4, b/246653809)
  • Ajout d'une annonce shell qui permet à Macrobenchmark de vider complètement les données de profil en mémoire sur le disque, afin de les inclure dans la génération de profils de référence. Cette mise à jour est nécessaire pour utiliser la bibliothèque macrobenchmark afin de capturer des profils de référence avec BaselineProfileRule et évaluer les performances des profils à l'aide de CompilationMode.Partial(warmupIterations). (Ie0a7d, b/250083467, b/253094958)

Version 1.2.2

Version 1.2.2

11 janvier 2023

Publication d'androidx.profileinstaller:profileinstaller:1.2.2. Liste des commits de la version 1.2.2

Correction de bugs

  • Gestion des profils de référence compressés ou non compressés (Ic61a0)

Version 1.2.1

Version 1.2.1

7 décembre 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.1. Liste des commits de la version 1.2.1

Nouvelles fonctionnalités

  • Activation de profileinstaller pour S_V2 (API 32) et TIRAMISU (API 33). (b/254900303)

Version 1.2.0

Version 1.2.0

27 juillet 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.0. Liste des commits de la version 1.2.0

Changements importants depuis la version 1.1.0

  • Prise en charge du format de profil ART utilisé sous Android 12 et les versions ultérieures.
  • Ajout de nouvelles API dans ProfileInstallReceiver pour obtenir des résultats plus cohérents avec Macrobenchmarks lorsque vous utilisez des profils de référence.

Version 1.2.0-rc01

15 juin 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.0-rc01. Liste des commits de la version 1.2.0-rc01

  • Cette version est identique à la version androidx.profileinstaller:profileinstaller:1.2.0-beta03.

Version 1.2.0-beta03

1er juin 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.0-beta03. Liste des commits de la version 1.2.0-beta03

Version 1.2.0-beta02

18 mai 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.0-beta02. Liste des commits de la version 1.2.0-beta02

  • Aucune modification nécessaire pour prendre en charge les versions 1.2.0-beta02 de Compose.

Version 1.2.0-beta01

11 mai 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.0-beta01. Liste des commits de la version 1.2.0-beta01

Modifications apportées à l'API

  • Ajout de nouvelles API dans ProfileInstallReceiver pour obtenir des résultats plus cohérents avec Macrobenchmarks lorsque vous utilisez des profils de référence. (If2ae5, b/215740637)

Correction de bugs

  • Le programme d'installation de profils génère un message utile lorsque vous essayez d'utiliser le format de métadonnées V_001 sur Android 12 ou une version ultérieure (aosp/1978526, b/217502387).
  • Le programme d'installation de profil utilise désormais la version 1.1.1 d'androidx.startup (aosp/2077099, b/229828376).

Version 1.2.0-alpha02

26 janvier 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.0-alpha02. Liste des commits de la version 1.2.0-alpha02

Cette version est identique à la version 1.2.0-alpha01.

Version 1.2.0-alpha01

12 janvier 2022

Publication d'androidx.profileinstaller:profileinstaller:1.2.0-alpha01. Liste des commits de la version 1.2.0-alpha01

Nouvelles fonctionnalités

  • Prise en charge du format de profil ART utilisé sous Android 12 et les versions ultérieures.

Version 1.1.0

Version 1.1.0

9 février 2022

Publication d'androidx.profileinstaller:profileinstaller:1.1.0. Liste des commits de la version 1.1.0

Version 1.1.0-rc01

15 décembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-rc01 sans aucune mise à jour par rapport à la version 1.1.0-beta04. Liste des commits de la version 1.1.0-rc01

Version 1.1.0-beta04

1er décembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-beta04. Liste des commits de la version 1.1.0-beta04.

Version 1.1.0-beta03

17 novembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-beta03. Liste des commits de la version 1.1.0-beta03

Correction de bugs

  • Mise à jour pour prendre en charge la version 1.1.0-beta03 de Compose.

Version 1.1.0-beta02

3 novembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-beta02. Liste des commits de la version 1.1.0-beta02

Correction de bugs

  • Mise à jour pour prendre en charge la version 1.1.0-beta02 de Compose.

Version 1.1.0-beta01

27 octobre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-beta01. Liste des commits de la version 1.1.0-beta01

  • Aucune modification depuis la version 1.1.0-alpha07.

Version 1.1.0-alpha07

13 octobre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-alpha07. Liste des commits de la version 1.1.0-alpha07

Nouvelles fonctionnalités

  • Prise en charge de profm sur Android N.

Version 1.1.0-alpha06

29 septembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-alpha06. Liste des commits de la version 1.1.0-alpha06

Correction de bugs

  • Correction des problèmes de transcodage de profileinstaller sur N, O et O_MR1 (I12d75).

Version 1.1.0-alpha05

15 septembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-alpha05. Liste des commits de la version 1.1.0-alpha05

Correction de bugs

  • Correction du transcodage de profil Android Nougat et Android Oreo pour les APK multidex.

Version 1.1.0-alpha04

1er septembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-alpha04. Liste des commits de la version 1.1.0-alpha04

Correction de bugs

  • Correction de ProfileInstaller afin de faciliter l'exécution de macrobenchmarks par CompilationMode.BaselineProfile pour les applications utilisant des profils de référence (I42657, b/196074999).

Version 1.1.0-alpha03

18 août 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-alpha03. Liste des commits de la version 1.1.0-alpha03

Correction de bugs

  • Modification d'un comportement d'omission de profileinstaller pour consigner PackageInfo.lastUpdatedTime dans un fichier du répertoire de fichiers de l'application et le comparer avant d'installer le profil lors de l'exécution suivante (Ib93d1).
  • Ajustement du format de profil sur les appareils P, Q et R pour qu'ils soient conformes aux exigences d'ART (I84e89).

Version 1.1.0-alpha02

4 août 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-alpha02. Liste des commits de la version 1.1.0-alpha02

Mise à jour pour assurer la compatibilité avec la version 1.1.0-alpha01 de Compose.

Version 1.1.0-alpha01

21 juillet 2021

Publication d'androidx.profileinstaller:profileinstaller:1.1.0-alpha01. Liste des commits de la version 1.1.0-alpha01

Correction de bugs

  • Correction d'un bug qui déclenchait un mode strict dans certaines circonstances.

Version 1.0

Version 1.0.4

13 octobre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.4. Liste des commits de la version 1.0.4

  • Mise à jour pour prendre en charge la version 1.0.4 de Compose.

Version 1.0.3

29 septembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.3. Liste des commits de la version 1.0.3

  • Mise à jour pour prendre en charge la version 1.0.3 de Compose.

Version 1.0.2

1er septembre 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.2. Liste des commits de la version 1.0.2

Correction de bugs

  • Ajout du transcodage de profil pour les appareils P, Q et R. Cela signifie que ces appareils transcodent le profil pour que le profil écrit soit toujours utilisable par ART. Auparavant, le transcodage était ignoré sur ces plates-formes, ce qui empêchait parfois ART de traiter le profil source. Aucune modification n'a été apportée aux API de développement.

Version 1.0.1

4 août 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.1. Liste des commits de la version 1.0.1

Mise à jour pour assurer la compatibilité avec la version 1.0.1 de Compose.

Version 1.0.0

28 juillet 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.0. Liste des commits de la version 1.0.0

Principales fonctionnalités de la version 1.0.0

Le programme d'installation de profils est une nouvelle bibliothèque qui permet aux bibliothèques et aux applications de définir des "règles de profil" et de regrouper les informations de profil ART dans un APK. Cette bibliothèque installera ces profils après le lancement de l'application. Vous pouvez l'utiliser pour améliorer les performances de votre application.

Pour en savoir plus sur ces règles de profil et leur fonctionnement, veuillez consulter les notes détaillées de la version 1.0.0-beta01.

Version 1.0.0-rc02

14 juillet 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.0-rc02. Liste des commits de la version 1.0.0-rc02

Version 1.0.0-rc01

1er juillet 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.0-rc01. Liste des commits de la version 1.0.0-rc01

Il s'agit d'une version finale sans modification par rapport à la version bêta.

Version 1.0.0-beta01

16 juin 2021

Publication d'androidx.profileinstaller:profileinstaller:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Finalité de la bibliothèque

Le programme d'installation de profils est une nouvelle bibliothèque qui permet aux bibliothèques et aux applications de définir des "règles de profil" et de regrouper les informations de profil ART dans un APK. Cette bibliothèque installera ces profils après le lancement de l'application. Vous pouvez l'utiliser pour améliorer les performances de votre application.

Cette installation de profil est effectuée à l'aide de la bibliothèque androidx.startup. Si, pour une raison quelconque, vous souhaitez désactiver l'installation du profil, vous pouvez modifier le fichier manifeste afin de le supprimer :


       <provider
           android:name="androidx.startup.InitializationProvider"
           android:authorities="${applicationId}.androidx-startup"
           android:exported="false"
           tools:node="merge">
           <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer"
                     tools:node="remove" />
       </provider>

Cela est particulièrement utile si votre application présente des exigences de démarrage complexes et que vous souhaitez déclencher l'installation du profil manuellement à l'aide de l'API ProfileInstaller.writeProfile.

Que sont les règles de profil ?

  • Les règles de profil d'une bibliothèque sont spécifiées dans un fichier texte baseline-prof.txt, situé dans le répertoire src/main ou un répertoire équivalent. Le fichier spécifie une règle par ligne. Dans ce cas, une règle correspond à un modèle mis en correspondance avec des méthodes ou des classes de la bibliothèque. La syntaxe de ces règles correspond à un sur-ensemble du format de profil ART intelligible, utilisé conjointement à adb shell profman --dump-classes-and-methods .... Ces règles prennent l'une des deux formes suivantes pour cibler des méthodes ou des classes.

  • Une règle de méthode adoptera le format suivant :

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Une règle de classe adoptera le format suivant :

    <CLASS_DESCRIPTOR>
    
  • Dans le cas présent, <FLAGS> désigne un ou plusieurs des caractères H, S et P et indique si cette méthode doit être signalée comme "Hot", "Startup" ou "Post Startup".

  • <CLASS_DESCRIPTOR> est le descripteur de la classe à laquelle appartient la méthode ciblée. Par exemple, la classe androidx.compose.runtime.SlotTable aurait comme descripteur Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> est la signature de la méthode, et inclut le nom, les types de paramètres et les types renvoyés de la méthode. Par exemple, la méthode fun isPlaced(): Boolean sur LayoutNode aurait pour signature isPlaced()Z.

  • Ces modèles peuvent comporter des caractères génériques (**, * et ?) pour qu'une même règle affecte plusieurs méthodes ou classes.

Quel effet ont ces règles ?

  • Une méthode associée à l'indicateur H signale qu'il s'agit d'une méthode "hot" qui doit être compilée à l'avance.

  • Une méthode associée à l'indicateur S signale qu'il s'agit d'une méthode appelée au démarrage, qui doit être compilée à l'avance pour éviter les coûts de compilation et d'interprétation de la méthode lors du démarrage.

  • Une méthode associée à l'indicateur P signale qu'il s'agit d'une méthode appelée après le démarrage.

  • La présence d'une classe dans ce fichier indique qu'elle est utilisée au démarrage et doit être préallouée dans le tas de mémoire pour éviter son coût de chargement.

Fonctionnement

  • Les bibliothèques peuvent définir ces règles, qui seront packagées dans des artefacts AAR. Lorsqu'un APK comprenant ces artefacts est créé, ces règles sont fusionnées puis utilisées pour créer un profil ART binaire compact spécifique à l'APK. ART peut ensuite exploiter ce profil lorsque l'APK est installé sur des appareils, afin de compiler à l'avance un sous-ensemble spécifique de l'application, ce qui permet d'améliorer ses performances, notamment lors de la première exécution. Notez que cette opération n'a aucune incidence sur les applications débogables.

  • Les fichiers de règles doivent être nommés baseline-prof.txt et placés dans le répertoire racine de votre ensemble de sources principal (il doit s'agir d'un fichier partageant le même emplacement que votre fichier AndroidManifset.xml).

  • Actuellement, ces fichiers ne sont utilisés que si vous utilisez le plug-in Android Gradle 7.0 (ou version ultérieure) et qu'ils sont actuellement activés avec un indicateur dans votre gradle.properties :

    # Enable adding baseline-prof.txt files to AAR artifacts, and binary profiles to APKs
    android.experimental.enableArtProfiles=true
    

Trouver le bon équilibre

  • Des profils correctement conçus, qui donnent la priorité aux méthodes et aux classes du chemin de démarrage et qui permettent d'améliorer les performances vous offriront de meilleurs résultats. Toutefois, inclure trop de méthodes ou de classes dans les profils peut avoir un effet négatif net en termes de consommation de mémoire et d'utilisation du disque. Nous vous recommandons donc de procéder avec précaution si vous définissez vos propres règles de profil.