Пример ProfilerMarkers
Стая кубов, у которой каждая фаза кадра видна в Profiler под своим именем.


Симуляция стаи, фазы которой измеряют маркеры.
Как открыть
- Импортируйте пример: Tools → Aspid 🐍 → FastTools → Welcome → Samples → Import у ProfilerMarkers.
- Откройте
Scenes/ProfilerMarkers.unityи Window → Analysis → Profiler, войдите в Play Mode и выберите кадр в модуле CPU. - В режиме Hierarchy разверните
PlayerLoopдо строкиFlock.Update (74)— она лежит под строкой UnityFlock.Update() [Invoke].
Нужен встроенный модуль Unity Physics — без него скрипты примера не компилируются.
Попробуйте


Маркеры под Flock.Update вложены как в коде; у FlockSimulation.Steering.Agent — 120 вызовов на 120 агентов.
-
Дерево повторяет области
using. ПодFlock.UpdateлежатFlockSimulation.Stepи рядом с нимFlock.ApplyTransforms, а подStep—FlockSimulation.SteeringиFlockSimulation.Integrate. Вложенность ничем не настраивается, её задают области в коде:public void Step(float deltaTime, float neighborRadius, float maxSpeed){using var _ = this.Marker();using (this.Marker().WithName("Steering"))ComputeSteering(neighborRadius);using (this.Marker().WithName("Integrate"))Integrate(deltaTime, maxSpeed);} -
Один маркер на цикл.
FlockSimulation.Steering.Agentстоит внутри цикла по агентам: Profiler показывает одну строку сCalls, равным числу агентов, а не строку на каждого агента. -
Больше агентов. В Play Mode поднимите Count у Flock до
400: на следующем кадре стая пересоздаётся,CallsуFlockSimulation.Steering.Agentстановится400, аFlockSimulation.Steeringзанимает больше времени. -
Не только MonoBehaviour.
FlockSimulation— обычный C#-класс, и его маркеры работают так же. Маркер в локальной функцииCreateAgentназывается по объемлющему методу —Flock.InitializeAgents (53): он есть в первом кадре и в кадре, где меняется Count, сCallsпо числу созданных агентов. -
Номер строки в имени. Каждое имя заканчивается номером строки вызова —
FlockSimulation.Steering (62), — поэтому маркеры на разных строках одного метода не совпадают по имени, а переехавший вызов меняет номер. ПоискFlockв Profiler находит все маркеры примера. -
Релизная сборка. Сгенерированный код маркеров обёрнут в
#if ENABLE_PROFILER: в сборке плеера без Development Build вызовы ничего не замеряют и возвращаютdefault.
Куда смотреть
| Файл | Что показывает |
|---|---|
Scripts/FlockSimulation.cs | Маркеры на весь метод, на блок и на итерацию в обычном классе |
Scripts/Flock.cs | Точка входа кадра, маркер внутри локальной функции |
Справочник — ProfilerMarkers.