Android inclut des options sur l'appareil pour les développeurs, qui vous aident à visualiser les endroits où votre application peut rencontrer des problèmes pour afficher son interface utilisateur, comme l'exécution de tâches de rendu superflues ou de longues opérations de thread et de GPU. Cette page explique comment déboguer la superposition GPU et profiler le rendu GPU.
Pour en savoir plus sur les options pour les développeurs sur l'appareil, y compris comment les activer, consultez Configurer les options pour les développeurs sur l'appareil.
Profiler la vitesse du rendu GPU
L'outil Profile GPU Rendering affiche, sous forme d'histogramme à défilement, une représentation visuelle du temps nécessaire pour afficher les images d'une fenêtre d'interface utilisateur par rapport à un benchmark de 16,67 ms par image.
Sur les GPU moins puissants, le taux de remplissage disponible (la vitesse à laquelle le GPU peut remplir le tampon de l'image) peut être assez faible. À mesure que le nombre de pixels requis pour dessiner un frame augmente, le GPU peut mettre plus de temps à traiter les nouvelles commandes, ce qui oblige le reste du système à attendre que le GPU puisse rattraper son retard.
L'outil de profilage vous permet d'identifier les moments où le GPU est surchargé en essayant de dessiner des pixels ou lorsqu'il est dépassé par une superposition lourde.
Activer le profileur
Avant de commencer, assurez-vous d'utiliser un appareil équipé d'Android 4.1 (niveau d'API 16) ou version ultérieure, et veillez à activer les options pour les développeurs. Pour commencer à profiler le rendu GPU de l'appareil lorsque vous utilisez votre application, procédez comme suit :
- Sur votre appareil, accédez à Paramètres, puis appuyez sur Options pour les développeurs.
- Dans la section Surveillance, sélectionnez Rendu GPU du profil ou Rendu HWUI du profil, en fonction de la version d'Android exécutée sur l'appareil.
- Dans la boîte de dialogue "Rendu GPU du profil", sélectionnez À l'écran sous forme de barres pour superposer les graphiques sur l'écran de votre appareil.
- Ouvrez l'application que vous souhaitez profiler.
Inspecter les résultats
Dans l'image agrandie du graphique de l'outil Profile GPU Rendering illustré à la figure 1, vous pouvez voir la section en couleur, comme sur Android 6.0 (niveau d'API 23).
Figure 1. Agrandissement du graphique de Profile GPU Rendering.
Voici quelques points à noter à propos de la sortie :
- Pour chaque application visible, un graphique s'affiche.
- Chaque barre verticale le long de l'axe horizontal représente une image, et la hauteur de chaque barre verticale représente le temps nécessaire pour que l'image s'affiche (en millisecondes).
- La ligne horizontale verte représente 16,67 millisecondes. Pour atteindre 60 images par seconde, la barre verticale de chaque image doit rester en dessous de cette ligne. Chaque fois qu'une barre dépasse cette ligne, les animations peuvent être mises en pause.
- L'outil met en évidence les images qui dépassent le seuil de 16,67 millisecondes en élargissant et en réduisant la transparence de la barre correspondante.
- Chaque barre contient des composants colorés qui correspondent à une étape du pipeline de rendu. Le nombre de composants dépend du niveau d'API de l'appareil.
Le tableau suivant fournit une description de chaque segment d'une barre verticale dans la sortie du profileur si vous utilisez un appareil équipé d'Android 6.0 (ou version ultérieure).
| Composant de la barre | Étape de rendu | Description |
|---|---|---|
| Intervertir les tampons | Représente le temps d'attente du processeur pour la fin du travail du GPU. Si cette barre devient trop grande, cela signifie que l'application effectue trop de tâches sur le GPU. | |
| Transmission de commande | Temps passé par le moteur de rendu 2D d'Android à envoyer des commandes à OpenGL pour tracer et redessiner des listes d'affichage. La hauteur de cette barre est directement proportionnelle à la durée totale d'exécution de chaque liste d'affichage. Plus il y a de listes d'affichage, plus la barre rouge est grande. | |
| Synchroniser et importer | Représente le temps nécessaire pour importer des informations bitmap sur le GPU. Un segment volumineux indique que l'application prend beaucoup de temps à charger de grandes quantités de graphiques. | |
| Dessiner |
Représente le temps utilisé pour enregistrer les commandes de dessin, telles que drawLine. Dans Compose, cette phase peut parfois inclure des opérations de mesure et de mise en page. Si cette barre est haute, capturez une trace système et inspectez-la à l'aide de Perfetto pour obtenir une répartition détaillée.
|
|
| Mesurer/Mettre en page | Représente le temps passé à positionner et à déterminer la taille des composants d'UI pendant la phase de mise en page, qui inclut l'exécution des modificateurs de mesure et de placement. Un segment volumineux indique des calculs complexes dans ces modificateurs ou une arborescence de mise en page excessivement profonde nécessitant des recalculs fréquents. | |
| Traitement et animation des entrées |
Représente le temps nécessaire pour évaluer les appels d'API d'animation ou pour gérer l'entrée du pointeur et ses rappels. Si ce segment est volumineux, cela peut indiquer qu'une animation ou un rappel d'entrée personnalisé passe trop de temps à traiter l'élément. Le calcul de l'état et le mappage des données lors du défilement d'un LazyColumn ou d'un LazyRow se produisent également généralement pendant ce segment et constituent une source de ralentissement plus courante dans ce segment.
|
|
| Temps divers/Délai VSync | Représente le temps passé par l'application à exécuter des opérations entre deux images consécutives. Cela peut être un indicateur d'un trop grand nombre de traitements dans le thread UI qui pourrait être déchargé dans un autre thread. |
Tableau 1. Barres de composants sous Android 6.0 ou version ultérieure.
Pour en savoir plus sur l'interprétation des informations fournies par l'outil de profilage, consultez Analyser avec Profile GPU Rendering.