Sessions lentes (jeux uniquement)

"Sessions lentes" est une nouvelle métrique Android Vitals de la Google Play Console. Une session lente est une session au cours de laquelle plus de 25% des images s'affichent trop 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 (ce qui équivaut à 20 FPS). Android Vitals enregistre également une deuxième métrique "Sessions lentes" avec une cible de 34 ms (équivalent à 30 FPS). Les sessions lentes vous permettent de comprendre les performances de votre jeu en termes de fréquence d'images, qui ont un impact sur sa fluidité pour les utilisateurs.

À 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 commence à surveiller la fréquence d'images qu'après l'exécution de votre jeu pendant une minute.

Pour en savoir plus sur cette métrique, consultez notre Centre d'aide.

Graphiques semblables à un graphique à secteurs qui indiquent le nombre d'images affichées trop lentement ou pas trop lentement.
Figure 1. Session lente dans Android Vitals

Mesurer le FPS et détecter les images lentes

La commande Android dumpsys surfaceflinger timestats fournit un histogramme de durée moyenne (FPS) et présent à la présentation de toutes les couches affichées. Le délai de présent à présenter d'un frame correspond à l'intervalle entre le frame actuel et le frame précédent. Voici les étapes à suivre pour utiliser la commande permettant de collecter les FPS de votre jeu:

  1. Exécutez la commande avec les options enable et clear pour commencer à capturer des informations:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Lorsque vous jouez suffisamment longtemps, exécutez à nouveau la commande avec l'indicateur dump pour vider les informations:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    Les informations vidées fournissent le nombre total de frames et un histogramme présenteToPresent pour tous les calques rendus par SurfaceFlinger. Vous devez trouver la section de votre jeu en filtrant en fonction de layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    La fréquence d'images lente de la session peut être calculée en fonction des informations de chaque couche.

    Par exemple, le pourcentage d'images affichées trop lentement est de 20 FPS = (somme des valeurs de 54 ms à 1 000 ms) / totalFrames x 100.

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    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=0
    

    Le fichier de vidage indique également le FPS moyen de chaque couche:

    ...
    averageFPS = 30.179
    ...
    
  3. Après avoir collecté toutes les informations, vous devez désactiver les statistiques temporelles à l'aide de l'option disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

Causes et solutions de lenteur d'affichage

Il existe de nombreuses raisons pour lesquelles un cadre peut apparaître ou s'afficher plus longtemps à l'écran que la cible du développeur. Le jeu peut être lié au processeur/GPU. Ou l'appareil surchauffe et active un état thermique de limitation. ou la fréquence d'images du jeu et la fréquence d'actualisation de l'écran de l'appareil ne correspondent pas.

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 d'obtenir un rendu fluide et un frame pacing correct sur Android.

Le frame pacing est 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 d'affichage sous-jacent. Le sous-système d'affichage Android a été conçu pour éviter les artefacts visuels (appelés "déchirures") qui peuvent se produire lorsque le matériel d'affichage passe à un nouveau cadre au cours d'une mise à jour. 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

Utiliser Swappy dans les projets natifs

Consultez les guides suivants pour intégrer la bibliothèque Android Frame Pacing à votre jeu:

Utiliser Swappy dans le moteur de jeu Unity

Unity a intégré Android Frame Pacing à 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) :

Boîte de dialogue "Project settings" (Paramètres du projet)
Figure 2. Activez le frame pacing dans Unity Engine.

Vous pouvez également activer de manière programmatique l'option Frame Pacing optimisé dans votre code logique pour permettre à Unity de répartir uniformément les images afin de réduire la variance de la fréquence d'images, ce qui rend le jeu plus fluide.

Utiliser Swappy dans le moteur de jeu Unreal

Unreal 4.25 et les versions ultérieures intègrent la bibliothèque Android Frame Pacing, qui fait partie d'Android Game Development Kit. L'article Mobile Frame Pacing explique comment activer la bibliothèque Android Frame Pacing et comment contrôler le frame pacing à partir 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 guide dans la configuration de votre pipeline de rendu Vulkan, puis dans le rendu d'un triangle texturé et rotatif à l'écran. Suivez cet 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 des appareils sur Unity, suivez la procédure de configuration de l'API Auto Graphics.

Boîte de dialogue "Project settings" (Paramètres du projet)
Figure 3. Activer l'API Unity Auto Graphics.

Vous pouvez également activer Vulkan manuellement en désactivant l'API Auto Graphics et en lui attribuant la priorité la plus élevée dans la liste des API graphiques. Si vous utilisez Unity 2021.1 ou une version antérieure, il s'agit de la seule façon d'utiliser Vulkan.

Boîte de dialogue "Project settings" (Paramètres du projet)
Figure 4. Choisissez manuellement Vulkan comme API graphique principale dans Unity.

Utilisez le plug-in de moteur Unity VkQuality pour fournir des recommandations lors du lancement de l'API graphique que votre jeu peut utiliser sur des appareils spécifiques.

Utiliser Vulkan dans le moteur de jeu Unreal

Pour activer l'API graphique Vulkan, accédez à Paramètres du projet > Plates-formes > Android > Compiler, puis sélectionnez Compatibilité avec Vulkan. Lorsque vous sélectionnez à la fois Prendre en charge Vulkan et Prendre en charge OpenGL ES3.2, Unreal utilise Vulkan par défaut. Si l'appareil n'est pas compatible avec Vulkan, Unreal utilise OpenGL ES 3.2.

Boîte de dialogue "Project settings" (Paramètres du projet)
Figure 5 : Activez Vulkan dans Unreal Engine.

Si vous utilisez des fonctionnalités Vulkan spécifiques dont le comportement est connu sur certains appareils, vous pouvez personnaliser votre fichier BaseDeviceProfile.ini pour les exclure. Consultez la page Personnaliser les profils d'appareil et l'évolutivité pour Android pour découvrir comment personnaliser BaseDeviceProfile.ini. Étant donné que de nouveaux pilotes d'appareils peuvent résoudre les problèmes de périphériques précédemment connus, mettez régulièrement à jour votre fichier BaseDeviceProfile.ini 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 d'Android. L'accent est mis sur les jeux, mais vous pouvez également utiliser les fonctionnalités pour d'autres applications exigeantes en performances.

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. Avec ces API, vous pouvez surveiller le comportement dynamique sur les systèmes Android et optimiser les performances de jeu à un niveau durable sans surchauffer les appareils.

Voici les principales fonctionnalités d'ADPF :

  • API thermique: 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: fournissent des indices de performances permettant à Android de choisir les paramètres de performances appropriés (par exemple, le cœur ou le point d'exploitation du processeur) en fonction de la charge de travail.
  • API Game Mode et API Game State: activez l'optimisation du jeu en donnant la priorité aux caractéristiques de performances ou d'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 pour obtenir des mesures qui ne sont pas modifiées par l'horloge dynamique du processeur.
  • Mode économie d'énergie: indique à la session que les threads de la session Performance Hint peuvent être programmés en toute sécurité pour privilégier l'efficacité énergétique plutôt que les performances. Disponible sur Android 15 (niveau d'API 35).

Utiliser ADPF dans les projets Android natifs

L'atelier de programmation Intégrer des fonctionnalités d'adaptabilité dans votre jeu natif vous explique comment intégrer des fonctionnalités ADPF à votre jeu en suivant des étapes que vous pouvez suivre à votre propre rythme. À la fin de l'atelier de programmation, vous aurez intégré les fonctionnalités suivantes:

  • API thermique: écoutez l'état thermique de l'appareil et réagissez avant qu'il ne passe en état de limitation thermique.
  • API Game Mode: identifiez les préférences d'optimisation des joueurs (maximiser les performances ou économiser la batterie) et effectuez les ajustements nécessaires.
  • API Game State: indiquez au système l'état de votre jeu (chargement, jeu, interface utilisateur, etc.). Il pourra ainsi ajuster les ressources en conséquence (booster les E/S, le processeur, le GPU, etc.).
  • API Performance Hint: indiquez au système votre modèle de thread et votre charge de travail pour qu'il puisse allouer les ressources en conséquence.

Utiliser ADPF dans le moteur de jeu Unity

Unity's Adaptive Performance est un outil destiné aux développeurs qui souhaitent optimiser leurs jeux sur les appareils mobiles, en particulier pour le vaste écosystème Android. Adaptive Performance permet à votre jeu de s'adapter aux performances et aux caractéristiques thermiques de l'appareil en temps réel, pour une expérience de jeu fluide et efficace.

Le fournisseur Adaptive Performance Android vous guide tout au long de la procédure d'implémentation d'ADPF dans Unity.

Boîte de dialogue "Project settings" (Paramètres du projet)
Figure 6 : Intégrez ADPF à Unity Engine.

Utiliser ADPF dans le moteur de jeu Unreal

Boîte de dialogue "Project settings" (Paramètres du projet)
Figure 7. Intégrez ADPF à Unreal Engine.
  1. Télécharger le plug-in
  2. Copiez le plug-in dans le dossier du plug-in du projet.
  3. Activer le plug-in ADPF Unreal Engine dans l'éditeur Unreal
  4. Relancer l'éditeur Unreal
  5. Développer et cuisiner le jeu

Le plug-in ADPF(Android Dynamic Performance Framework) pour Unreal Engine offre des performances stables et empêche la limitation thermique. Téléchargez le plug-in sur GitHub. Ce plug-in modifie les fonctionnalités en définissant des valeurs de console Unreal.