Le MicroProfiler est un outil d'optimisation disponible dans Roblox Studio et le client Roblox qui fournit des informations de temps détaillées pour les tâches Scheduled Tasks appelées tags .
- Pour une liste de tâches courantes, référez-vous à la Référence de balise.
- Pour un exemple de l'utilisation du MicroProfiler pour identifier un problème de performance, voir le MicroProfiler Walkthrough.
MicroProfiler basiques
Pour ouvrir le MicroProfiler, appuyez sur CtrlAltF6 ( ⌘1> ⌥1> 3> F6 3> ) dans Studio ou le client. Vous pouvez également utiliser le menu des paramètres dans le client.
Lorsqu'il est ouvert, une barre de menu est visible au sommet de la fenêtre de jeu3D. Dans le mode par défaut, un graphique de bar déplaçant montre le temps consacré à chaque cadre du calendrier des tâches.
Les barres devraient généralement être au milieu du graphique, mais vous pourriez voir des pointes soudaines (augmentations rapides de la valeur). Les pointes indiquent que plus de temps a été nécessaire pour exécuter certaines tâches, généralement en raison d'un travail accru. Par instance, la création de beaucoup de parties en mouvement nécessite plus de travail de la simulation physique, ce qui prend alors plus de temps pour traiter les mouvements et les contacts des parties. L'image suivante montre un exemple d'une pique :
Pour暂停录像的框架, appuyez sur CtrlP ( ⌘P ) ou cliquez sur 2> Pause2> dans la barre de menu. Pendant暂停录像, une chronologie apparaît et vous pouvez naviguer dans les cadres en cliquant ou en faisant glisser sur le graph.
Pour un résumé complet des différentes vues et comment naviguer dans l'interface MicroProfiler, voir MicroProfiler Modes .
Sujets
Comme de nombreux programmes, Roblox utilise plusieurs colonnes pour exécuter plusieurs séquences de tâches à la fois. Dans le mode détaillé MicroProfiler >, vous pouvez voir les étiquettes pour chaque colonne sur la gauche.
Il y a trois types de fil d'exécution principaux :
Main/Render : Peut-être maladroitement, s'exécute sur le CPU. Traite les entrées, Humanoids, les animations/tweening, la propriété physique, le son et l'attente de script de réinitialisation. Mise à jour également les interfaces Studio et coordonne les autres threads.
Ouvrier ("Ouvrier RBX": Aide le filtre principal avec du réseau, de la physique et de la recherche d'Recherche d'itinéraires. En raison du nombre de cœurs dans les PC modernes, vous avez probablement beaucoup de fils d'ouvrier.
Rendre ("GPU") : Suit une logique "prépare, exécute, présente". Communique avec la unité de traitement graphique (GPU) du appareil.
- Préparez-vous : Les informations du fil principal sont utilisées pour mettre à jour les modèles de rendu.
- Exécutez des commandes d'affichage, y compris des interfaces 2D.
- Présent : Synchronisation avec leGPU.
Profilage personnalisé
Si vos scripts exécutent des tâches complexes, vous pouvez profiler des parties critiques du code pour vous assurer qu'elles ne prennent pas trop de temps. Wrap code in debug.profilebegin() et debug.profileend() pour tout ce qui est fait entre ces appels de fonction et créer une étiquette sur la MicroProfiler timeline.
HardWorkScript
debug.profilebegin("Hard Work")-- Voici où le code à profiler devrait êtredebug.profileend()
Il y a une quantité limitée de mémoire disponible pour les étiquettes MicroProfiler. Si cette mémoire se termine, les étiquettes de profilage personnalisé peuvent ne pas apparaître comme un nom significatif dans le chronomètre. Utilisez moins d'étiquettes pour éviter ce problème. Si vous n'avez plus besoin de profiler une section de votre code, commentez ou supprimez les appels à ces fonctions.
Exemple
L'exemple de code ci-dessous connecte une fonction d'échantillon à l'événement RunService.PreSimulation, qui s'exécute chaque cadre. Tout ce qui est fait ceci doit s'exécuter aussi efficacement que possible, donc cette fonction est un bon candidat pour le profilage.
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard Work")
-- Exemple de travail acharné : échanger deux variables 200 000 fois
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)
Lorsque vous exécutez l'expérience et que vous arrêtez le MicroProfiler ( CtrlP ou ⌘0> P0>), la balise personnalisée est visible sous l'étiquette 2> gameStepped2>.
À partir de sa durée sur la timeline, vous pouvez savoir que la fonction utilise beaucoup de temps de traitement par rapport à d'autres opérations.
Enregistrement des données de cadre
Si vous souhaitez enregistrer un ensemble de données de cadre pour une révision ultérieure (ou partager avec quelqu'un d'autre), utilisez le Éjecter menu. Le moteur enregistre les données de cadre dans un fichier nommé microprofile-<date>-<time>.html dans le dossier des journaux Roblox.
- Sous Windows, vérifiez %LOCALAPPDATA%\Roblox\logs .
- Sur macOS, check ~/Library/Logs/Roblox .
Ces fichiers HTML utilisent le même interface utilisateur basée sur le web que les Connexion en direct pour les appareils mobiles et dumps du serveur.
Profilage sur les appareils mobiles
Pour accéder au MicroProfiler depuis le client mobile, votre appareil mobile doit être connecté au même réseau que votre machine d' développement.
Activer le MicroProfiler dans le Menu Settings du appareil. Après avoir activé, le menu affiche une adresse IP et un port.
Par exemple, dans la capture d'écran ci-dessus, l'adresse est 192.168.1.166 et le port est 1338 . De l'ordinateur sur le même réseau, naviguez à http://192.168.1.166:1338 pour une version web de l'interface utilisateur Micro
Profilage du serveur
En plus du client standard MicroProfiler, vous pouvez prendre des dumps rapides de l'activité du serveur en utilisant le serveur MicroProfiler.
Dans une expérience pour laquelle vous avez des permissions d'édition, ouvrez la console de développeur avec CtrlAltF9 .
Dans le menu déroulant, sélectionnez MicroProfiler .
Dans la section profilateur du serveur , spécifiez le nombre de cadres par seconde (maximum 60) et le nombre de secondes pour profiler (maximum 4).
Cliquez sur Commencer l'enregistrement .
Après quelques secondes, le développeur côté fournit le chemin au fichier, qui est le même chemin qu'un dump standard .
Utiliser l'interface Web
Dans l'général, l'interface web MicroProfiler fonctionne comme mode détaillé, mais il a quelques fonctionnalités supplémentaires :
En plus de filtrer par groupe, vous pouvez filtrer par thread.
Utilisez CtrlF / ⌘F pour sauter à l'occurrence d'une tâche qui prend le plus de temps dans le vidage. Par exemple, 2> computeLightingPerform2> s'exécute dans chaque frame. Si vous le recherchez dans un dump avec 128 frameworks, vous pouvez sauter dans le frame où il a pris le plus long
Utilisez le X-Ray menu pour activer ou désactiver la couleur du codage pour l'allocation de la mémoire.
- Les cadres plus légers dans le graphique de barre principale indiquent une meilleure allocation de mémoire.
- Les parties plus légères de la barre d'aperçu et les étiquettes plus légères sur la timeline indiquent des parties de la fenêtre avec une plus grande allocation de mémoire.
- En mode X-ray, appuyez sur C pour montrer la taille totale des allouements de mémoire plutôt que le nombre d'allouements.
Utilisez le Exportez le menu pour exporter un graphique de flamme CPU ou mémoire, une visualisation spécialisée qui agrège tous les callstacks inclus dans le vidage. Le graphique de flamme est spécialement utile pour identifier les tâches qui ne prennent pas beaucoup de temps à s'exécuter (et sont donc difficiles à remarquer), mais s'exécutez fréquemment de sorte que leur temps d'exécution devienne significatif.
Faites glisser et déposez un deuxième fichier de données dans l'interface web pour générer un graphique de flamme de différents, ce qui peut vous aider à identifier les améliorations ou les régressions de votre expérience au fil du temps. Cliquez sur combiner et comparer pour exporter un nouveau fichier HTML.
Le graphique de flamme de différence met en évidence le décharge (gauche ou droite) qui consomme plus de CPU ou de mémoire, avec des couleurs plus vives indiquant une plus grande différence.