Poniżej znajduje się lista powszechnych tagów w MicroProfilerze, pogrupowanych według kategorii. Tagi są również nazywane zadaniami, timerami, zakresem, procesami i etykietami. Niezależnie od nazwy, reprezentują jednostkę pracy.
Zrozumienie tych tagów może pomóc w identyfikacji problematycznego kodu w twojej grze. Tabele zawierają etykiety tagów, opisy oraz porady dotyczące poprawy wydajności i optymalizacji twojej gry.
Sen
Gdy wątki nie wykonują aktywnie zadań, wchodzą w stan snu, z tagami wskazującymi, jak długo wątek był w stanie snu. W danym momencie jest niezwykle powszechne, że większość wątków roboczych znajduje się w stanie snu.
Nawigacja
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| rasterizeTile | Aktualizuje kafelki nawigacyjne potrzebne do żądania ścieżki, zazwyczaj po computePath, które wymaga, aby te kafelki były aktualne. Następuje po NavigationJob/preprocess na głównym wątku. | Zmniejsz liczbę unieważnień kafelków ścieżki, ponieważ powoduje to konieczność ponownego obliczania tych ścieżek. Jest to spowodowane ruchem części, które nie są nawigowalne. |
| computePath | Oblicza ścieżki, zazwyczaj po rasterizeTile. | Zmniejsz liczbę i rozmiary świata wywołań Path:ComputeAsync(). Spróbuj ponownie używać ścieżek dla wielu agentów, jeśli oczekuje się, że będą zaczynać/kończyć w mniej więcej podobnych lokalizacjach. |
| preprocess/getPrimitivesOverlapping | Zbiera geometrię świata dla każdego kafelka nawigacyjnego i planuje zadania rasteryzacji do wykonania przez wątek nawigacji. | Zmniejsz liczbę części. |
Animacja i humanoidy
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Symulacja/gameStepped | Przetwarzanie obiektów specyficznych dla gry, takich jak Humanoids, Animations oraz wywołania zwrotne heartbeat. | Zobacz etykiety gameStepped poniżej. |
| Symulacja/gameStepped/stepHumanoid | Zmiany stanu i ruch Humanoid. | Zmniejsz liczbę Humanoids lub wyłącz stany Humanoid na NPC, które ich nie potrzebują, takie jak Climbing lub Swimming. Zmniejsz wywołania zwrotne do Humanoid.StateChanged lub zmiany stanu, takie jak Running lub Died. |
| Symulacja/gameStepped/stepAnimation | Animators będą postępować w aktualnie odtwarzanych animacjach. | Zmniejsz liczbę Animators lub animowanych stawów, aby zmniejszyć obciążenie tego kroku. Zmniejsz liczbę wywołań zwrotnych do zdarzeń animacji, takich jak AnimationTrack.KeyframeReached lub AnimationTrack.Ended. |
| Symulacja/gameStepped/RunService.Stepped | Uruchamia funkcje połączone z wydarzeniem RunService.Stepped. | Zmniejsz liczbę lub obciążenie funkcji połączonych z tym wydarzeniem. Rozważ opóźnienie lub zastąpienie kosztownych obliczeń lub rozłożenie obliczeń na wiele klatek. |
Dźwięk
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Dźwięk | Przetwarza symulację akustyczną i aktualizuje dźwięki w aktywnej odtwarzaniu. | Zobacz etykiety Dźwięk poniżej. |
| Dźwięk/stepInstances | Aktualizuje głośność aktywnych dźwięków w przestrzeni roboczej. | Zmniejsz liczbę dźwięków w aktywnej odtwarzaniu. |
Sieć
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Net PacketReceive | Odbiera pakiety sieciowe. Jeśli wiele obiektów lub zdarzeń jest replikowanych, ten krok trwa dłużej. | Replikuj mniej obiektów lub zdarzeń. |
| Replicator/ProcessPackets | Przetwarza zawartość pakietów sieciowych, takich jak ruch, wywołania zdarzeń i zmiany właściwości. | Zmniejsz liczbę lub rozmiar replikowanych obiektów, lub rób to w krokach przyrostowych. Może wzrosnąć, jeśli rozmiar mapy wzrośnie, ponieważ większe mapy mają tendencję do większej ogólnej aktywności. |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | Wysyła dane o aktywności w grze. | Zmniejsz liczbę poruszających się obiektów i/lub dotknięć. Zobacz następne sekcje. |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | Wysyła odpowiednie konkretne obszary do konkretnych klientów w funkcji strumieniowania. | Zmniejsz minimalne i docelowe promienie strumieniowania. |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | Wysyła zmiany właściwości, wywołania zdalnych zdarzeń, zmiany stanu Humanoid, zmiany stanu animacji oraz replikację nowych instancji. | Zmniejsz liczbę replikowanych zmian w modelu danych. |
| Replicator SendCluster | Wysyła dane Terrain do klientów. | Zmniejsz liczbę lub rozmiar zmian terenu. |
| ModelCompleteness Mega Job | Tylko serwer: kompletność to wewnętrzna koncepcja. Gdy modele są całkowicie wysyłane, wysyłane są zdarzenia kompletności modeli. | Dodaj lub usuń mniej instancji. |
| deserializePacket | Przetwarzanie pakietów sieciowych na niskim poziomie. Przygotowuje do Replicator/ProcessPackets. | Wysyłaj mniej lub mniejsze aktualizacje. |
Renderowanie
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Prepare | Informacje są zbierane z głównego wątku i aktualizują różne struktury danych używane do renderowania. | Zobacz etykiety Prepare poniżej. |
| Prepare/Pass3dAdorn | Obsługuje renderowanie różnych ozdób obiektów, takich jak etykiety tekstowe nad obiektami. Dla etykiet Humanoid z okluzją, ten krok obejmuje raycasting, aby określić, czy takie obiekty są widoczne. Obejmuje to nieprzezroczyste części, aby ułatwić wizualizacje debugowania. | Zmniejsz liczbę widocznych ozdobionych obiektów, takich jak BillboardGuis, etykiety imienia/zdrowia Humanoid itp. Zmniejsz liczbę widocznych części. |
| Prepare/Pass2d | Przygotowuje renderowanie UI 2D (zarówno gracza, jak i UI Roblox). | Zmniejsz liczbę lub złożoność elementów UI. |
| Prepare/UpdatePrepare/updateInvalidParts | Aktualizuje części, które miały zmienioną lub dodaną właściwość. | Zmniejsz liczbę zmian właściwości w świecie. Jeśli skrypt aktualizuje dużą liczbę właściwości obiektów, rozłóż to na klatki. |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | Przygotowuje geometrie "FastCluster" używane do renderowania Humanoids oraz skórzonych MeshParts. Etykiety określają liczbę części, wierzchołków i rozmiar wierzchołków. | Zmniejsz wizualne zmiany w modelach z Humanoids lub skórzonych MeshParts. |
| Prepare/UpdatePrepare/updateDynamicParts | Przygotowuje Beams, ParticleEmitters i Humanoids do renderowania. | Zmniejsz liczbę widocznych Beams, ParticleEmitters i Humanoids. |
| Prepare/UpdatePrepare/updateInstancedClusters | Aktualizuje geometrię, która używa renderowania instancji, taką jak części. Etykiety Clusters i Instances wskazują liczbę zaktualizowanych. | Zmniejsz pracę, która niejawnie aktualizuje obszar ograniczający części, takie jak BasePart.CFrame, BasePart.Size lub Motor6D.Transform. Kreatywne aktualizacje właściwości, takie jak Bone.Transform, mogą pomóc. |
| Perform | Gdy rzeczywiste polecenia renderowania są tworzone i wydawane. | Zobacz etykiety Perform poniżej. |
| Perform/fillGuiVertices | Wypełnia bufory wierzchołkami UI, aby przygotować się do renderowania. Etykieta gui count wskazuje liczbę LayerCollectors widocznych w klatce. | Jeśli koszt jest wysoki, zmniejsz liczbę, gęstość i zajmowaną przestrzeń przez elementy UI. Jeśli jest zbyt wiele etykiet Process GuiEffect, rozważ zmniejszenie użycia UIGradient i UICorner na etykietach tekstowych. |
| Perform/Scene/queryFrustumOrdered | Stosuje culling frustum, aby obiekty niewidoczne nie były renderowane. | Jeśli koszt jest wysoki, oznacza to, że jest wiele elementów. Może warto użyć większych siatek, gdzie jedna siatka ma więcej szczegółów w porównaniu do wielu małych pojedynczych elementów. |
| Perform/Scene/computeLightingPerform | Obliczenia oświetlenia w pobliżu kamery. | Manipuluj liczbą źródeł światła lub mniej poruszaj kamerą, aby zmniejszyć czas potrzebny na ponowne obliczenie oświetlenia. |
| Perform/Scene/computeLightingPerform/LightGridCPU | Aktualizuje oświetlenie wokselowe, które jest używane na niższych poziomach jakości. | Jeśli aktualizacja zajmuje zbyt dużo czasu, rozważ użycie geometrii o niższej rozdzielczości, zmniejszenie liczby części lub zakotwiczenie części. Jeśli inne etykiety zajmują zbyt dużo czasu, rozważ zmniejszenie liczby świateł i użycie geometrii, która nie rzuca cienia dla obiektów, które się poruszają i unieważniają zajętość. |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | Aktualizuje mapy cieni. Nie wykonywane na poziomach jakości poniżej 4. | Zmniejsz liczbę świateł. Możesz również użyć Light.Shadows i BasePart.CastShadow, aby wyłączyć rzucanie cienia na mniej ważnych instancjach. Zobacz Popraw wydajność. |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO, and SSAOApply | Renderowanie post-processingu. | Zmniejsz liczbę efektów post-processingu. Zazwyczaj nie jest to znaczące. |
| Perform/Scene/UI | Renderowanie UI. W Id_Screen znajduje się etykieta z liczbą partii, materiałów i trójkątów używanych. | Zmniejsz liczbę widocznych elementów UI. Użycie CanvasGroups może pomóc kosztem zwiększonego użycia pamięci. |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | Aktualizuje pozycję i granice cząstek. | Zmniejsz liczbę ParticleEmitters, wskaźników emisji, czasów życia itp. Ogranicz ruch emitentów. |
| Scene/Id_Opaque, RenderView/Id_Opaque | Części w scenie z ogólną przezroczystością 0.01 lub niższą. | Zmniejsz użycie i gęstość części. |
| Scene/Id_Transparent, RenderView/Id_Transparent | Części w scenie z ogólną przezroczystością między 0.01 a 1. | Zmniejsz użycie częściowej przezroczystości. |
| Scene/Id_Decals, RenderView/Id_Decals | Decale w scenie. | Zmniejsz użycie decalów na złożonych siatkach. |
| Scene/Shadows | Przeliczenie cieni w scenie, zazwyczaj wykonywane w dynamicznych scenach i typowej rozgrywce. Części, niezależnie od przezroczystości, rzucają cienie pod założeniem, że zawierają deale. Nie wykonywane na poziomach jakości poniżej 4. | Jeśli ten krok zajmuje zbyt dużo czasu, rozważ wyłączenie BasePart.CastShadow dla złożonych siatek, części z wysoką częściową przezroczystością i mniej ważnych instancji. Całkowicie przezroczyste części, które nie mają decalów lub nie potrzebują cieni decalów, powinny mieć wyłączone BasePart.CastShadow. Zobacz Popraw wydajność. |
| Perform/Present | Przekazuje do wątku GPU, aby wykonać polecenia renderowania. | Ogólnie zmniejsz złożoność sceny. Jeśli ten krok zajmuje dużo czasu, możesz być ograniczony przez GPU. |
| Perform/Present/waitUntilCompleted | Oczekuje na zakończenie renderowania poprzedniej klatki przez GPU. | Jeśli to się często zdarza, to liczba renderowanych rzeczy jest zbyt wysoka. Menedżer liczby klatek pomaga w zrównoważeniu tego, ale jeśli pozostaje wysoka, spróbuj zastosować porady dotyczące wydajności z poszczególnych etykiet Scene. |
| LoadImage | Przetwarza obrazy na format, który może być użyty przez silnik. | Zmniejsz użycie dużych obrazów. |
Skrypty
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | Uruchamianie funkcji powiązanych z krokiem renderowania za pomocą RunService:BindToRenderStep(). | Upewnij się, że funkcje połączone z tym wydarzeniem wykonują jak najmniej pracy. |
| Render/PreRender/RunService.RenderStepped | Uruchamia funkcje połączone z wydarzeniem RunService.RenderStepped. | Upewnij się, że funkcje połączone z tym wydarzeniem wykonują jak najmniej pracy. |
| WaitingHybridScriptJob | Wznawia skrypty czekające na Instance:WaitForChild() lub Globals.Roblox.wait(). Zazwyczaj wykonywane 30 razy na sekundę. Ten krok ma budżet czasu wykonania na uruchomienie czekających skryptów. | Jeśli masz zbyt wiele czekających skryptów lub skryptów z długim czasem wykonywania przed oddaniem, ten krok jest ograniczany i czeka dłużej, zanim będzie mógł się ponownie uruchomić. Zmniejsz liczbę powiązanych funkcji lub długich obliczeń w tym kroku. |
| GC | Cykle zbierania śmieci Luau. | Pooluj tabele i inne obiekty do zbierania lub spróbuj zmniejszyć tworzenie tymczasowych tabel. |
| Heartbeat/RunService.Heartbeat | Uruchamia funkcje połączone z wydarzeniem RunService.Heartbeat. | Zmniejsz liczbę lub obciążenie funkcji połączonych z tym wydarzeniem. Rozważ opóźnienie lub zastąpienie kosztownych obliczeń lub rozłożenie obliczeń na wiele klatek. |
Symulacja
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Distributed Physics Ownership | Określa, czy serwer czy klient ma władzę nad niektórymi instancjami, takimi jak części. | Zmniejsz liczbę części, które często zmieniają własność sieciową, szczególnie tych z powszechną interakcją. |
| Symulacja/assemble | Aktualizuje drzewo połączonych obiektów (zestawów) używanych przez silnik fizyczny. | Zmniejsz liczbę stawów tworzonych lub niszczonych. |
| Symulacja/physicsSteppedTotal/physicsStepped | Uruchamia symulację fizyki. | Zmniejsz liczbę i złożoność fizycznie symulowanych ciał. |
| Symulacja/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | Aktualizuje wyspy symulacyjne, układając części zgodnie z własnością sieciową, lokalną symulacją. Wyspy to nieinteraktywne grupy części, które mogą być symulowane niezależnie. | Unikaj częstego ustawiania własności sieciowej. Utrzymuj grupy części wystarczająco daleko od siebie, aby mogły być symulowane osobno. |
| Symulacja/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | Aktualizuje kontakty między obiektami. | Zmniejsz liczbę ciał kolidujących jednocześnie lub użyj prostszych pudełek kolizyjnych. Sześciany są lepsze niż złożone siatki. |
| Symulacja/physicsSteppedTotal/physicsStepped/worldStep/stepWorld LUB stepWorldThrottled | Rozwiązuje równania fizyki związane z łącznikami, wypornością i Humanoids. Gdy silnik jest przeciążony i nie jest w stanie symulować wszystkiego w czasie rzeczywistym, niektóre kroki mogą być ograniczane (stepWorldThrottled) i tylko "real-time assemblies", takie jak Humanoids, są symulowane. | Zależy od tego, gdzie czas jest tracony na podstawie trzech następujących faz: stepContacts: testy geometrii detekcji kolizji w wąskim zakresie. Solver step: integracja czasu i rozwiązywanie kolizji oraz innych ograniczeń updateBroadphase: aktualizacja pozycji zestawów w systemie detekcji kolizji i znajdowanie potencjalnie kolidujących par w wąskim zakresie. |
| notifyMovingAssemblies | Pomaga śledzić, jak długo prymitywy były w stanie snu. | |
| Symulacja/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | Interpoluje zestawy, którymi nie steruje aktualny gracz. | Ustaw właściciela sieci części na aktualnego gracza, aby to zmniejszyć; chociaż zazwyczaj spowoduje to większą pracę fizyczną w innym miejscu. |
| Symulacja/handleFallenParts | Usuwa części, które spadły poniżej Workspace.FallenPartsDestroyHeight. | Obniż wysokość zniszczenia lub zmniejsz liczbę części, które spadają do wysokości zniszczenia. |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | Druga część notifyMovingAssemblies. | |
| Heartbeat/RunService.Heartbeat | Uruchamia funkcje połączone z wydarzeniem RunService.Heartbeat do symulacji i kontaktów skryptów. Aktualny opis jest na tyle ogólny, że nie jest błędny. | Zmniejsz liczbę lub obciążenie funkcji połączonych z RunService.Heartbeat. |
| worldStep/stepContacts | Pomaga symulacji fizyki w kroku wielu kontaktów jednocześnie. | Zmniejsz liczbę kolidujących obiektów. |
| SolveBatch | Pomaga symulacji fizyki rozwiązywać partie ruchu obiektów. |
UI
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Render/PreRender/UpdateInput | Aktualizuje i wywołuje wszystkie zdarzenia związane z wejściem użytkownika, jeśli użytkownik wykonał wejście od ostatniej klatki. | Staraj się nie wykonywać zbyt wiele pracy bezpośrednio podczas uzyskiwania wejścia. Rozważ wykonanie minimalnej ilości przetwarzania dla wejścia, a większe obliczenia powinny być przesunięte do innego wątku, który następuje później. |
| Render/PreRender/TweenService | Aktualizuje obiekty, które są tweenowane za pomocą TweenService i wywołuje wywołania zwrotne zakończenia, takie jak te używane w GuiObject:TweenSize() lub GuiObject:TweenPosition(). | Zmniejsz liczbę obiektów tweenowanych za pomocą TweenService i upewnij się, że wywołania zwrotne wykonują jak najmniej pracy. |
| Heartbeat/TweenService | Na serwerze TweenService działa w RunService.Heartbeat zamiast RunService.PreRender. | Zmniejsz liczbę obiektów tweenowanych za pomocą TweenService i upewnij się, że wywołania zwrotne wykonują jak najmniej pracy. |
| Render/PreRender/UpdateUILayouts | Aktualizuje pozycję i rozmiar dla elementów UI na wszystkich włączonych LayerCollectors. | Zobacz etykiety UpdateUILayouts poniżej. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | Przebudowuje wewnętrzną listę Z-order elementów UI (nie mylić z GuiObject.ZIndex) w LayerCollector przy pierwszym renderowaniu lub gdy nowy element jest dodawany, usuwany lub zmienia się jego GuiObject.ZIndex. | Zmniejsz liczbę elementów UI w LayerCollectors przed pierwszym renderowaniem i unikaj częstego zmieniania rodzica oraz GuiObject.ZIndex elementów UI wewnątrz nich. Im więcej elementów ma LayerCollector, tym gorzej działa. |
| Render/PreRender/UpdateUILayouts/Layout | Aktualizuje pozycję i rozmiar dla elementów UI w pojedynczym LayerCollector. Może zawierać etykietę z informacjami o odpowiednim UI, wraz z ilością Relayoutów, Aktualizacji i Zmian rozmiaru. | Zmniejsz liczbę elementów UI, które są zmieniane rozmiar lub przestawiane, takich jak te zarządzane przez UILayout i te tweenowane za pomocą TweenService, GuiObject:TweenSize() lub GuiObject:TweenPosition(). Rozważ użycie stałych rozmiarów dla BillboardGuis. |