Последнее обновление: февраль 2020 г., текст на 10 минут чтения. 

Оптимизируйте игру с помощью Profile Analyzer

Что вы узнаете на этой странице: информацию об использовании Unity Profile Analyzer для оценки влияния изменений в ассетах или коде, оценки оптимизации, модификации настроек и обновления версии Unity. Эта статья написана по докладу Линдона Хоумвуда на Unite Copenhagen 2019.

Обзор Profile Analyzer

Хотите узнать, на что обратить внимание при оптимизации? Хотите сравнить производительность до и после изменений? Знаете ли вы о влиянии, которое оказывает перенос проекта со старой версии Unity на новую? Performance Analyzer поможет вам получить необходимую информацию. 

Этот инструмент поможет вам определить наиболее приоритетные области и обеспечит возможность сравнения двух снимков производительности Unity и оценить влияние внесенных изменений. В нем предусмотрены средства визуализации, которые помогут понять, как именно ваши изменения влияют на производительность. 

Profile Analyzer собирает и визуализирует данные по кадрам и маркерам из массива кадров Unity Profiler, помогая понять поведение игры на протяжении множества кадров, дополняя покадровый анализ, доступный в Unity Profiler.

Profile Analyzer проводит анализ производительности процессора по множеству кадров. В состав включены средства статистики и визуализации, помогающие быстрее проанализировать информацию. Кроме того, инструмент имеет мощные фильтры, позволяющие добраться до интересующих аспектов. Их можно использовать для сравнения двух наборов данных или для экспорта данных для анализа в других системах. 

Profile Analyzer доступен для использования в Unity 2018.4 LTS+ в виде пакета, но его можно также просто загрузить и перетащить в проект. Он поддерживает Unity версии 5.6 и выше. Для запуска инструмента выберите пункт Window > Analysis > Profile Analyzer. В предыдущих версиях Unity его можно запустить непосредственно из меню Window.

Советы по профилировке

Вот несколько советов по началу работы с Profile Analyzer. 

  1. Сделайте репрезентативную и повторяемую выборку.
  2. Закройте все другие приложения. Можно использовать Profile.logFile в скриптах на C# для записи данных Profile непосредственно из работающей игры, то есть вам не потребуется запускать Editor. На выходе вы получите файл .raw, который можно загрузить в Unity Profiler. 
  3. Отключите регулировку частоты процессора, например, Intel SpeedStep или Turbo Boost, чтобы избежать разгона процессора.

Анализ производительности отдельной функции

Если вы хотите понять, как вызов функции влияет на производительности, то используйте Unity Profiler для захвата данных. Затем нажмите кнопку Pull Data для загрузки данных в Profile Analyzer. Или можно загрузить ранее записанные данные. 

После этого начнется анализ, и график начнет наполняться данными кадров. Обратите внимание на белые и бирюзовые столбцы. Белые столбцы означают длительность кадров, а бирюзовые — текущие выбранные маркеры, позволяющие оценить их влияние на время кадра. 

Для поиска по маркерам можно использовать фильтры. Сведения о маркере (Marker Details) обновляются автоматически, отображая выбранное вами подмножество, а в колонке Count отображается их количество в подмножестве. Маркер подсвечивается в графике времени кадра. При выборе маркера на экране отображается сводная информация по нему. 

 

Поиск репрезентативных кадров

When analyzing performance, you want to make sure that the data you’re looking at is representative. If your data is noisy, it’s easy to ensure that you select an average frame by using the Frame Summary at the top right – just click on the Frame shown as the Median and the Profiler will display the relevant analysis. Or, in the frame time graph, you can right-click and select Select Median Frame

You can also limit your analysis to a selection of frames. All of the statistics you see will be updated to reflect the specific selection. 

Rather than rely on a single data point from a single frame, you can analyze multiple data points by selecting a group of representative frames. If you right-click on the frame time graph and Order by Frame Duration, you can then select a set of frames around the median frame for a representative sample that smooths out some of the noise in your data.

Влияние изменений в структуре проекта

Profile Analyzer помогает определить разницу в производительности при внесении изменений в структуру проекта, например, включение графических задач (Graphic Jobs). Для использования этой функции возьмите базовый набор данных и сделайте еще один снимок после внесения изменений. Запустите игру, сделайте снимок с помощью Unity Profiler, перенесите полученные данные в Profile Analyzer, а затем перенесите второй набор данных.

Вы увидите результаты сравнения двух наборов данных в разделе Frame Summary.

Are you GPU-bound?

Чтобы убедиться в отсутствии узких мест производительности проверьте маркер Gfx.WaitForPresent. Найдите его, введя Gfx.WaitForPresent в поле фильтра. Если медианное значение этого маркера не равно нулю, то это значит, что ЦП приходится ожидать завершения операций ГП перед продолжением работы. 

Взгляните на этот маркер в графике времени кадра, чтобы узнать, какое влияние он оказывает на время кадра. Если ЦП ожидает завершения операций ГП, то проблемы производительности наверняка кроются в графической составляющей. Воспользуйтесь инструментами профилирования ГП для оптимизации. 

Основы интерфейса Profile Analyzer
Управление наборами данных

Управление наборами данных

Данными можно управлять из главной верхней области окна Profile Analyzer. Отсюда можно открыть Unity Profiler, извлечь из него данные или загрузить ранее сохраненный файл (для любой версии Unity). 

Загрузив данные, вы увидите график времени кадра. График имеет интерактивную область, где можно выбрать диапазон выборки, после чего сводная информация в таблице маркера (Marker Table) обновится в соответствии с выбранными данными. Дополнительные параметры доступны по нажатию правой кнопки мыши над выбранной областью. 

Нажмите кнопку Save чтобы сохранить данные анализа в файл .pdata. Обратите внимание, что сохраняется два файла — файл данных Profile Analyzer (.pdata) и файл данных Profiler (.data или .raw). Мы рекомендуем сохранять оба файла в одну папку. 

 

Сводная информация о кадре

Область Frame Summary отображает важную информацию о времени кадра, включая минимальное, максимальное и медианное, а кнопки позволяют перейти к конкретным кадрам в Unity Profiler. В этой области также отображается гистограмма распределения времени кадра и диаграмма размаха. 

Таблица маркеров в заполненном графике кадра Profile Analyzer, режим Single View

Таблица маркеров

Сведения о маркере

В этой области отображается таблица маркеров из информации о маркерах в Unity Profiler, включая все глубины стека. Данные Unity Profiler по всем маркерам анализируются для получения медианного и других показателей времени кадра, которые также отображаются в этой таблице. 

 

Сводная информация о маркере

Область Marker Summary справа в правой части окна содержит сводную информацию о выбранных маркерах и их влиянии на время кадра. Информация также отображается в форме гистограммы и графика размаха.

В нижней части области сводной информации располагаются показатели минимального и максимального времени для отдельных экземпляров маркера из набора данных.  

Profile Analyzer — сравнительный просмотр и фильтры для кадра

Фильтры

  1. По имени

Для анализа маркеров с конкретным именем достаточно ввести подстроку или набор подстрок. Если имя содержит пробелы, то подстроку следует заключить в кавычки. 

Можно исключить маркеры, которые вас не интересуют. Например, можно исключать маркеры на основе времени простоя в задачах, или маркеры, являющиеся частью самого Profiler. 

Фильтры можно добавлять правым щелчком мыши по нужному маркеру в таблице. 

  1. Потоки

Profiler дает возможность анализировать данные для конкретных рабочих потоков. Для отображения сводной информации по всем потокам выберите пункт All в верхней части всплывающего окна Select. 

  1. Глубина

Мы рекомендуем проводить анализ с глубиной 3, потому что большинство подсистем Unity имеет на этом уровне высокоуровневые маркеры. Таким образом вы сможете увидеть влияние ключевых подсистем, например, рендеринг, анимация и физика. Обратите внимание: глубина 3 актуальна для недавних выпусков Unity. Для более старых выпусков имеет смысл выбрать другую глубину.

  1. Родительский объект

Для фильтра по родительскому объекту щелкните правой кнопкой мыши над маркером в таблице и выберите фильтр Set as Parent Marker.

  1. Тип анализа

По умолчанию Profile Analyzer показывает общее время для маркеров (Total), но вы можете выбрать отдельное время (Self). Второй вариант полезен, если вам нужно выяснить, на что именно уходит время. 

  1. Единицы измерения

По умолчанию время измеряется в миллисекундах, но для более кратковременных событий можно выбрать микросекунды.

10 самых полезных маркеров

Top 10 markers — это 10 фильтров, которые вы посчитаете самыми полезными. Лучший способ создания фильтров для этого списка — выбрать Main Thread и общее время, включая дочерние объекты на глубине 3, чтобы иметь возможность изучать поведение подсистем Unity. Такой фильтр покажет соотношение влияния каждой из ключевых подсистем, позволяя сравнить, например, влияние рендеринга, физики и анимации. Чтобы увидеть дополнительные сведения и провести анализ, наведите курсор на столбец данных, и вы увидите точные проценты и метрики. 

таблица сравнения данных Profile Analyzer

Сравнение наборов данных

В верхней части окна Profile Analyzer можно переключиться на вкладку Compare и выбрать два набора данных для анализа. Один набор данных отобразится в синем цвете, а второй — в оранжевом. Также можно выбрать два подмножества одного набора данных, например, для сравнения медианных кадров с крайними. 

Таблица Marker Comparison визуализирует данные в синем и оранжевом цветах, позволяя быстро определить слабые места отдельных областей в наборах данных.

Если в одном из наборов данных маркер отсутствует, то вы увидите прочерк в соответствующей колонке. Такое может случиться, если маркер переименован, например, если вы используете разные версии Unity.
 

Экспорт данных

Не забывайте, что у вас есть возможность выгрузить данные из Profile Analyzer для дополнительного анализа. Вы можете экспортировать содержимое таблицы маркеров, графика времени кадра или результаты сравнения графиков времени кадра.

Если у вас остались вопросы о Profile Analyzer, Profiler или о том, как использовать отдельные функции для своего проекта, то присоединяйтесь к обсуждениям на форуме

Мы используем cookie-файлы, чтобы вам было удобнее работать с нашим веб-сайтом. Подробнее об этом можно узнать на странице, посвященной политике использования cookie-файлов.

Согласен