Получение трассировки Perfetto в Центре разработки Meta Quest
Обновлено: 3 сен 2025 г.
Perfetto — это мощный инструмент для отслеживания производительности, не зависящий от движка и имеющий ряд существенных преимуществ перед встроенными профилировщиками движков. Perfetto предоставляет информацию о системных событиях, таких как активность планирования, а также инструментарий для приложений, которые интегрируются с инструментарием Perfetto TrackEvent или ATrace.
Perfetto приходит на замену Systrace и поддерживает больший выбор событий, более длинные трассировки и счетчики.
Perfetto можно использовать как независимый инструмент и непосредственно из Центра разработки Meta Quest (MQDH). Он находится в Performance Analyzer (Анализаторе производительности) в правом верхнем углу с подписью Trace Analysis by Perfetto (Анализ трассировки Perfetto). Кроме того, его можно найти в Device Manager (Диспетчере устройств) в разделе Device Actions (Действия с устройствами).
Во время разработки рекомендуется использовать Perfetto, чтобы знать, сколько времени займет выполнение сложных рабочих нагрузок, выявить проблемы с производительностью или просмотреть стеки вызовов. Например, вы можете создать временную шкалу Perfetto, на которой отслеживается множество событий в рамках внутреннего обновления графического движка, и объединить их в одну временную шкалу на кадр. С помощью Perfetto вы также можете сделать выборку стека вызовов, чтобы получить flame-графики для визуализации выборочных трассировок стека.
Примеры использования
Perfetto предлагает широкий обзор системных процессов и дополнительные метрики на той же временной шкале, что и профиль производительности приложения. Инструмент также может напрямую сопоставлять функции, вызывающие OVRPlugin, с ОС и получать статистику различных счетчиков и метрик графического процессора для более эффективной корреляции проблем с производительностью.
Интеграция MQDH в Perfetto позволяет настраивать и захватывать общие и пользовательские трассировки Perfetto, которые затем открываются на сайте Perfetto в новом окне браузера. Кроме того, трассировки сохраняются на гарнитуре, так что их можно скачать.
В зависимости от вашего способа разработки для Perfetto могут потребоваться настройки некоторых параметров. Коммерческие игровые движки, такие как Unity и Unreal Engine, используют только инструментарий ATrace, поэтому задайте настройки ATrace Categories и ATrace Apps (Категории и приложения ATrace). Для этого нажмите значок ... рядом с Trace Analysis by Perfetto (Анализ трассировки Perfetto) и выберите Perfetto settings (Настройки Perfetto):
ATrace Categories — список всех отслеживаемых категорий ATrace. Это события, которые могут быть во многих приложениях.
ATrace Apps — список всех отслеживаемых приложений ATrace. Это приложения, в которых включены события.
ATRACE APPS FIELD
Чтобы получить подробную информацию от Perfetto, разработчики, использующие Unity и Unreal Engine, а также любые другие разработчики, использующие события ATrace, должны ввести название своего пакета в поле ATrace Apps. В целом всем разработчикам настоятельно рекомендуется заполнить это поле.
Настройка
Другие настройки, которые нужно задать, находятся на странице настроек Perfetto: ... > Perfetto settings (Настройки Perfetto).
Возможные настройки:
Perfetto Settings Preference (Вариант настроек Perfetto) — если установить значение Custom (Пользовательские), вы сможете предоставить пользовательскую конфигурацию Perfetto TraceConfig в формате JSON. Остальные настройки относятся к варианту General (Общие).
Auto open trace (Автоматическое открытие трассировок) — автоматическое открытие трассировок в новом окне браузера после их записи.
Trace duration (Длительность трассировки) — позволяет указать неограниченную длительность или задать фиксированную длительность в мс.
Trace buffer size (Размер буфера трассировки) — позволяет указать размер буфера трассировки.
GPU Trace buffer size (Размер буфера трассировки графического процессора) — позволяет указать размер буфера трассировки графического процессора.
CPU Scheduling (Планирование ЦП) — позволяет в деталях отслеживать события планирования ЦП.
ATrace Categories (Категории ATrace) — список отслеживаемых категорий ATrace через запятую. Это события, которые могут быть во многих приложениях.
ATrace Apps — список всех отслеживаемых приложений ATrace. Это приложения, в которых включены события. Вы можете выбрать отслеживание всех приложений ATrace или указать список приложений через запятую.
GPU Render Stage Trace (Трассировка стадии рендеринга графического процессора) — отслеживание трассировок стадии рендеринга графического процессора.
Enable high precision GPU render stage tracing (Включить высокоточную трассировку стадии рендеринга графического процессора) — обеспечивает дополнительные сведения о работе рендеринга каждой поверхности.
TrackEvent Config (Конфигурация TrackEvent) — определяет, какие данные TrackEvent должны записываться. Значения во всех полях разделяются запятыми. Подробнее о конфигурации TrackEvent см. в документации по событиям отслеживания Perfetto.
Process Name Filter (Фильтр по имени процесса) — фильтрация событий отслеживания только из процессов, которые соответствуют этому имени.
Process Name Filter Regex (Фильтр по регулярному выражению для имени процесса) — фильтрация событий отслеживания только из процессов, которые соответствуют этому регулярному выражению.
Disabled Categories (Отключенные категории) — категории событий, отслеживание которых отключено.
Enabled Categories (Включенные категории) — категории событий, отслеживание которых включено. Все категории включены, если они пусты.
Disabled Tags (Отключенные метки) — метки, отслеживание которых отключено.
Enabled Tags (Включенные метки) — метки, отслеживание которых включено. Все метки включены, если они пусты.
Callstack Sampling Config (Конфигурация выборки стека вызовов) — управление тем, какое приложение берется в выборку, когда и как часто срабатывает выборка. Подробнее см. в разделе Выборка стека вызовов.
Potential data loss during trace recording
Во время записи трассировки может произойти потеря данных. Это происходит, когда настроенный размер буфера трассировки оказывается недостаточным для фиксирования событий на протяжении всей записи. Чтобы свести к минимуму возможную потерю данных, выберите размер буфера, достаточный для обработки ожидаемой рабочей нагрузки, и ограничьте продолжительность трассировки.
Рабочие процессы
Разметка кода и сборка
В этом руководстве используется пример приложения для Unity, однако приложение для Unreal будет работать практически так же. Здесь мы используем этот пример потоковой передачи объектов, который демонстрирует, как можно создавать более обширные миры, удерживая при этом нагрузку на память за счет трансляции геометрии и объектов в зависимости от местоположения игрока или любых других факторов.
Трассировки Perfetto включают в себя встроенные маркеры профилирования для обоих движков, но также доступны общие API инструментирования Unity и Unreal Engine, позволяющие добавить пользовательские функции. В примере с потоковой передачей показано, как блок обновления LODManager использовался в скрипте LODManager.cs:
В конечном итоге в трассировке Perfetto это будет выглядеть следующим образом:
На этом скриншоте в качестве условия поиска используется идентификатор пользовательской строки маркера, выделяющий все потоки, в которых найдено совпадение, показанное здесь желтым цветом слева. Кроме того, на временную шкалу в верхней части трассировки добавляется маркер для каждого случая, чтобы легко найти в трассировке инструментированный блок.
После добавления маркеров вокруг всех горячих циклов и всего остального, представляющего интерес, соберите проект, используя конфигурацию Development Build, чтобы убедиться, что инструментарий излучается во время выполнения.
Запуск сборки и трассировки с помощью Perfetto
После запуска сборки и подключения гарнитуры к хост-машине через USB гарнитура появится в разделе Performance Analyzer (Анализатор производительности) MQDH. Это означает, что можно начать трассировку.
Прежде чем начать трассировку, необходимо выполнить последний важный шаг: проверить настройки и включить события ATrace из приложения, которое будет рассматриваться. По умолчанию Perfetto имеет собственный тип событий, содержащийся в Tracing SDK, TrackEvent, и ищет события этого типа. Этот тип инструментария отсутствует в большинстве доступных движков. При этом там имеется другой тип инструментария, называемый ATrace (формат трассировки Android). Поскольку включение всех инструментов по всей системе может значительно повысить накладные расходы, включайте их, только если в трассировку добавлены маркеры. Чтобы добавить ATrace, перейдите а раздел Perfetto Settings (Настройки Perfetto) в MQDH, найдите раздел ATrace Apps (Приложения ATrace) и добавьте идентификатор пакета.
Сохраните изменения и нажмите Record (Запись), чтобы начать трассировку. Ведите запись столько, сколько потребуется, чтобы получить нужное событие, а затем нажмите кнопку Stop. После завершения трассировка автоматически откроется в браузере по умолчанию.
Трассировка стадии рендеринга графического процессора
Чтобы получить трассировку стадии рендеринга графического процессора для вашего приложения, выполните следующие действия:
В Perfetto Settings включите настройки GPU Render Stage Trace и Enable high precision GPU render stage tracing.
Нажмите Record (Запись), чтобы начать трассировку.
В результате вы получите трассировку графического процессора для своего приложения.
Навигация по трассировке
После записи и отображения трассировки изучите элементы управления навигацией. Поначалу они могут показаться сложными, но быстро станут привычными. Основные клавиши, которые нужно запомнить: WASD и колесо прокрутки. Схема основных элементов управления:
W — увеличение (сужение фокуса окна просмотра);
A — сдвиг влево;
S — уменьшение (расширение фокуса окна просмотра);
D — сдвиг вправо;
прокрутка колеса мыши вверх или вниз — прокрутка трассировки вверх и вниз.
На следующем скриншоте показано одно из основных преимуществ Perfetto, о котором говорилось ранее, — возможность получать данные из множества различных источников на одной временной шкале. Это может быть что угодно, начиная от средней загрузки ЦП и ГП, а также необходимых системных показателей и заканчивая маркерами в приложении. Это позволяет получить очень широкий обзор для поиска корреляций и выявления причин узких мест и проблем с производительностью. Трассировка позволяет легко увидеть пропущенный кадр на ЦП и (или) графическом процессоре, выяснить, на каком из них возникла проблема, и получить высокоуровневое представление о потенциальных причинах для дальнейшего исследования с помощью других инструментов, таких как Simpleperf или RenderDoc Meta Fork.
Сохранение и загрузка трассировок
Когда Perfetto используется с MQDH, он автоматически сохраняет все трассировки в разделе Settings (Настройки) > Recorded Traces (Записанные трассировки). При этом для всех них используется имя файла по умолчанию. Переименовывайте их по окончании трассировки, чтобы их можно было пересмотреть в соответствующем контексте.
В качестве альтернативы можно нажать кнопку скачивания в окне браузера и переименовать файл таким образом.
Чтобы перезагрузить старый захват, откройте скачанный файл или выберите его в разделе Recorded Traces в MQDH, чтобы открыть в браузере по умолчанию. Трассировки также можно открыть на сайте Perfetto.
Выборка стека вызовов
В версии 51 и более поздних версиях Perfetto добавлена поддержка инструмента для выборки стека вызовов traced_perf. traced_perf периодически берет образцы стека вызовов приложения и записывает их в трассировку Perfetto. Образцы стека вызовов помогают определить, какие функции потребляют больше всего процессорного времени.
Выборка стека вызовов в Perfetto во многом похожа на выборку стека вызовов в других профилировщиках, таких как Perf в Linux и SimplePerf в Android, но ее преимущество заключается в том, что каждый образец можно посмотреть на временной шкале Perfetto. Это позволяет генерировать flame-графики за определенные периоды времени и просматривать информацию о каждом образце отдельно.
Требования
Вы можете записать трассировку Perfetto с выборкой стека вызовов из Центра разработки Meta Quest. Чтобы включить выборку стека вызовов, перейдите в диалог настройки Perfetto на вкладке Performance Analyzer. Нажмите кнопку ..., чтобы открыть настройки Perfetto.
Прокрутите страницу вниз и найдите раздел Callstack Sampling (Выборка стека вызовов). Задайте нужные настройки:
Enabled App(s) (Включенные приложения) — имя пакета вашего приложения.
Folder(s) that contains symbols files (Папки, содержащие файлы символов) — список имен папок на компьютере, содержащих файлы символов, через запятую. Эта настройка полезна, если вы хотите отследить распространяемое приложение, в которое не встроены символы. В этом случае вы можете подготовить файлы символов на своем компьютере и указать имя папки здесь.
Choose upon what event to trigger callstack sampling (Выберите, по какому событию запускать выборку из стека вызовов) — этот параметр определяет, когда выполнять выборку из стека вызовов. Вы можете выбрать либо PerfEvents.Counter, либо PerfEvents.Tracepoint. См. документацию по Perfetto PerfEventConfig.
Choose how often to do a callstack sampling and set proper value (Выберите частоту выборки стека вызовов и задайте нужное значение) — этот параметр определяет частоту выборки стека вызовов. Вы можете выбрать частоту или период.
Чтобы получить образцы, после настройки и запуска приложения возьмите трассировку Perfetto и нажмите кнопку Record.
Просмотр стеков вызовов
Записанные образцы можно найти на треке Callstacks под именем процесса.
Каждая выборка представлена ромбом на дорожке. Вы можете выбирать выборки по отдельности или перетаскивать их для того, чтобы создать flame-график.
Flame-график похож на те, которые используются в профилировщиках выборки, таких как SimplePerf.
Связанные инструменты
Вот ещё некоторые инструменты, которые могут быть полезны пользователям Perfetto:
RenderDoc Meta Fork для профилирования графического процессора — форк инструмента графической отладки RenderDoc с дополнительным доступом к низкоуровневым данным профилирования ГП из чипов Snapdragon 835 в Meta Quest, Snapdragon XR2 в Meta Quest 2, Snapdragon XR2+ в Meta Quest Pro, а также Snapdragon XR2 Gen 2B в Meta Quest 3 и Meta Quest 3S, в частности к информации из его плиточного рендерера.
Simpleperf для профилирования ЦП — инструмент командной строки для разработки для Android, который делает выборку приложения с заданной частотой, чтобы определить, где ЦП расходует время и где происходят другие аппаратные события, связанные с производительностью.