Ce guide décrit le processus d'analyse et d'optimisation des performances des jeux sur les appareils Android pour une expérience utilisateur fluide. Il couvre l'identification des goulots d'étranglement des performances, la distinction entre les problèmes de CPU et de GPU, et la vérification des résultats d'optimisation.
Peu importe le plaisir ou l'intérêt que suscite un jeu, s'il ne fonctionne pas bien sur les appareils mobiles, les joueurs ne l'apprécieront pas et il n'aura pas autant de succès. Même les jeux amusants peuvent présenter des problèmes, comme une faible fréquence d'images par seconde (FPS) ou une surchauffe de l'appareil. Ces problèmes mécontentent les joueurs. Il est donc essentiel d'améliorer les performances du jeu et de comprendre comment les optimiser.
Le processus d'optimisation des performances comprend les étapes suivantes :
Mesurer les performances globales du jeu. Quantifiez la dégradation des performances pour chaque scène afin d'identifier les anomalies.
Vérification des limites du CPU et du GPU Déterminez la cause sous-jacente, qu'elle soit liée au processeur ou au GPU.
Outils : Unreal Insight, Unity Profiler, Perfetto et outils de mesure des performances.
Optimisation du processeur : Corrigez les goulots d'étranglement identifiés.
Outils : Unreal Insight, Unity Profiler, Perfetto et Simpleperf.
Optimisation du GPU : Corrigez les goulots d'étranglement identifiés.
Outils : RenderDoc, Arm Mobile Studio, AGI, outil spécifique au fournisseur.
Tests A/B : Effectuez des tests A/B pour valider rigoureusement l'efficacité des optimisations implémentées.
Outils : Unreal Insight, Unity Profiler, Perfetto, outils de mesure des performances, verrouillage de la fréquence du CPU ou du GPU, et RenderDoc.
Ce processus itératif (1 à 5) est maintenu jusqu'à ce que les paramètres thermiques et de FPS cibles soient atteints.
Prérequis
Avoir un build de jeu prêt à être testé sur un appareil Android
Installez les outils suivants :
Analyser les performances globales du jeu
Vous devez vérifier les performances globales du jeu et identifier toute dégradation ou anomalie des performances en fonction des scènes. Avant d'optimiser votre jeu, vérifiez ses performances actuelles. Étant donné que les jeux incluent de nombreuses UI et scènes, analysez les scènes avec une utilisation élevée du processeur ou du GPU, ou les mises en page qui ne fonctionnent pas comme prévu, pour surveiller la dégradation des performances et l'utilisation du processeur ou du GPU par scène.
- Quantifiez la dégradation des performances : utilisez des outils de mesure des performances pour évaluer les performances globales du jeu. Mesurez les performances scène par scène pour identifier les zones spécifiques où la qualité s'est dégradée ou qui présentent des anomalies.
- Identifier les scènes problématiques : analysez les données pour trouver les scènes qui utilisent beaucoup de processeur ou de GPU, ou celles dont la disposition de l'écran ne donne pas les performances attendues.
- Collectez des données de trace : utilisez des outils de trace pour collecter des données de performances détaillées pour les scènes problématiques identifiées.
Identifier les goulots d'étranglement du processeur ou du GPU
Si le jeu n'atteint pas la fréquence d'images cible, déterminez s'il est lié au processeur ou au GPU. L'analyse du comportement du CPU et du GPU est essentielle pour identifier les opportunités d'optimisation, même lorsque l'appareil chauffe ou consomme trop d'énergie pendant le jeu. Vous pouvez utiliser différentes méthodes pour déterminer si le système est lié au CPU ou au GPU.
Analysez les données de trace : utilisez l'outil de votre choix pour analyser les données de trace :
- Unreal Insight (Unreal Engine) : analysez la trace pour afficher le timing de
GameThread,RenderThreadetRHIThread.- Si
GameThreadouRenderThreaddépassent la limite de temps de frame (par exemple, 33,3 ms pour 30 FPS), le jeu est limité par le processeur. - Si
RHIThreadprésente une exécution prolongée ou représente la majorité du temps de rendu, le jeu est lié au GPU.
- Si
Figure 2. Trace Unreal Engine avec GameThread, RenderThread et RHIThread (cliquez pour agrandir). - Profileur Unity (Unity) : si le thread principal consomme beaucoup de temps sur des repères tels que
Gfx.WaitForPresentOnGfxThread, tandis que le thread de rendu afficheGfx.PresentFrameou<GraphicsAPIName>.WaitForLastPresent, le jeu est lié au GPU.
Figure 3. Exemple de limite de GPU pour le profileur Unity (cliquez pour agrandir). - Perfetto : analysez les affectations de cœur de processeur et les détails d'exécution des threads. Cette analyse facilite l'identification des goulots d'étranglement des performances grâce à l'examen détaillé des informations sur l'exécution des threads.
Surcharge du processeur : la trace indique que la charge de travail sur
GameThreadetRenderThread, en association avec VSync, est responsable des retards dans leQueuePresentdu thread RHI, ce qui indique un scénario lié au processeur.
Figure 4. Traces Perfetto avec détails d'exécution du processeur (cliquez pour agrandir). Latence du GPU : si le temps d'exécution de la tâche du GPU dépasse la limite de temps de rendu (25 ms, par exemple), le jeu est lié au GPU. La trace indique que la finalisation du GPU dépasse 25 ms, ce qui signifie qu'il s'agit d'un scénario lié au GPU.
Figure 5. Traces Perfetto avec détails sur la surcharge du GPU (cliquez pour agrandir).
- Unreal Insight (Unreal Engine) : analysez la trace pour afficher le timing de
Utilisez les commandes de statistiques Unreal Engine :
stat unit: comparez le temps alloué aux threads Game, Draw et RHI. Si les temps de jeu et de dessin sont faibles, mais que le temps RHI dépasse systématiquement la limite de temps de frame, le jeu est lié au GPU. Par exemple, si le nombre de FPS requis est de 30 (ce qui équivaut à 33,33 ms par frame) et que les threads de jeu et de dessin restent constamment dans une plage de 10 à 15 ms, mais que le RHI dépasse constamment 30 ms, cela suggère fortement un scénario lié au GPU.
Figure 6. L'unité statistique facilite l'estimation des conditions liées au GPU. stat VulkanRHI: vérifiez les durées d'envoi et de présentation de la file d'attente.
Figure 7. Stat VulkanRHI facilite l'estimation des conditions liées au GPU (cliquez pour agrandir). stat slow: examinez le temps alloué aux threads "Game", "Render" et "RHI" pour identifier les obstacles.
Vérifiez les métriques de performances : utilisez les résultats de votre analyse complète des performances du jeu. Sur Android :
- Limité par le processeur : utilisation du processeur (normalisée) supérieure à 15 %, avec une faible utilisation du GPU et un faible nombre d'images par seconde.
- Lié au GPU : l'utilisation du GPU est supérieure à 90 %.
En règle générale, si le nombre de FPS et l'utilisation du GPU sont faibles, tandis que l'utilisation du processeur dépasse 15 %, la situation peut être considérée comme liée au processeur.
Figure 8. Métriques de performances avec l'utilisation du CPU et du GPU.
Optimiser les performances du processeur
Si l'analyse indique que le jeu est lié au processeur, effectuez des recherches plus approfondies pour identifier les threads ou les API spécifiques à l'origine du goulot d'étranglement.
Pour obtenir des conseils détaillés, consultez Conseils d'optimisation du CPU et du GPU pour Android.
Optimiser les performances des GPU
Si l'analyse indique que le jeu est limité par le GPU, effectuez des recherches plus approfondies à l'aide de débogueurs de frames pour analyser le pipeline de rendu et les appels de dessin.
Pour obtenir des conseils détaillés, consultez Conseils d'optimisation du CPU et du GPU pour Android.
Vérifier l'efficacité de l'optimisation
- Effectuez des tests A/B : créez un build avec les optimisations implémentées.
- Mesurez les performances : utilisez les mêmes outils et méthodes que lors de l'analyse initiale pour mesurer les performances de la version optimisée.
- Comparer les résultats : comparez les nouvelles données de performances avec les données initiales pour confirmer que les goulots d'étranglement identifiés ont été résolus et que les cibles de FPS et thermiques sont atteintes.
- Itérer : répétez les étapes d'analyse et d'optimisation jusqu'à ce que les performances soient atteintes.