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

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

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();
}
6 views·2 shares