Перейти к основному содержимому

Пример ProfilerMarkers

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

Симуляция стаи, фазы которой измеряют маркеры.Симуляция стаи, фазы которой измеряют маркеры.

Симуляция стаи, фазы которой измеряют маркеры.

Как открыть​

  1. Импортируйте пример: Tools → Aspid 🐍 → FastTools → Welcome → Samples → Import у ProfilerMarkers.
  2. Откройте Scenes/ProfilerMarkers.unity и Window → Analysis → Profiler, войдите в Play Mode и выберите кадр в модуле CPU.
  3. В режиме Hierarchy разверните PlayerLoop до строки Flock.Update (74) — она лежит под строкой Unity Flock.Update() [Invoke].

Нужен встроенный модуль Unity Physics — без него скрипты примера не компилируются.

Попробуйте​

Маркеры под Flock.Update вложены как в коде; у FlockSimulation.Steering.Agent — 120 вызовов на 120 агентов.Маркеры под Flock.Update вложены как в коде; у FlockSimulation.Steering.Agent — 120 вызовов на 120 агентов.

Маркеры под Flock.Update вложены как в коде; у FlockSimulation.Steering.Agent — 120 вызовов на 120 агентов.

  1. Дерево повторяет области 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);
    }
  2. Один маркер на цикл. FlockSimulation.Steering.Agent стоит внутри цикла по агентам: Profiler показывает одну строку с Calls, равным числу агентов, а не строку на каждого агента.

  3. Больше агентов. В Play Mode поднимите Count у Flock до 400: на следующем кадре стая пересоздаётся, Calls у FlockSimulation.Steering.Agent становится 400, а FlockSimulation.Steering занимает больше времени.

  4. Не только MonoBehaviour. FlockSimulation — обычный C#-класс, и его маркеры работают так же. Маркер в локальной функции CreateAgent называется по объемлющему методу — Flock.InitializeAgents (53): он есть в первом кадре и в кадре, где меняется Count, с Calls по числу созданных агентов.

  5. Номер строки в имени. Каждое имя заканчивается номером строки вызова — FlockSimulation.Steering (62), — поэтому маркеры на разных строках одного метода не совпадают по имени, а переехавший вызов меняет номер. Поиск Flock в Profiler находит все маркеры примера.

  6. Релизная сборка. Сгенерированный код маркеров обёрнут в #if ENABLE_PROFILER: в сборке плеера без Development Build вызовы ничего не замеряют и возвращают default.

Куда смотреть​

ФайлЧто показывает
Scripts/FlockSimulation.csМаркеры на весь метод, на блок и на итерацию в обычном классе
Scripts/Flock.csТочка входа кадра, маркер внутри локальной функции

Справочник — ProfilerMarkers.