Kuro Games réduit la consommation d'énergie de 9,68% grâce au Profileur d'alimentation Android Studio et au Gestionnaire d'alimentation de l'appareil pour Wuthering Waves

Wuthering Waves est un RPG d'action haute fidélité développé par Kuro Games. L'optimisation de la consommation d'énergie est très importante pour fournir une expérience utilisateur de qualité durable pour de longues sessions de jeu.

Figure 1. Capture d'écran de Wuthering Waves

Android Studio a lancé le Profileur d'alimentation de Hedgehog (2023.1.1) qui peut aider les développeurs à comprendre les données de consommation d'énergie basées sur le Gestionnaire d'alimentation de l'appareil (ODPM).

Grâce aux fonctionnalités de profilage de l'alimentation dans Android Studio, vous pouvez également effectuer efficacement des tests A/B sur la consommation d'énergie des fonctionnalités de votre application Android (comme illustré ci-dessous).

Figure 2. Capture d'écran du profileur d'alimentation Android Studio

Ce qu'ils ont fait

Kuro Games a commencé par utiliser le Profileur d'alimentation Android Studio pour comprendre l'impact des comportements de jeu sur la consommation d'énergie de l'appareil. Cette expérience l'a conduit à développer un outil personnalisé basé sur Perfetto et ODPM, intégrant les améliorations suivantes:

  • Vues personnalisées : le développeur peut filtrer les rails d'alimentation et prédéfinir des plages de temps flexibles.
  • Meilleure maintenance : le développeur peut importer les données de consommation d'énergie dans son système d'assurance qualité personnalisé et comparer les données entre les versions du jeu.

Traiter les données ODPM

Pour accéder aux données ODPM, Kuro Games a utilisé l'API de métriques Perfetto Trace Processor (Python) pour traiter avg_used_power_mw data de la session de 30 secondes à partir de la métrique android_powerrails, qui est définie comme AndroidPowerRails dans le proto de métriques Perfetto, au format suivant:

Rail d'alimentation Qualité graphique Lecteur d'empreinte digitale Luminosité Consommation d'énergie moyenne Pourcentage(par rail / total)
power.rail.cpu.big Élevée 30 Faible 474,158 mW 14,70%
power.rail.cpu.mid Élevée 30 Faible 470,916 mW 14,60%
power.rail.cpu.little Élevée 30 Faible 438,662 mW 13,60%
power.rail.gpu Élevée 30 Faible 346,761 mW 10,70%
... ...

Identifier les rails d'alimentation à forte consommation d'énergie

Il n'existe pas de valeur standard pour chaque rail d'alimentation. Pour identifier les rails d'alimentation à forte consommation d'énergie, Kuro Games a créé des tests A/B à l'aide de différents cas de test, y compris au ralenti, en cours d'exécution et en combat. Vous pouvez identifier des rails d'alimentation spécifiques dont les valeurs sont manifestement élevées en comparant les valeurs des mêmes rails d'alimentation. En comparant les différences de comportement entre les différents cas de test, vous pourrez identifier progressivement l'origine du problème de consommation d'énergie.

Optimisations

Grâce aux données ODPM, Kuro Games peut mesurer l'amélioration de chaque scénario d'optimisation:

  • Modification de la stratégie d'ordonnancement des cœurs de processeur et ajustement de la priorité des différents threads pour réduire la charge de travail des grands cœurs
  • Précompilation du PSO (objet d'état de pipeline) pour réduire la charge de compilation du nuanceur d'exécution du processeur
  • Implémentation du tri des ensembles potentiellement visibles (PVS) pour réduire la charge de rendu du GPU
  • Cuisson hors connexion de l'occlusion des ombres pour réduire la charge de rendu du GPU

Pour comparer les résultats des tests dans des conditions identiques et reproductibles, Kuro Games a récupéré les données ODPM dans un cas de test utilisant la même scène 3D et la même perspective de caméra avec la même durée.

Résultats

En exploitant les données de l'ODPM et du profilage de l'alimentation, Kuro Games a réduit la consommation d'énergie totale de 9,68%, passant de 3 233 mW dans la version de septembre (version 0904) à 2 920 mW dans la version de novembre (version 1.4 finale). La figure suivante détaille cette réduction de la consommation d'énergie avec des paramètres FPS et graphiques cohérents.

Figure 3. Différences de données sur les rails d'alimentation entre la version de septembre et la version de novembre

Les données du Gestionnaire d'alimentation de l'appareil ne sont actuellement disponibles que pour les appareils Pixel 6 et versions ultérieures, mais des améliorations peuvent être constatées sur tous les appareils Android grâce à d'autres métriques, y compris l'utilisation du processeur, l'utilisation du GPU et Batterystats. Par exemple, Kuro Games a également constaté une réduction globale de 9,6% de l'utilisation du GPU dans la même scène pour l'Oppo Reno 5.

Premiers pas

Vous pouvez commencer par le Profileur d'alimentation ou les données des rails d'alimentation Perfetto pour les cas d'utilisation avancés.

Les noms des rails d'alimentation ODPM sont spécifiques à l'appareil. Un nom de rail peut être "S2S_VDD_G3D". Des connaissances spécifiques sur le matériel de l'appareil sont nécessaires pour interpréter les données de surveillance de l'alimentation correspondantes. À partir du niveau d'API Android 35, vous pouvez utiliser PowerMonitor à partir de getSupportedPowerMonitors. Avec PowerMonitor, vous pouvez récupérer le mappage entre les libellés lisibles par l'homme et les noms des rails d'alimentation bruts définis par chaque OEM.

Pour vérifier l'amélioration sur les appareils sans ODPM, vous pouvez utiliser les horloges de CPU, de GPU et les estimations de bande passante de mémoire comme proxy de la consommation d'énergie.

Ressources supplémentaires

Optimiser l'efficacité énergétique