La liste suivante présente des balises courantes dans le MicroProfiler, regroupées par catégorie. Les balises sont également appelées tâches, minuteries, portées, processus et étiquettes. Quel que soit le nom, elles représentent une unité de travail.
Comprendre ces balises peut vous aider à identifier le code problématique dans votre jeu. Les tableaux contiennent des étiquettes de balises, des descriptions et des conseils pour améliorer les performances et optimiser votre jeu.
Sommeil
Lorsque les threads n'effectuent pas activement de tâches, ils entrent dans un état de sommeil, avec des balises pour indiquer combien de temps le thread a dormi. À tout moment, il est extrêmement courant que la plupart des threads de travail soient dans un état de sommeil.
Navigation
| Étiquette | Description | Conseils de performance |
|---|---|---|
| rasterizeTile | Met à jour les tuiles de navigation nécessaires pour une demande de recherche de chemin, généralement suivie par computePath qui nécessite que ces tuiles soient à jour. Suit NavigationJob/preprocess sur le thread principal. | Réduisez le nombre d'invalidations de tuiles de recherche de chemin, car cela nécessite de recalculer ces chemins. Cela est causé par le mouvement de parties non navigables. |
| computePath | Calcule les chemins, généralement après rasterizeTile. | Réduisez le nombre et les étendues mondiales des appels Path:ComputeAsync(). Essayez de réutiliser les chemins pour plusieurs agents s'ils sont censés commencer/terminer à des emplacements à peu près similaires. |
| preprocess/getPrimitivesOverlapping | Collecte la géométrie du monde pour chaque tuile de recherche de chemin et planifie les tâches de rasterisation à exécuter par le thread de recherche de chemin. | Réduisez le nombre de parties. |
Animation et humanoïdes
| Étiquette | Description | Conseils de performance |
|---|---|---|
| Simulation/gameStepped | Traitement des objets spécifiques au jeu tels que Humanoids, Animations et des rappels de battement de cœur. | Voir les étiquettes gameStepped ci-dessous. |
| Simulation/gameStepped/stepHumanoid | Changements d'état et mouvement de Humanoid. | Réduisez le nombre de Humanoids ou désactivez les états Humanoid sur les PNJ qui n'en ont pas besoin, tels que Climbing ou Swimming. Réduisez les rappels à Humanoid.StateChanged ou les changements d'état tels que Running ou Died. |
| Simulation/gameStepped/stepAnimation | Animators avancera dans les animations actuellement jouées. | Réduisez le nombre de Animators ou d'articulations animées pour diminuer la charge de travail de cette étape. Réduisez le nombre de rappels aux événements d'animation tels que AnimationTrack.KeyframeReached ou AnimationTrack.Ended. |
| Simulation/gameStepped/RunService.Stepped | Exécute des fonctions connectées à l'événement RunService.Stepped. | Réduisez le nombre ou la charge de travail des fonctions connectées à cet événement. Envisagez de retarder ou de remplacer des calculs coûteux ou de répartir le calcul sur plusieurs images. |
Audio
| Étiquette | Description | Conseils de performance |
|---|---|---|
| Sound | Traite la simulation acoustique et met à jour les sons en lecture active. | Voir les étiquettes Sound ci-dessous. |
| Sound/stepInstances | Met à jour le volume des sons actifs dans l'espace de travail. | Réduisez le nombre de sons en lecture active. |
Réseau
| Étiquette | Description | Conseils de performance |
|---|---|---|
| Net PacketReceive | Reçoit des paquets réseau. Si de nombreux objets ou événements sont répliqués, cette étape prend plus de temps. | Répliquez moins d'objets ou d'événements. |
| Replicator/ProcessPackets | Traite le contenu des paquets réseau, tels que le mouvement, les invocations d'événements et les changements de propriétés. | Réduisez le nombre ou la taille des objets répliqués, ou faites-le par étapes incrémentales. Peut augmenter si la taille de la carte augmente, car les cartes plus grandes ont tendance à avoir plus d'activité globale. |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | Envoie des données sur l'activité dans le jeu. | Réduisez le nombre d'objets en mouvement et/ou de touches. Voir les sections suivantes. |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | Envoie des régions spécifiques aux clients spécifiques dans la fonction de streaming. | Réduisez les rayons de streaming minimum et cible. |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | Envoie des changements de propriétés, des invocations d'événements distants, des changements d'état de Humanoid, des changements d'état d'animation et la réplication de nouvelles instances. | Réduisez le nombre de changements répliqués dans le modèle de données. |
| Replicator SendCluster | Envoie des données Terrain aux clients. | Réduisez le nombre ou la taille des changements de terrain. |
| ModelCompleteness Mega Job | Serveur uniquement : la complétude est un concept interne. Lorsque les modèles sont complètement envoyés, des événements de complétude de modèle sont envoyés. | Ajoutez ou retirez moins d'instances. |
| deserializePacket | Traitement de paquets réseau de bas niveau. Prépare pour Replicator/ProcessPackets. | Envoyez moins ou des mises à jour plus petites. |
Rendu
| Étiquette | Description | Conseils de performance |
|---|---|---|
| Prepare | Les informations sont collectées à partir du thread principal et mettent à jour diverses structures de données utilisées pour le rendu. | Voir les étiquettes Prepare ci-dessous. |
| Prepare/Pass3dAdorn | Gère le rendu de divers ornements d'objets, tels que des étiquettes de texte au-dessus des objets. Pour les étiquettes Humanoid avec occlusion, cette étape inclut le raycasting pour déterminer si de tels objets sont visibles. Cela inclut des parties non transparentes pour faciliter les visualisations de débogage. | Réduisez le nombre d'objets ornés visibles, tels que BillboardGuis, les étiquettes de nom/santé Humanoid, etc. Réduisez le nombre de parties visibles. |
| Prepare/Pass2d | Prépare le rendu de l'interface utilisateur 2D (à la fois pour le joueur et l'interface utilisateur Roblox). | Réduisez le nombre ou la complexité des éléments de l'interface utilisateur. |
| Prepare/UpdatePrepare/updateInvalidParts | Met à jour les parties qui ont eu une propriété modifiée ou ajoutée. | Réduisez le nombre de changements de propriétés dans le monde. Si un script met à jour un grand ensemble de propriétés d'objets, décomposez-le sur plusieurs images. |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | Prépare les géométries "FastCluster" utilisées pour rendre Humanoids et MeshParts skinnés. Les étiquettes spécifient le nombre de parties, de sommets et la taille des sommets. | Réduisez les changements visuels des modèles avec Humanoids ou MeshParts skinnés. |
| Prepare/UpdatePrepare/updateDynamicParts | Prépare Beams, ParticleEmitters et Humanoids pour le rendu. | Réduisez le nombre de Beams, ParticleEmitters et Humanoids visibles. |
| Prepare/UpdatePrepare/updateInstancedClusters | Met à jour la géométrie qui utilise le rendu instancié, comme les parties. Les étiquettes Clusters et Instances indiquent le nombre mis à jour. | Réduisez le travail qui met à jour implicitement la boîte englobante de la partie, comme BasePart.CFrame, BasePart.Size ou Motor6D.Transform. Des mises à jour de propriétés créatives telles que Bone.Transform peuvent aider. |
| Perform | Lorsque des commandes de rendu réelles sont créées et émises. | Voir les étiquettes Perform ci-dessous. |
| Perform/fillGuiVertices | Remplit les tampons avec des sommets d'interface utilisateur pour préparer le rendu. L'étiquette gui count indique le nombre de LayerCollectors visibles dans l'image. | Si le coût est élevé, réduisez le nombre, la densité et l'espace occupé par les éléments de l'interface utilisateur. S'il y a trop d'étiquettes Process GuiEffect, envisagez de réduire l'utilisation de UIGradient et UICorner sur les étiquettes de texte. |
| Perform/Scene/queryFrustumOrdered | Applique le culling de frustum afin que les objets non visibles ne soient pas rendus. | Si le coût est élevé, cela signifie qu'il y a beaucoup d'éléments. Envisagez d'utiliser des maillages plus grands où un seul maillage a plus de détails par rapport à de nombreuses petites pièces individuelles. |
| Perform/Scene/computeLightingPerform | Calcul de l'éclairage près de la caméra. | Manipulez le nombre de sources lumineuses ou déplacez moins la caméra pour réduire le temps nécessaire pour recalculer l'éclairage. |
| Perform/Scene/computeLightingPerform/LightGridCPU | Met à jour l'éclairage voxel, qui est utilisé à des niveaux de qualité inférieurs. | Si la mise à jour de l'occupation des chunks prend trop de temps, envisagez d'utiliser une géométrie de résolution inférieure, de réduire le nombre de parties ou d'ancrer les parties. Si les autres étiquettes prennent trop de temps, envisagez de réduire le nombre de lumières et d'utiliser une géométrie ne projetant pas d'ombre pour les objets qui se déplacent et invalident l'occupation. |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | Met à jour les cartes d'ombre. Non effectué à des niveaux de qualité inférieurs à 4. | Réduisez le nombre de lumières. Vous pouvez également utiliser Light.Shadows et BasePart.CastShadow pour désactiver la projection d'ombre sur des instances moins importantes. Voir Améliorer les performances. |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO, and SSAOApply | Rendu de post-traitement. | Réduisez le nombre d'effets de post-traitement. En général, cela n'est pas significatif. |
| Perform/Scene/UI | Rendu de l'interface utilisateur. Dans Id_Screen, il y a une étiquette avec le nombre de lots, de matériaux et de triangles utilisés. | Réduisez le nombre d'éléments d'interface utilisateur visibles. L'utilisation de CanvasGroups peut aider au détriment d'une utilisation accrue de la mémoire. |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | Met à jour la position et les limites des particules. | Réduisez le nombre de ParticleEmitters, les taux d'émission, les durées de vie, etc. Limitez le mouvement des émetteurs. |
| Scene/Id_Opaque, RenderView/Id_Opaque | Parties dans la scène avec une transparence globale de 0.01 ou inférieure. | Réduisez l'utilisation et la densité des parties. |
| Scene/Id_Transparent, RenderView/Id_Transparent | Parties dans la scène avec une transparence globale entre 0.01 et 1. | Réduisez l'utilisation de la transparence partielle. |
| Scene/Id_Decals, RenderView/Id_Decals | Décalcomanies dans la scène. | Réduisez l'utilisation de décalcomanies sur des maillages complexes. |
| Scene/Shadows | Recalcul des ombres dans la scène, généralement effectué sur des scènes dynamiques et un gameplay typique. Les parties, quelle que soit leur transparence, projettent des ombres en supposant qu'elles contiennent des décalcomanies. Non effectué à des niveaux de qualité inférieurs à 4. | Si cette étape prend trop de temps, envisagez de désactiver BasePart.CastShadow pour des maillages complexes, des parties avec une haute transparence partielle et des instances moins importantes. Les parties entièrement transparentes qui n'ont pas de décalcomanies ou qui n'ont pas besoin d'ombres de décalcomanies devraient avoir BasePart.CastShadow désactivé. Voir Améliorer les performances. |
| Perform/Present | Transmet au thread GPU pour exécuter les commandes de rendu. | Réduisez la complexité de la scène en général. Si cette étape prend beaucoup de temps, vous pourriez être limité par le GPU. |
| Perform/Present/waitUntilCompleted | Attend que le GPU termine le rendu de l'image précédente. | Si cela se produit généralement beaucoup, alors le nombre de choses rendues est trop élevé. Le gestionnaire de fréquence d'images aide à équilibrer cela, mais si cela reste élevé, essayez de suivre les conseils de performance des étiquettes Scene individuelles. |
| LoadImage | Traite les images dans un format que le moteur peut utiliser. | Réduisez l'utilisation d'images volumineuses. |
Scripts
| Étiquette | Description | Conseils de performance |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | Exécution de fonctions liées à l'étape de rendu via RunService:BindToRenderStep(). | Assurez-vous que les fonctions connectées à cet événement effectuent le moins de travail possible. |
| Render/PreRender/RunService.RenderStepped | Exécute des fonctions connectées à l'événement RunService.RenderStepped. | Assurez-vous que les fonctions connectées à cet événement effectuent le moins de travail possible. |
| WaitingHybridScriptJob | Reprend les scripts en attente utilisant Instance:WaitForChild() ou Globals.Roblox.wait(). Généralement effectué 30 fois par seconde. Cette étape a un budget de temps d'exécution pour exécuter les scripts en attente. | Si vous avez trop de scripts en attente ou des scripts avec un long temps d'exécution avant de céder, cette étape est limitée et attend plus longtemps avant de pouvoir s'exécuter à nouveau. Réduisez le nombre de fonctions liées ou de calculs longs dans cette étape. |
| GC | Cycle de collecte des ordures de Luau. | Regroupez les tables et autres objets collectables ou essayez de réduire la création de tables temporaires. |
| Heartbeat/RunService.Heartbeat | Exécute des fonctions connectées à l'événement RunService.Heartbeat. | Réduisez le nombre ou la charge de travail des fonctions connectées à cet événement. Envisagez de retarder ou de remplacer des calculs coûteux ou de répartir le calcul sur plusieurs images. |
Simulation
| Étiquette | Description | Conseils de performance |
|---|---|---|
| Distributed Physics Ownership | Détermine si le serveur ou un client a l'autorité sur certaines instances telles que des parties. | Réduisez le nombre de parties qui changent fréquemment de propriété réseau, en particulier celles avec une interaction commune. |
| Simulation/assemble | Met à jour un arbre d'objets connectés (assemblages) utilisés par le moteur physique. | Réduisez le nombre de joints créés ou détruits. |
| Simulation/physicsSteppedTotal/physicsStepped | Exécute la simulation physique. | Réduisez le nombre et la complexité des corps simulés physiquement. |
| Simulation/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | Met à jour les îles de simulation, arrangeant les parties selon la propriété réseau, la simulation locale. Les îles sont des groupes de parties non interagissantes qui peuvent être simulées indépendamment. | Évitez de définir la propriété réseau fréquemment. Gardez les groupes de parties suffisamment éloignés les uns des autres pour qu'ils puissent être simulés séparément. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | Met à jour les contacts entre objets. | Réduisez le nombre de corps entrant en collision en même temps, ou utilisez des boîtes de collision plus simples. Les cubes sont meilleurs que les maillages complexes. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepWorld OU stepWorldThrottled | Résout les équations physiques relatives aux connecteurs, à la flottabilité et à Humanoids. Lorsque le moteur est surchargé et incapable de simuler tout en temps réel, certaines étapes peuvent être limitées (stepWorldThrottled) et seules les "assemblages en temps réel" tels que Humanoids sont simulés. | Dépend de l'endroit où le temps est dépensé en fonction des trois phases suivantes : stepContacts : tests de géométrie de détection de collision de phase étroite. Solver step : intègre le temps et résout les collisions et autres contraintes updateBroadphase : met à jour les positions des assemblages dans le système de détection de collision et trouve éventuellement des paires de phase étroite en collision. |
| notifyMovingAssemblies | Aide à suivre combien de temps les primitives ont été en sommeil. | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | Interpolates les assemblages non contrôlés par le joueur actuel. | Définissez le propriétaire réseau des parties sur le joueur actuel pour réduire cela ; bien que cela entraîne généralement plus de travail physique à faire ailleurs. |
| Simulation/handleFallenParts | Supprime les parties qui sont tombées en dessous de Workspace.FallenPartsDestroyHeight. | Abaissez la hauteur de destruction ou réduisez le nombre de parties qui tombent à la hauteur de destruction. |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | Deuxième partie de notifyMovingAssemblies. | |
| Heartbeat/RunService.Heartbeat | Exécute des fonctions connectées à l'événement RunService.Heartbeat pour la simulation et les contacts de scripts. La description actuelle est suffisamment générique pour ne pas être incorrecte. | Réduisez le nombre ou la charge de travail des fonctions connectées à RunService.Heartbeat. |
| worldStep/stepContacts | Aide la simulation physique à traiter de nombreux contacts à la fois. | Réduisez le nombre d'objets en collision. |
| SolveBatch | Aide la simulation physique à résoudre des lots de mouvement d'objets. |
UI
| Étiquette | Description | Conseils de performance |
|---|---|---|
| Render/PreRender/UpdateInput | Met à jour et déclenche tous les événements liés à l'entrée utilisateur si l'utilisateur a effectué une entrée depuis la dernière image. | Essayez de ne pas faire trop de travail directement lorsque vous obtenez l'entrée. Envisagez de faire un minimum de traitement pour l'entrée, et des calculs plus importants devraient être délégués à un autre thread qui se produit plus tard. |
| Render/PreRender/TweenService | Met à jour les objets étant animés à l'aide de TweenService et appelle les rappels de complétion, tels que ceux fournis à GuiObject:TweenSize() ou GuiObject:TweenPosition(). | Réduisez le nombre d'objets étant animés à l'aide de TweenService et assurez-vous que les rappels effectuent le moins de travail possible. |
| Heartbeat/TweenService | Sur le serveur, TweenService s'exécute dans RunService.Heartbeat au lieu de RunService.PreRender. | Réduisez le nombre d'objets étant animés à l'aide de TweenService et assurez-vous que les rappels effectuent le moins de travail possible. |
| Render/PreRender/UpdateUILayouts | Met à jour la position et la taille des éléments de l'interface utilisateur sur tous les LayerCollectors activés. | Voir les étiquettes UpdateUILayouts ci-dessous. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | Reconstruit la liste interne de l'ordre Z des éléments de l'interface utilisateur (à ne pas confondre avec GuiObject.ZIndex) dans un LayerCollector lors du premier rendu ou lorsqu'un nouvel élément est ajouté, supprimé ou a changé son GuiObject.ZIndex. | Réduisez le nombre d'éléments d'interface utilisateur dans LayerCollectors avant le premier rendu et évitez de changer fréquemment le parent et le GuiObject.ZIndex des éléments d'interface utilisateur à l'intérieur. Plus un LayerCollector a d'éléments, moins il fonctionne bien. |
| Render/PreRender/UpdateUILayouts/Layout | Met à jour la position et la taille des éléments de l'interface utilisateur dans un LayerCollector individuel. Peut contenir une étiquette avec des informations sur l'interface utilisateur pertinente, ainsi que le nombre de Relayouts, Updates et Resizes. | Réduisez le nombre d'éléments d'interface utilisateur étant redimensionnés ou repositionnés, tels que ceux gérés par UILayout et ceux animés avec TweenService, GuiObject:TweenSize(), ou GuiObject:TweenPosition(). Envisagez d'utiliser des tailles fixes pour BillboardGuis. |