Анализатор профилей - одна из многих функций, о которых рассказывается в электронной книге Полное руководство по профилированию игр Unity. В этом 70+-страничном руководстве собраны передовые знания и советы внешних и внутренних экспертов Unity о том, как профилировать приложение в Unity, управлять его памятью и оптимизировать энергопотребление от начала и до конца.
Описание работы с анализатором профиля
Хотите узнать, где можно улучшить производительность? Хотите сравнить производительность до и после изменений? Знаете ли вы о влиянии, которое оказывает перенос проекта со старой версии Unity на новую? Анализатор профиля поможет вам ответить на эти вопросы.
В то время как стандартный Unity Profiler позволяет выполнять анализ отдельных кадров, Profile Analyzer может объединять и визуализировать данные маркеров профилирования, полученные из набора кадров Unity Profiler.
Анализатор профиля поможет вам определить, на чем следует сосредоточить свои усилия. Это дает вам возможность сравнить две записи профилирования производительности Unity бок о бок и проверить влияние ваших изменений.
Анализатор профиля дополняет анализ отдельных кадров, уже доступный в Unity Profiler. Он объединяет и визуализирует данные о кадрах и маркерах из ряда кадров Unity Profiler, чтобы помочь вам увидеть высокоуровневые модели производительности с течением времени на многих кадрах.
Profile Analyzer проводит анализ производительности процессора на нескольких кадрах из текущей сессии Profiler или из ранее сохраненных захватов. Инструмент содержит статистику и визуализации, которые помогут вам быстро проанализировать информацию, хранящуюся в записях. Функция всесторонней фильтрации также позволяет углубиться в интересующие вас разделы. Вы можете использовать его для сравнения двух наборов данных или экспортировать необработанные данные для анализа с помощью других инструментов.
Вы можете установить Profile Analyzer через Window > Package Manager.
Эти советы по профилированию помогут вам начать работу с анализатором профилей:
Получите репрезентативный и повторяющийся снимок.
Закройте все остальные приложения. Вы можете использовать Profiler.logFile в своих C#-скриптах для записи данных профиля непосредственно из запущенной игры, что означает, что вам не нужен открытый редактор. Он записывает файл .raw, который затем можно загрузить в Unity Profiler.
Отключите любые функции аппаратного масштабирования или повышения производительности процессора, чтобы не менять тактовую частоту, например Intel SpeedStep или AMD Precision Boost.
Profile Analyzer поможет вам ответить на вопросы по оптимизации и производительности, которые могут возникнуть в ходе жизненного цикла разработки вашего проекта. Например, при захвате 300 кадров игрового процесса или 20-секундной последовательности загрузки:
Каковы самые большие затраты процессора на основной поток и поток рендеринга?
Какова средняя/средняя/общая стоимость каждого из этих маркеров?
Используйте Profile Analyzer, чтобы глубже изучить характеристики производительности кода, запущенного на нескольких кадрах или даже в разных захватах сессий для анализа до и после.
Дополнительные советы при сравнении данных с помощью Profile Analyzer:
Загляните в пользовательские скрипты (игнорируя уровни API Unity Engine), выбрав уровень глубины 4 (уровни глубины отображают информацию о том, где находятся маркеры в иерархии). После фильтрации на этом уровне и просмотра профилировщика в режиме Timeline вы можете соотнести глубину стека вызовов, чтобы сделать выбор здесь - скрипты Monobehaviour будут отображаться синим цветом и будут находиться на четвертом уровне вниз. Это быстрый способ проверить, насколько ваши специфические логические и геймплейные скрипты сами по себе, без посторонних "шумов", нагружают игру.
Аналогичным образом отфильтруйте данные для других областей движка Unity, таких как аниматоры или физика движка, используя уровень стека глубины 3.
Справа в разделе "Сводка кадров" вы найдете гистограмму диапазона производительности выделенного метода. Наведите курсор на номер Max Frame (точный кадр, в котором была обнаружена максимальная синхронизация), чтобы получить кликабельную ссылку для просмотра выбора кадра в Unity Profiler. Используйте это представление для анализа других факторов, которые потенциально могут способствовать высокому максимальному времени кадра.
Если вы хотите посмотреть, как вызов функции влияет на производительность, используйте Unity Profiler или метод Profiler.logFile для сбора данных. Если вы используете Unity Profiler, вы можете нажать кнопку Pull Data, чтобы загрузить данные в Profile Analyzer. В противном случае можно загрузить ранее сохраненный захват данных из файла.
Как только вы это сделаете, анализ начнется немедленно, и данные заполнят временной график кадра. Обратите внимание на белые и голубые столбики на графике. Белые полосы представляют длительность кадров, а голубые - выбранный в данный момент маркер. Это позволяет сравнить вклад выбранного маркера в общее время кадра.
Поиск маркеров можно осуществлять с помощью фильтров. Сведения о маркере (Marker Details) обновляются автоматически, отображая выбранное вами подмножество, а в колонке Count отображается их количество в подмножестве. Маркер подсвечивается в графике времени кадра. Когда вы выбираете маркер, панель подробностей Marker Summary также обновляется, чтобы показать статистику анализа для этого конкретного маркера.
Анализируя производительность, вы должны быть уверены, что данные, которые вы просматриваете, являются репрезентативными. Если данные слишком «шумные», то средний кадр можно выбрать с помощью сводки кадра (Frame Summary) в правом верхнем углу — просто нажмите на кадр, отображенный как медианный, и Profiler отобразит соответствующие данные анализа. В качестве альтернативы, используя график времени кадра, щелкните правой кнопкой мыши и выберите Select Median Frame (Выбрать медиану кадра).
Вы также можете ограничить анализ выбором кадров. Все статистические данные, которые вы видите, будут обновлены с учетом конкретного выбора.
Вместо того чтобы полагаться на одну точку данных из одного кадра, вы можете проанализировать несколько точек данных, выбрав группу репрезентативных кадров. Если вы щелкните правой кнопкой мыши на графике времени кадра и выберите "Упорядочить по длительности кадра", вы сможете выбрать набор кадров вокруг медианного кадра для получения репрезентативной выборки, которая сгладит некоторые шумы в ваших данных.
Анализатор профилей поможет определить разницу в производительности при применении настроек в масштабе всего проекта, например, при включении графических заданий. Для использования этой функции возьмите базовый набор данных и сделайте еще один снимок после внесения изменений. Запустите свою игру, сэмплируйте ее с помощью Unity Profiler, перенесите этот захват в Profile Analyzer, а затем перенесите второй.
Результаты двух захватов можно увидеть рядом в разделе "Сводка кадров".
Чтобы убедиться в отсутствии узких мест в производительности, проверьте маркер Gfx.WaitForPresentOnGfxThread на главном потоке. Найдите его, введя Gfx.WaitForPresentOnGfxThread в область фильтра. Если медианное значение этого маркера ненулевое, значит, CPU ждет, пока GPU завершит свою работу, чтобы продолжить работу.
Вы можете посмотреть на этот маркер на графике времени кадра, чтобы узнать, какой вклад он вносит в время кадра. Если CPU ждет GPU, то, скорее всего, вы привязаны к GPU. Подтвердите этот сценарий, просмотрев профиль потока рендеринга на наличие маркеров Gfx.PresentFrame или <GraphicsAPIName>.WaitForLastPresent. Ознакомьтесь с нашим Полное руководство по профилированию игр Unity или посмотрите на инструменты профилирования GPU, чтобы увидеть, где можно произвести оптимизацию.
Управлять данными можно в верхней части окна Profile Analyzer. Отсюда вы можете открыть Unity Profiler, а также "Извлечь данные" из Unity Profiler или загрузить ранее сохраненный файл (любой версии Unity).
После загрузки данных вы увидите их на графике времени кадра. Это интерактивная область, где вы можете выбрать ряд образцов; вся сводная информация в таблице Marker Details автоматически обновится с учетом вашего выбора. Вы можете получить доступ к расширенным опциям выбора, щелкнув правой кнопкой мыши на графике времени кадра.
Нажмите кнопку Save (Сохранить), чтобы сохранить данные анализа в файл .pdata. Обратите внимание, что существует два типа файлов - файл сохранения анализатора профиля (.pdata) и файл сохранения профилировщика (.data или .raw). Мы рекомендуем сохранять оба файла в одном каталоге.
Сводка кадров (в правой части окна анализатора профиля) отображает основные показатели времени кадров, включая минимальное, максимальное и среднее значения, а также кнопки, позволяющие переходить к определенным кадрам в профилировщике. В этой области также отображается гистограмма распределения времени кадра и диаграмма квадратов и усов.
Детали маркера
В этом разделе находится таблица маркеров, содержащая данные о маркерах, полученные с помощью Profiler, включая все глубины стека. Данные Unity Profiler по всем маркерам агрегируются для получения медианного и других временных интервалов кадров, которые также отображаются в этой таблице. Можно также отфильтровать эти данные по конкретным "срезам" глубины стека.
Краткое описание маркера
Область Marker Summary справа содержит агрегированную информацию о выбранных маркерах и их вкладе во время кадра. Эта информация также представлена наглядно в виде гистограммы и диаграммы "коробка и усы".
В нижней части сводки вы найдете минимальное и максимальное время для отдельных экземпляров маркеров в агрегированном наборе данных.
По имени
Вы можете ввести подстроку или набор подстрок, чтобы сфокусировать обзор на маркерах с определенным именем. Если имя содержит пробелы, обязательно поставьте кавычки вокруг подстроки.
Вы можете исключить те маркеры, которые вас не интересуют. Например, вы можете исключить маркеры, основанные на времени простоя в заданиях, или маркеры, являющиеся частью самого профилировщика.
Вы также можете заполнить фильтры маркеров, щелкнув правой кнопкой мыши на интересующем вас маркере в таблице и добавив его в выбор фильтра.
Удалить фильтр
Вы также можете выбрать скрытие одного маркера и всех дочерних образцов под этими маркерами из данных, как в таблицах, так и на графике. Эта опция предназначена в первую очередь для удаления VSync/времени ожидания на устройствах iOS и Android. Два распространенных маркера уже предварительно настроены и могут быть выбраны с помощью выпадающего списка Remove: Нет. Эти маркеры называются FPS Wait и Present Wait. Для более сложных случаев использования вы можете удалить маркеры, выбрав опцию Remove Marker из контекстного меню правой кнопки мыши.
За один раз можно удалить только один маркер; добавить маркер обратно можно, выбрав в выпадающем списке пункт None.
Нитки
Вы можете выбрать просмотр данных для определенных рабочих потоков. Чтобы увидеть их все в совокупности, отметьте "Все" в верхней части всплывающего окна "Выбор потока".
Глубина
Мы рекомендуем смотреть на глубину 3, потому что большинство подсистем Unity имеют высокоуровневые маркеры на этом уровне. Таким образом вы сможете увидеть влияние ключевых подсистем, например, рендеринг, анимация и физика. Обратите внимание: глубина 3 актуальна для недавних выпусков Unity. Для более старых версий вам может понадобиться переключиться на другую глубину).
Родитель
Чтобы отфильтровать по родителю, щелкните правой кнопкой мыши маркер в таблице маркеров и выберите Set as Parent Marker Filter.
Тип анализа
По умолчанию анализатор профиля показывает общее время для маркеров, но вы можете изменить его на собственное время. Самостоятельное время полезно, если вы хотите проанализировать детали, чтобы понять, на что действительно тратится ваше время.
Единицы
По умолчанию единицами измерения являются миллисекунды, но для более мелких таймингов можно перейти на микросекунды.
В этой части окна отображаются 10 лучших маркеров для выбранных вами фильтров. Лучше всего использовать этот инструмент, выбрав Основной поток и Общее время для типа анализа, включая детей на глубине 3, чтобы посмотреть на подсистемы Unity. Такой фильтр покажет соотношение влияния каждой из ключевых подсистем, позволяя сравнить, например, влияние рендеринга, физики и анимации.
В представлении "Сравнение" используйте выпадающий список " Соотношение ", чтобы настроить, как анализатор профиля рисует маркеры друг против друга:
Normalised отображает два набора данных относительно их собственного времени на выбранной глубине.
Longest отображает абсолютную разницу между двумя наборами на выбранной глубине.
Для дальнейшего анализа и отчетности вы можете навести курсор на панель данных, чтобы увидеть точные проценты и метрики.
В верхней части окна Profile Analyzer вы можете переключиться на вкладку Compare, чтобы выбрать два набора данных для анализа. Один набор данных отобразится в синем цвете, а второй — в оранжевом. Или вы можете сравнить две подобласти одного набора данных, например, сравнить медианные кадры с кадрами выбросов.
В таблице Marker Comparison данные визуально представлены синим и оранжевым цветами, поэтому вы можете быстро проверить, какой из двух наборов данных работает медленнее в определенных областях.
Если маркер отсутствует в одном из сканов, в этой колонке будет стоять прочерк. Это может произойти, если маркер был переименован, например, если вы используете разные версии Unity.
Помните, что вы можете экспортировать данные из Profile Analyzer для дальнейшей обработки в формате CSV. Можно экспортировать содержимое таблицы маркеров, график кадрового времени, таблицу сравнения или сравнение графиков кадрового времени.
Если у вас есть вопросы о Profile Analyzer, Profiler или о том, как использовать их специфические функции для вашего проекта, присоединяйтесь к обсуждениям на форумах.
Оценив и отточив производительность своей игры на широком спектре платформ и устройств, вы сможете лучше спланировать успех и значительно расширить свою базу игроков.
Как уже упоминалось в начале этой статьи, электронная книга Ultimate guide to profiling Unity games содержит множество других инструкций по профилированию ваших проектов Unity.
Вы также можете посмотреть эту сессию Unite Copenhagen. Она вышла в 2019 году, но по-прежнему содержит отличные советы по работе с Profile Analyzer.
Наконец, в хабе "Лучшие практики" вы найдете все передовые руководства и статьи Unity.