Dans Android Vitals, une session lente est une session dans laquelle plus de 25 % des images s'affichent lentement. L'affichage est considéré comme lent s'il n'est pas présenté moins de 50 ms après l'image précédente (équivalent de 20 FPS). Android Vitals indique également une deuxième métrique de sessions lentes avec une cible de 34 ms (équivalant à 30 FPS). Les sessions lentes vous permettent de comprendre les performances de votre jeu liées à la fréquence d'images, qui ont un impact sur sa fluidité.
À terme, Play évitera de proposer aux utilisateurs des jeux qui ne peuvent pas atteindre 20 FPS sur leur téléphone. Notez qu'Android Vitals ne surveille la fréquence d'images que si votre jeu s'exécute plus d'une minute.
Pour en savoir plus sur cette métrique, consultez notre Centre d'aide.
Mesurer le nombre d'images par seconde et détecter les images lentes
La commande Android dumpsys SurfaceFlinger --timestats fournit des histogrammes de FPS moyen et de temps présent à présent pour toutes les couches en cours d'affichage. Le temps présent à présent d'une image est l'intervalle entre l'image actuelle et l'image précédente en cours de dessin. Pour utiliser la commande permettant de collecter les FPS de votre jeu, procédez comme suit :
Exécutez la commande avec les options
enableetclearpour commencer à capturer des informations :adb shell dumpsys SurfaceFlinger --timestats -clear -enableLorsque le jeu est joué suffisamment longtemps, exécutez à nouveau la commande avec l'option
dumppour vider les informations :adb shell dumpsys SurfaceFlinger --timestats -dumpLes informations de vidage fournissent le nombre total d'images et l'histogramme
presentToPresentpour toutes les couches affichées par SurfaceFlinger. Vous devez trouver la section de votre jeu en filtrant parlayerName:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833Vous pouvez calculer la fréquence d'images lente de la session en fonction des informations de chaque couche.
Par exemple, pourcentage d'images lentes à 20 FPS = (somme des valeurs de 54 ms à 1 000 ms) / totalFrames x 100
totalFrames = 274 ... presentToPresent histogram: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0Le FPS moyen de chaque couche est également indiqué dans le dump :
... averageFPS = 30.179 ...Après avoir collecté toutes les informations, désactivez timestats à l'aide de l'option
disable:adb shell dumpsys SurfaceFlinger --timestats -disable
Causes et solutions des images lentes
De nombreuses raisons peuvent expliquer pourquoi une frame peut s'afficher ou s'afficher plus longtemps à l'écran que votre cible. Votre jeu peut être limité par le processeur ou le GPU, l'appareil peut surchauffer et activer un état thermique limité, ou il peut y avoir une incohérence entre la fréquence d'images du jeu et la fréquence d'actualisation de l'écran de l'appareil.
Utilisez Android Frame Pacing (Swappy), Vulkan et ADPF pour résoudre ces problèmes et améliorer les performances de votre jeu.
Qu'est-ce que Swappy ?
La bibliothèque Android Frame Pacing, également appelée Swappy, fait partie des bibliothèques AGDK. Swappy permet aux jeux OpenGL et Vulkan de bénéficier d'un rendu fluide et d'un frame pacing optimal sur Android.
Le frame pacing désigne la synchronisation de la logique et de la boucle de rendu d'un jeu avec le sous-système d'affichage d'un système d'exploitation et le matériel utilisé pour l'affichage. Le sous-système d'affichage Android a été conçu pour éviter les artefacts visuels (tearing) qui peuvent se produire lorsque le matériel d'affichage passe à une nouvelle image avant d'avoir terminé l'affichage de la précédente. Pour éviter ces artefacts, le sous-système d'affichage effectue les opérations suivantes :
- Met en mémoire tampon les images précédentes.
- Détecte les envois d'images tardifs.
- Réaffiche des images passées en cas d'images tardives détectées.
Découvrez comment Mir 2 a utilisé Swappy pour réduire son taux de sessions lentes de 40 % à 10 %.
Utiliser Swappy dans des projets natifs
Consultez les guides suivants pour intégrer la bibliothèque Android Frame Pacing à votre jeu :
- Intégrer le frame pacing Android dans votre moteur de rendu OpenGL
- Intégrer Android Frame Pacing dans votre moteur de rendu Vulkan
Utiliser Swappy dans le moteur de jeu Unity
Unity a intégré Android Frame Pacing dans son moteur. Pour activer cette fonctionnalité dans Unity 2019.2 ou version ultérieure, cochez la case "Optimized Frame Pacing" (Frame pacing optimisé) sous Project Settings > Player > Settings (Paramètres du projet > Lecteur > Paramètres) pour Android > Resolution and Presentation (Android > Résolution et présentation) :
Vous pouvez également activer l'option Optimized Frame Pacing (rythme de frames optimisé) de manière programmatique dans votre code logique pour permettre à Unity de distribuer les frames de manière uniforme afin de réduire la variance de la fréquence d'images et d'offrir un gameplay plus fluide.
Utiliser Swappy dans le moteur de jeu Unreal
Unreal 4.25 et versions ultérieures intègrent la bibliothèque Android Frame Pacing, qui fait partie de l'Android Game Development Kit. L'article Frame Pacing mobile explique comment activer la bibliothèque Android Frame Pacing et comment contrôler le rythme d'affichage des frames depuis du code C++.
Qu'est-ce que Vulkan ?
Vulkan est une API multiplate-forme moderne pour les graphismes 3D conçue pour minimiser l'abstraction entre le matériel graphique de l'appareil et votre jeu. Vulkan est la principale API graphique de bas niveau sur Android. Elle remplace OpenGL ES. OpenGL ES est toujours compatible avec Android, mais ses fonctionnalités ne sont plus en cours de développement.
Vulkan offre les avantages suivants par rapport à OpenGL ES :
- Architecture plus efficace avec une surcharge du processeur réduite dans le pilote graphique
- Nouvelles stratégies d'optimisation pour améliorer les performances du processeur
- Nouvelles fonctionnalités graphiques non disponibles dans OpenGL ES, telles que les API sans liaison et le ray tracing
Utiliser Vulkan dans des projets Android natifs
L'atelier de programmation Premiers pas avec Vulkan sur Android vous explique comment configurer votre pipeline de rendu Vulkan, puis comment afficher un triangle texturé et rotatif à l'écran. Suivez l'atelier de programmation pour apprendre à afficher les graphismes de votre jeu.
Utiliser Vulkan dans le moteur de jeu Unity
Pour activer la sélection automatique d'appareils sur Unity, suivez la procédure de configuration de l'API graphique automatique.
Vous pouvez également activer Vulkan manuellement en désactivant l'API Auto Graphics et en plaçant Vulkan en priorité maximale dans la liste des API graphiques. Si vous utilisez Unity 2021.1 ou une version antérieure, il s'agit de la seule méthode pour utiliser Vulkan.
Utilisez le plug-in du moteur Unity VkQuality pour fournir des recommandations au moment du lancement de l'API graphique que votre jeu doit utiliser sur des appareils spécifiques.
Utiliser Vulkan dans le moteur de jeu Unreal
Pour activer l'API graphique Vulkan, accédez à Project Settings > Platforms > Android > Build (Paramètres du projet > Plates-formes > Android > Compilation), puis sélectionnez Support Vulkan (Compatibilité Vulkan). Lorsque vous sélectionnez à la fois Support Vulkan (Prise en charge de Vulkan) et Support OpenGL ES3.2 (Prise en charge d'OpenGL ES3.2), Unreal utilise Vulkan par défaut. Si l'appareil ne prend pas en charge Vulkan, Unreal bascule sur OpenGL ES 3.2.
Si vous utilisez des fonctionnalités Vulkan spécifiques qui sont connues pour ne pas fonctionner correctement sur certains appareils, vous pouvez personnaliser votre fichier BaseDeviceProfile.ini pour exclure ces appareils. Pour savoir comment personnaliser BaseDeviceProfile.ini, consultez Personnaliser les profils d'appareils et l'évolutivité pour Android. Étant donné que les nouveaux pilotes d'appareil peuvent corriger des problèmes d'appareils précédemment connus, tenez votre fichier BaseDeviceProfile.ini à jour pour bénéficier de toutes les optimisations.
Qu'est-ce que l'ADPF ?
Android Dynamic Performance Framework (ADPF) optimise les jeux en fonction des fonctionnalités dynamiques de gestion thermique, de processeur et de GPU sur Android. Bien que nous mettions ici l'accent sur les jeux, ces fonctionnalités peuvent également s'appliquer à d'autres applications haute performance.
ADPF est un ensemble d'API permettant aux jeux et aux applications haute performance d'interagir plus directement avec les systèmes d'alimentation et thermiques des appareils Android. Ces API vous offrent la possibilité de surveiller le comportement dynamique des appareils Android et d'optimiser les performances de jeu à un niveau durable sans provoquer de surchauffe des appareils.
Voici les principales fonctionnalités d'ADPF :
- API Thermal : surveillez l'état thermique d'un appareil afin que l'application puisse ajuster la charge de travail de manière proactive avant qu'elle ne devienne instable.
- API CPU Performance Hint : fournissez des indices de performances permettant à Android de choisir les paramètres de performances appropriés (par exemple, le point de fonctionnement ou le cœur du processeur) pour la charge de travail.
- API Game Mode et API Game State : optimisez le gameplay en donnant la priorité aux performances ou à l'autonomie de la batterie, en fonction des paramètres de l'utilisateur et des configurations spécifiques au jeu.
- Mode performances fixes : activez le mode performances fixes sur un appareil lors de l'analyse comparative afin d'obtenir des mesures qui ne sont pas modifiées par les horloges de processeur dynamiques.
- Mode d'efficacité énergétique : indiquez à la session que les threads de la session d'indice de performances peuvent être planifiés de manière à privilégier l'efficacité énergétique plutôt que les performances. Disponible dans Android 15 (niveau d'API 35).
Utiliser l'ADPF dans des projets Android natifs
L'atelier de programmation Intégrer des fonctionnalités d'adaptabilité dans votre jeu natif vous guide pour intégrer les fonctionnalités ADPF à votre jeu, avec des étapes que vous pouvez suivre à votre rythme. À la fin de l'atelier de programmation, vous aurez intégré les fonctionnalités suivantes :
- API Thermal : écoutez l'état thermique de l'appareil et réagissez avant qu'il ne passe en mode de limitation thermique.
- API Game Mode : permet de comprendre les préférences d'optimisation du joueur (maximiser les performances ou préserver la batterie) et d'ajuster les paramètres en conséquence.
- API Game State : indiquez au système l'état de votre jeu (chargement, lecture, UI, etc.) pour qu'il puisse ajuster les ressources en conséquence (boost des E/S, du processeur, du GPU, etc.).
- API Performance Hint : indiquez au système votre modèle de thread et votre charge de travail afin qu'il puisse allouer les ressources en conséquence.
Utiliser l'ADPF dans le moteur de jeu Unity
Adaptive Performance d'Unity est un outil destiné aux développeurs de jeux qui souhaitent optimiser leurs jeux sur les appareils mobiles, en particulier pour l'écosystème Android diversifié. Adaptive Performance permet à votre jeu de s'adapter aux caractéristiques thermiques et de performances de l'appareil en temps réel, ce qui garantit une expérience de jeu fluide et efficace.
Le fournisseur Android Adaptive Performance vous guide tout au long de la procédure d'implémentation d'ADPF dans Unity. Consultez également ADPF Unity Adaptive Performance and Android provider (ADPF Unity Adaptive Performance et fournisseur Android).
Utiliser l'ADPF dans le moteur de jeu Unreal
- Téléchargez le plug-in.
- Copiez le plug-in dans le dossier des plug-ins du projet.
- Activez le plug-in ADPF Unreal Engine dans l'éditeur Unreal.
- Relancez l'éditeur Unreal.
- Compilez et préparez le jeu.
Le plug-in Android Dynamic Performance Framework (ADPF) pour Unreal Engine offre des performances stables et évite la limitation thermique. Téléchargez le plug-in depuis GitHub. Ce plug-in modifie les fonctionnalités en définissant des valeurs de console Unreal. Pour en savoir plus, consultez Plug-in ADPF Unreal Engine.