Пакет для бенчмарков в Unity

Пакет для бенчмарков в Unity

Performance Testing Package — это официальное расширение для Unity Test Framework, которое позволяет удобно и быстро реализовывать бенчмарки для вашего кода.

Бенчмарк — это тест, который измеряет производительность в контролируемых условиях для получения объективных числовых показателей.

Подробнее: в оф документации.

Как пользоваться

Оно интегрируется в обычный Test Runner: и в EditMode, и в PlayMode. Но в EditMode доступны не все варианты измерений. Например, нет работы с кадрами или профайлером по понятным причинам.

Соответственно, это удобно и запускать самостоятельно, и встраивать в CI-пайплайны.
(в последний раз тут про CI писал в этом посте)

Пакет предоставляет наглядные отчёты. И эти отчёты можно выгружать в xml и csv.

Пишется это аналогично NUnit-тестами, на родном C#. Только добавляются специальные методы, которые на себя забирают много полезной рутины. По типу того, сколько делать прогонов и как часто делать замеры.

Пользоваться весьма удобно. А т.к. LLM отлично генерируют нужный код, то ещё очень просто и быстро.

Гонять бенчмарки можно не только в редакторе, но и в билде на конечном устройстве через режим Player.

Для чего использовать

  1. Разовое сравнение разных подходов с точки зрения производительности, если вы не можете определиться или если в команде разгорелся холивар.
  2. Сбор конкретных, фактически числовых показателей работоспособности вашего приложения.
  3. Проверка успешности проведённых оптимизаций.
  4. Проверка предположений об эффективности разрабатываемого алгоритма.
  5. Обнаружение регрессий между версиями/коммитами через сравнение текущих показателей с "эталонными" или предыдущими.
  6. Анализ работоспособности на разных платформах и устройствах с разной конфигурацией и характеристиками.

информация ниже проиллюстрирована на обложке

Что позволяет отслеживать

  1. Время выполнения методов и участков кода.
  2. Время выполнения кадра и кол-во потраченных кадров.
  3. Аллокации и потребление памяти.
  4. Данные профайлера через Profiler Markers.
  5. Разнообразные другие кастомные метрики.

Где смотреть результаты

  1. Непосредственно в выводе нужного теста в окне Test Runner, в кратком формате.
  2. В окне Window > Analysis > Performance Test Report в более подробном и наглядном виде.
  3. В сторонних или кастомных инструментах по экспортированным данным (🤖).

Что можно увидеть

  1. Количество измерений.
  2. Сумму всех значений.
  3. Минимальные и максимальные значения.
  4. Средние и медианные значения.
  5. Отклонения и стандартные отклонения.

Примерчик

internal sealed class MemoryPerformanceTests { private const int Iterations = 1000; [Test, Performance] public void StringConcatenation_Performance() => Measure.Method(() => { string s = ""; for (int i = 0; i < Iterations; i++) s += i.ToString(); }) .GC() .MeasurementCount(50) .Run(); [Test, Performance] public void StringBuilder_Performance() => Measure.Method(() => { StringBuilder sb = new(); for (int i = 0; i < Iterations; i++) sb.Append(i.ToString()); string _ = sb.ToString(); }) .GC() .MeasurementCount(50) .Run(); }
4
Начать дискуссию