Que recherchez-vous ?

Personnaliser les mesures de performance dans Unity Profiler

ANDY BARNARD / UNITYSoftware Engineer, Performance Tooling
Apr 29, 2022|13 Min
Personnaliser les mesures de performance dans Unity Profiler
Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.

L'optimisation de votre application nécessite de pouvoir mesurer précisément la consommation des ressources matérielles de votre projet. L'extension du Unity Profiler avec vos propres mesures de performance vous permet de mieux comprendre l'histoire unique de la performance de votre application. Dans ce billet, nous allons couvrir les nouvelles fonctionnalités d'extensibilité du Profiler dans Unity 2021 LTS.

Nos nouveaux compteurs Profiler fournissent un mécanisme léger pour ajouter vos propres mesures de performance à vos applications et paquets Unity. Vous pouvez également visualiser vos mesures directement dans la fenêtre du Profiler en ajoutant vos propres modules de Profiler. Poursuivez votre lecture pour savoir comment utiliser ces fonctionnalités afin d'améliorer les performances de votre projet Unity.

Qu'est-ce que l'Unity Profiler ?

Unity Profiler est un outil que vous pouvez utiliser pour obtenir des informations détaillées sur les performances de votre application. Il suit un grand nombre de mesures de performance dans plusieurs catégories, telles que la mémoire, l'audio et le rendu. Ces mesures sont visualisées dans la fenêtre du Profiler et, dans certains cas, elles peuvent également être interrogées à partir d'un script. Grâce à ces informations, vous pouvez savoir comment votre application Unity utilise les ressources matérielles disponibles de la plateforme cible, ce qui peut vous aider à déterminer les points à optimiser.

Vue d'ensemble du profileur Unity
Compteurs du profileur
Que sont les compteurs du Profiler ?

Les compteurs Profiler suivent, mesurent ou comptent les métriques de votre application Unity qui sont utiles à des fins d'analyse des performances. Par exemple, Unity définit un compteur intégré de Memory Profiler pour suivre le nombre total d'octets de mémoire utilisés par votre application, appelé "Total Used Memory". Il s'agit d'une statistique utile pour évaluer l'empreinte mémoire de votre application sur l'appareil cible. Vous pouvez voir cette valeur affichée au fil du temps avec d'autres mesures liées à la mémoire dans le module Memory de la fenêtre Profiler, illustré ci-dessous.

Vue d'ensemble du module de mémoire du Memory Profiler
Compteurs personnalisés du Profiler

En ajoutant vos propres compteurs Profiler, vous pouvez exposer des mesures de performance propres à vos propres systèmes et applications. Ces mesures peuvent être affichées dans la fenêtre du profileur avec d'autres données de performance, y compris les compteurs intégrés. Cela vous permet de visualiser les caractéristiques de performance propres à votre application, en contexte, directement dans la fenêtre du Profiler.

Dans l'exemple ci-dessous, un compteur Profiler personnalisé a été ajouté pour suivre le nombre de créatures actives dans une scène. Il est affiché à côté du compteur intégré au Profiler, Batches Count, qui suit le nombre de lots de rendu traités à chaque image. Cela nous permet d'établir facilement une corrélation entre les deux mesures et de voir l'impact de notre nombre de créatures sur le nombre de lots que le moteur de rendu doit traiter.

Un compteur Profiler personnalisé est affiché à côté du compteur Profiler intégré, Batches Count, qui indique le nombre de lots de rendu traités à chaque image.

De plus, tous les compteurs de votre Profiler sont disponibles dans les Builds Release, ainsi que certains compteurs intégrés lorsque cela est spécifié. Les versions de développement sont plus représentatives des performances réelles de votre application que les versions de développement.

Cependant, pour des raisons d'optimisation, l'outil Unity Profiler ne peut pas être attaché aux Release Builds. Par conséquent, vous pouvez surveiller de manière sélective des paramètres importants dans les versions de construction en utilisant les compteurs du Profiler et en les interrogeant à partir d'un script. Par exemple, vous pourriez le faire dans les tests d'intégration continue pour détecter les régressions de performance. Vous pouvez également afficher certaines mesures de performance clés via une interface utilisateur de débogage dans le jeu utilisant l'un des systèmes d'interface utilisateur d'Unity, comme dans le coin inférieur gauche de l'exemple ci-dessous. Veuillez consulter la documentation du Profiler Recorder pour plus d'informations.

Exemple de compteur de profil dans une interface utilisateur de jeu

Si vous souhaitez que les compteurs du Profiler ne soient présents que dans les Builds de développement, vous pouvez les exclure des Builds de version en les enveloppant dans le symbole de script DEVELOPMENT_BUILD, comme décrit dans la documentation sur la compilation conditionnelle.

Premier pas

Nos compteurs Profiler sont disponibles dans le paquet Profiling.Core, publié dans Unity 2021 LTS. Le paquet est fourni avec Unity 2021 LTS mais n'est pas installé par défaut, veuillez donc suivre les instructions d'installation dans la documentation du paquet pour ajouter ce paquet depuis le Gestionnaire de paquets par nom.

Une fois que vous avez le paquet, vous pouvez créer un compteur Profiler, appelé ProfilerCounter ou ProfilerCounterValue dans l'API, et le mettre à jour comme suit.

using UnityEngine;
using Unity.Profiling;

public class CreatureCounter : MonoBehaviour
{
static readonly ProfilerCounterValue<int> k_CreatureCounter = new(ProfilerCategory.Scripts, "Creature Count",
ProfilerMarkerDataUnit.Count, ProfilerCounterOptions.FlushOnEndOfFrame);

void OnEnable()
{
k_CreatureCounter.Value += 1;
}

void OnDisable()
{
k_CreatureCounter.Value -= 1;
}
}
cs

Veuillez consulter la documentation du paquet Profiling.Core pour plus d'informations.

Modules du profileur
Qu'est-ce qu'un module Profiler ?

Un module Profiler présente des informations sur les performances d'une zone ou d'un flux de travail spécifique dans la fenêtre Profiler, comme la mémoire, l'audio ou le rendu. Chaque module Profiler vise à fournir un aperçu du profil de performance de son domaine. Par exemple, le module Memory Profiler présenté ci-dessous affiche sept mesures clés relatives à l'utilisation de la mémoire au fil du temps. En dessous se trouve la section détaillée du module qui montre la distribution de la mémoire dans le cadre sélectionné.

Un module semant la distribution de la mémoire dans le cadre sélectionné
Modules personnalisés du Profiler

Dans Unity 2021 LTS, la fenêtre Profiler peut être personnalisée avec vos propres modules Profiler. Cela vous permet de présenter les mesures de performance de vos propres systèmes directement dans la fenêtre du Profiler. Il offre également la possibilité d'une visualisation personnalisée dans la vue détaillée de votre module, ce qui vous permet de présenter les données de performance de votre système comme vous le souhaitez.

Éditeur de modules de profilage

L'éditeur de modules Profiler est recommandé pour créer rapidement des modules Profiler temporaires pour votre propre usage. Par exemple, vous pouvez l'utiliser pour créer rapidement un module Profiler afin de vérifier un nouveau compteur Profiler. Les modules de profilage créés via l'éditeur de modules de profilage sont locaux à votre éditeur et ne sont pas disponibles pour les autres utilisateurs du projet.

Éditeur de modules de profilage

Pour plus d'informations, veuillez consulter la documentation de l'éditeur de modules.

API du module de profilage

L'API du module Profiler vous permet d'ajouter votre propre module Profiler à la fenêtre Profiler pour tous les utilisateurs d'un projet ou d'un paquet. Lorsqu'un module Profiler est défini dans un projet ou un paquetage à l'aide de cette API, il devient automatiquement disponible dans la fenêtre Profiler pour tous les utilisateurs de ce projet ou paquetage.

Si vous êtes un éditeur de la boutique d'actifs ou un développeur de paquets, vous pouvez désormais distribuer des modules Profiler personnalisés avec votre paquet. Lorsqu'un utilisateur installe votre paquetage, vos modules Profiler seront automatiquement disponibles dans la fenêtre Profiler pour vos utilisateurs. Cela vous permet d'exposer les mesures de performance de votre paquetage directement dans la fenêtre du Profiler.

Plusieurs équipes au sein d'Unity ont déjà utilisé cette API pour distribuer des modules Profiler personnalisés avec leurs paquets, y compris les paquets Netcode for GameObjects, Adaptive Performance, et Mali System Metrics.

Comment l'utiliser

Pour ajouter un module Profiler à l'aide de l'API de module Profiler, créez un script ProfilerModule dans votre projet ou paquetage, comme indiqué ci-dessous.

using Unity.Profiling;
using Unity.Profiling.Editor;

[System.Serializable]
[ProfilerModuleMetadata("Creature Batches")]
public class CreatureBatchesProfilerModule : ProfilerModule
{
static readonly ProfilerCounterDescriptor[]
k_Counters = {
new("Creature Count", ProfilerCategory.Scripts),
new("Batches Count", ProfilerCategory.Render), };

public CreatureBatchesProfilerModule() : base(k_Counters) { }
}
cs

Le module sera affiché automatiquement dans la fenêtre du Profiler pour tous les utilisateurs du projet ou du paquet.

Module dans la fenêtre Profiler

Pour plus d'informations sur l'utilisation de l'API du module Profiler, veuillez consulter le manuel et la documentation de l'API.

L'API du module Profiler inclut la possibilité de dessiner une visualisation personnalisée de vos données de performance pour l'image sélectionnée en utilisant l'un des systèmes d'interface utilisateur de l'éditeur d'Unity, tel que UI Toolkit.

Par exemple, le module Profiler de l'ensemble Adaptive Performance utilise cette API pour présenter des informations détaillées sur les performances dans le cadre sélectionné, ainsi que des informations contextuelles telles que les indicateurs de goulot d'étranglement et d'alerte thermique. Ces indicateurs peuvent aider un utilisateur de l'ensemble Adaptive Performance à voir clairement quand il peut rencontrer un étranglement thermique, par exemple. Vous pouvez utiliser cette API pour présenter une visualisation personnalisée des données de performance de votre module Profiler.

Une API avec visualisation sur mesure des données de performance d'un module Profiler

Pour plus d'informations, veuillez consulter la documentation du manuel et de l'API sur la création d'une vue personnalisée des détails du module de profilage.

Données contextuelles supplémentaires

Il se peut que vous souhaitiez visualiser d'autres données plus complexes dans vos modules Profiler, parallèlement à vos compteurs Profiler. Par exemple, vous pouvez afficher une capture d'écran de la trame en cours dans la vue détaillée de votre module Profiler pour donner plus de contexte aux données de performance, comme illustré ci-dessous.

Vue détaillée du module Profiler avec les données de performance

Pour envoyer des données de trame supplémentaires au Profiler, telles qu'une image, et les récupérer ensuite à partir de la capture du Profiler, vous pouvez utiliser les API de métadonnées de trame, Profiler.EmitFrameMetaData et FrameDataView.GetFrameMetaData.

Si vous disposez de données supplémentaires qui ne doivent être envoyées qu'une seule fois par session de profilage, telles que des données de configuration, vous pouvez utiliser les API de métadonnées de session, Profiler.EmitSessionMetaData et FrameDataView.GetSessionMetaData.

Veuillez consulter la documentation mentionnée ci-dessus pour obtenir des exemples sur la manière et le moment d'utiliser ces fonctionnalités.

Conclusion

Dans ce billet, nous avons abordé la manière d'étendre le Unity Profiler avec vos propres mesures de performance. Nous avons examiné la possibilité d'ajouter des mesures personnalisées avec nos nouveaux compteurs Profiler, disponibles dans le fichier Profiling.Core . Ensuite, nous avons exploré l'ajout de modules Profiler personnalisés à la fenêtre Profiler à l'aide de l'éditeur de modules Profiler et de l'API de modules Profiler. Enfin, nous avons abordé la question de l'envoi de données complexes supplémentaires au Profiler, telles qu'une image, afin de fournir davantage d'informations contextuelles.

Nous espérons que ces fonctionnalités d'extensibilité du Profiler ajoutées dans Unity 2021 LTS vous permettront de mieux mesurer et comprendre l'histoire unique des performances de votre application. N'hésitez pas à contacter l'équipe via notre page de forum. Nous serions ravis de connaître votre avis et d'apprendre comment nous pouvons améliorer l'outil de performance d'Unity pour vous.