L'analyseur de profil est l'une des nombreuses fonctionnalités abordées dans l'e-book Guide ultime pour le profilage des jeux Unity. Ce guide de plus de 70 pages rassemble des connaissances avancées et des conseils d'experts Unity externes et internes sur la manière de profiler une application dans Unity, de gérer sa mémoire et d'optimiser sa consommation d'énergie du début à la fin.
Présentation de l'analyseur de profil
Vous voulez savoir où améliorer les performances ? Vous souhaitez comparer les performances avant et après une modification ? Connaissez-vous l'impact qu'aura une mise à jour de Unity sur votre jeu ? L'analyseur de profil vous aidera à répondre à ce genre de questions.
Alors que le Unity Profiler standard vous permet d'effectuer une analyse sur une seule image, le Profile Analyzer peut agréger et visualiser les données des marqueurs de profilage capturées à partir d'un ensemble d'images Unity Profiler.
L'analyseur de profil vous aide à déterminer où concentrer vos efforts. Il vous permet de comparer deux captures de profilage de performance Unity côte à côte et d'inspecter les impacts de vos changements.
L'analyseur de profil complète l'analyse d'image unique déjà disponible dans le profileur Unity. Il agrège et visualise les données des images et des marqueurs d'une série d'images Unity Profiler pour vous aider à voir des modèles de performance de haut niveau en fonction du temps sur de nombreuses images.
L'analyseur de profil effectue une analyse des performances de l'unité centrale sur plusieurs images de la session Profiler en cours ou de captures enregistrées précédemment. L'outil est accompagné de statistiques et de visualisations qui vous aideront à analyser rapidement les informations stockées dans les captures. Sa fonction de filtrage complet vous permet également d'approfondir les sections qui vous intéressent. Vous pouvez l'utiliser pour comparer deux ensembles de données ou exporter des données brutes pour les analyser avec d'autres outils.
Vous pouvez installer l'analyseur de profil via Fenêtre > Gestionnaire de paquets.
Ces conseils de profilage peuvent vous aider à démarrer avec l'analyseur de profil :
Obtenir une capture représentative et reproductible.
Fermez toutes les autres applications. Vous pouvez utiliser Profiler.logFile dans vos scripts C# pour écrire les données du profil directement à partir du jeu en cours, ce qui signifie que vous n'avez pas besoin que l'éditeur soit ouvert. Il écrit un fichier .raw que vous pouvez ensuite charger dans le Unity Profiler.
Désactivez toutes les fonctions de mise à l'échelle ou d'augmentation des performances matérielles du processeur afin de ne pas modifier votre fréquence d'horloge, comme Intel SpeedStep ou AMD Precision Boost.
L'analyseur de profil peut vous aider à répondre aux questions d'optimisation et de performance qui peuvent se poser au cours du cycle de développement de votre projet. Par exemple, dans une capture de jeu de 300 images ou une séquence de chargement de 20 secondes :
Quels sont les coûts d'unité centrale les plus importants pour les threads principaux et les threads de rendu ?
Quel est le coût moyen/médian/total de chacun de ces marqueurs ?
Utilisez l'analyseur de profil pour approfondir les caractéristiques de performance de votre code exécuté sur plusieurs images ou même sur différentes captures de session pour une analyse avant et après.
Autres conseils pour comparer les données avec l'analyseur de profil :
Pour approfondir les scripts utilisateur (en ignorant les niveaux de l'API Unity Engine), sélectionnez un niveau de profondeur de 4 (les niveaux de profondeur affichent des informations sur l'emplacement des marqueurs dans la hiérarchie). Après avoir filtré à ce niveau et regardé le Profiler en mode Timeline, vous pouvez corréler la profondeur de la pile d'appels pour faire une sélection ici - les scripts Monobehaviour apparaîtront en bleu et se trouveront au quatrième niveau vers le bas. Il s'agit d'un moyen rapide de voir si votre logique spécifique et vos scripts de jeu sont taxés par eux-mêmes sans aucun autre "bruit".
Filtrez les données de la même manière pour d'autres zones du moteur Unity, comme les animateurs ou la physique du moteur, en utilisant un niveau de pile de profondeur de 3.
Dans la partie droite de la section Résumé du cadre, vous trouverez l'histogramme de la plage de performances de la méthode mise en évidence. Survolez le numéro de l'image maximale (l'image exacte dans laquelle la synchronisation maximale a été trouvée) pour obtenir un lien cliquable permettant d'afficher la sélection d'images dans le Unity Profiler. Utilisez cette vue pour analyser d'autres facteurs susceptibles de contribuer à la durée maximale élevée de la trame.
Si vous souhaitez voir l'impact de l'appel d'une fonction sur les performances, utilisez la méthode Unity Profiler ou Profiler.logFile pour capturer vos données. Si vous utilisez le profileur Unity, vous pouvez cliquer sur le bouton "Tirer les données" pour les charger dans l'analyseur de profil. Sinon, vous pouvez charger une capture de données précédemment sauvegardée à partir d'un fichier.
Dès que vous faites cela, l'analyse démarre immédiatement et les données remplissent le graphique de la période de référence. Remarquez les barres blanches et cyan dans le graphique. Les barres blanches représentent les durées des images, et les barres cyan représentent le marqueur actuellement sélectionné. Cela vous permet de comparer la contribution du marqueur sélectionné à la durée totale de la trame.
Vous pouvez rechercher des marqueurs à l'aide de filtres. Les détails du marqueur se mettent automatiquement à jour afin de tenir compte du sous-ensemble sélectionné. Le nombre d'occurrences sera indiqué dans la colonne Count. Le graphique de frame time affiche le marqueur en surbrillance. Lorsque vous sélectionnez un marqueur, le panneau de détails Résumé du marqueur se met également à jour pour afficher les statistiques d'analyse pour ce marqueur particulier.
Lorsque vous analysez les performances, vous devez vous assurer que les données que vous examinez sont représentatives. Si vos données sont bruyantes (c'est-à-dire non pertinentes, excessives ou corrompues), vous pouvez facilement vérifier que vous avez sélectionné une image moyenne dans Frame Summary en haut à droite. Cliquez simplement sur l'image Median et le Profiler affichera l'analyse correspondante. Vous pouvez également cliquer avec le bouton droit de la souris sur le graphique de la durée de la trame et sélectionner Sélectionner la trame médiane.
Vous pouvez également limiter votre analyse à une sélection de cadres. Toutes les statistiques que vous voyez seront mises à jour pour refléter la sélection spécifique.
Plutôt que de se baser sur un seul point de données provenant d'une seule image, vous pouvez analyser plusieurs points de données en sélectionnant un groupe d'images représentatives. Si vous cliquez avec le bouton droit de la souris sur le graphique de la durée des trames et que vous ordonnez la durée des trames, vous pouvez alors sélectionner un ensemble de trames autour de la trame médiane pour obtenir un échantillon représentatif qui atténue une partie du bruit dans vos données.
L'analyseur de profil peut aider à déterminer la différence de performance lors de l'application d'un paramètre à l'échelle du projet, tel que l'activation des tâches graphiques. Pour utiliser cette fonctionnalité, effectuez une capture de référence, puis effectuez-en une autre après les modifications. Lancez votre jeu, échantillonnez-le avec l'Unity Profiler, transférez cette capture dans l'analyseur de profil, puis transférez la seconde.
Vous pouvez voir les résultats des deux captures côte à côte dans la section Résumé du cadre.
Pour vous assurer que vos performances ne sont pas entravées, vérifiez le marqueur Gfx.WaitForPresentOnGfxThread sur le Main Thread. Trouvez-le en tapant Gfx.WaitForPresentOnGfxThread dans la zone de filtre. Si la valeur médiane de ce marqueur n'est pas nulle, l'unité centrale attend que le processeur graphique termine son activité avant de pouvoir continuer.
Vous pouvez regarder ce marqueur dans le graphique de la durée de la trame pour voir dans quelle mesure il contribue à la durée de la trame. Si le CPU attend le GPU, vous êtes probablement lié au GPU. Confirmez ce scénario en examinant le profil de votre fil de rendu pour vérifier la présence des marqueurs Gfx.PresentFrame ou <GraphicsAPIName>.WaitForLastPresent. Consultez notre Guide ultime pour le profilage des jeux Unity pour obtenir de l'aide supplémentaire, ou jetez un œil aux outils de profilage du GPU pour voir où vous pourriez effectuer des optimisations.
Vous pouvez gérer vos données à partir de la section supérieure de la fenêtre de l'analyseur de profil. À partir de là, vous pouvez ouvrir le Unity Profiler et "tirer des données" du Unity Profiler ou charger un fichier précédemment sauvegardé (toute version de Unity).
Une fois que vous avez chargé vos données, vous les verrez dans le graphique de la durée de la trame. Il s'agit d'une région interactive dans laquelle vous pouvez sélectionner une série d'échantillons ; toutes les informations résumées dans le tableau Détails du marqueur seront automatiquement mises à jour pour refléter votre sélection. Vous pouvez accéder à des options de sélection avancées en cliquant avec le bouton droit de la souris sur le graphique de la période de référence.
Cliquez sur le bouton Enregistrer pour enregistrer vos données d'analyse dans un fichier .pdata. Notez qu'il existe deux types de format de fichier - un fichier d'enregistrement de l'analyseur de profil (.pdata) et un fichier d'enregistrement du profileur (.data ou .raw). Il est recommandé d'enregistrer les deux fichiers dans le même répertoire.
Le résumé des trames (à droite de la fenêtre de l'analyseur de profil) affiche des informations sur la durée des trames, y compris le minimum, le maximum et la médiane, avec des boutons qui vous permettent d'accéder à des trames spécifiques dans le profileur. Cette zone affiche également l'histogramme de distribution de la durée de la trame ainsi qu'un graphique en boîte et en moustache.
Détails du marqueur
Dans cette section, vous trouverez le tableau des données de marquage du Profiler, y compris toutes les profondeurs de pile. Les données de Unity Profiler pour tous les marqueurs sont agrégées pour fournir la médiane et d'autres temps de trame, qui sont également affichés dans ce tableau. Il est également possible de filtrer ces détails pour obtenir des "tranches" spécifiques de profondeur de pile.
Résumé du marqueur
La zone de résumé des marqueurs située à droite contient des informations agrégées sur les marqueurs sélectionnés et leur contribution à la durée de la trame. Ces informations sont également présentées visuellement sous la forme d'un histogramme et d'une boîte et d'un diagramme à moustaches.
Au bas du résumé, vous trouverez les temps minimum et maximum pour les instances de marqueurs individuels dans l'ensemble des données agrégées.
Par nom
Vous pouvez saisir une sous-chaîne ou une collection de sous-chaînes pour limiter votre examen aux marqueurs portant un nom spécifique. Si le nom contient des espaces, veillez à mettre des guillemets autour de la sous-chaîne.
Vous pouvez exclure les marqueurs qui ne vous intéressent pas. Par exemple, vous pouvez exclure les marqueurs basés sur le temps d'inactivité dans les emplois ou les marqueurs qui font partie du Profiler lui-même.
Vous pouvez également remplir les filtres de marqueurs en cliquant avec le bouton droit de la souris sur un marqueur intéressant dans le tableau et en l'ajoutant à la sélection de filtres.
Supprimer le filtre
Vous pouvez également choisir de masquer un marqueur et tous les échantillons d'enfants sous ces marqueurs dans les données, à la fois dans les tableaux et dans le graphique. Cette option permet principalement de supprimer le temps d'attente VSync sur les appareils iOS et Android. Deux marqueurs courants sont déjà préconfigurés et peuvent être choisis dans la liste déroulante intitulée Remove : Aucun. Ces marqueurs sont appelés FPS Wait et Present Wait. Pour les cas d'utilisation plus avancés, vous pouvez supprimer les marqueurs en sélectionnant et en choisissant l'option Supprimer le marqueur dans le menu contextuel du clic droit.
Vous ne pouvez supprimer qu'un seul marqueur à la fois ; vous pouvez ajouter un marqueur en choisissant Aucun dans le menu déroulant.
Fils
Vous pouvez choisir d'afficher les données pour des threads de travail spécifiques. Pour les voir tous regroupés, cochez la case "Tous" en haut de la fenêtre contextuelle de sélection des fils.
Profondeur
Nous recommandons d'examiner la profondeur 3 car la plupart des sous-systèmes Unity ont des marqueurs de haut niveau à ce niveau. Vous connaissez ainsi la contribution des principaux sous-systèmes tels que le rendu, l'animation et la physique. (La profondeur 3 convient aux dernières versions de Unity. Pour les versions plus anciennes, il est possible que vous souhaitiez passer à une autre profondeur).
Parent
Pour filtrer par parent, cliquez avec le bouton droit de la souris sur le marqueur dans le tableau des marqueurs et sélectionnez Définir comme filtre de marqueur parent.
Type d'analyse
Par défaut, l'analyseur de profil affiche le temps total pour les marqueurs, mais vous pouvez changer pour le temps propre. Le temps libre est utile si vous souhaitez examiner les détails pour voir où vous passez réellement votre temps.
Unités
L'unité par défaut est la milliseconde, mais pour des durées plus courtes, vous pouvez passer à la microseconde.
Cette partie de la fenêtre affiche les 10 premiers marqueurs pour les filtres que vous avez sélectionnés. La meilleure façon d'utiliser cet outil est de sélectionner le fil principal et le temps total pour le type d'analyse, y compris les enfants à la profondeur 3, afin d'examiner les sous-systèmes d'unité. Cela vous donnera le ratio de contribution pour chacun de ces systèmes clés, comme le rendu par rapport à la physique comparée à la durée d'animation.
Dans la vue Comparaison, utilisez le menu déroulant Ratio pour ajuster la façon dont l'analyseur de profil dessine les marqueurs l'un par rapport à l'autre :
Normalisé affiche les deux ensembles de données par rapport à leur propre temps à la profondeur sélectionnée.
Le plus long affiche la différence absolue entre les deux séries à la profondeur sélectionnée.
Pour des rapports et des analyses plus poussés, vous pouvez survoler la barre de données pour voir les pourcentages et les mesures exacts.
En haut de la fenêtre de l'analyseur de profil, vous pouvez passer à l'onglet Comparer pour sélectionner deux ensembles de données à analyser. Un ensemble de données s'affiche en bleu, l'autre en orange. Vous pouvez également choisir de comparer deux sous-régions d'un même ensemble de données, par exemple pour comparer vos images médianes à vos images aberrantes.
Le tableau de comparaison des marqueurs représente visuellement les données en bleu et en orange, ce qui vous permet de vérifier rapidement lequel de vos deux ensembles de données est le plus lent dans certaines zones.
Si le marqueur est absent de l'une des analyses, un tiret apparaît dans cette colonne. Cela peut se produire si le marqueur a été renommé, par exemple si vous utilisez différentes versions de Unity.
N'oubliez pas que vous pouvez exporter les données de l'analyseur de profil au format CSV pour un traitement personnalisé ultérieur. Vous pouvez exporter le contenu de la table des marqueurs, le graphique de la durée de la trame, le tableau de comparaison ou une comparaison des graphiques de la durée de la trame.
Si vous avez des questions sur l'analyseur de profil, le profileur ou sur la manière d'utiliser leurs fonctionnalités spécifiques pour votre projet, participez aux discussions sur les forums.
En profilant et en améliorant les performances de votre jeu sur un large éventail de plates-formes et d'appareils, vous pouvez mieux planifier votre succès et élargir considérablement votre base de joueurs.
Comme mentionné au début de cet article, l'e-book Ultimate guide to profiling Unity games (Guide ultime pour profiler les jeux Unity) fournit beaucoup plus d'instructions sur le profilage de vos projets Unity.
Vous pouvez également regarder cette session de Unite Copenhagen. Il date de 2019 mais fournit toujours de bons conseils sur l'analyseur de profil.
Enfin, vous trouverez tous les guides et articles avancés d'Unity dans le hub des meilleures pratiques.