Unity 6.3
0 онлайн 96 гостей 3 в системе
Вход
Оптимизация Шаг 74 из 208

Введение менеджера тайминга кадров

Вы можете использовать FrameTimingManager class для получения данных высокого уровня о производительности отдельных кадров в приложении. Затем вы можете использовать эти данные для оценки соответствия приложения целям производительности.

Вы можете использовать FrameTimingManager класс в следующих случаях:

Время кадров не заменяет данные из Profiler. После записи высокоуровневых показателей вашего приложения с помощью FrameTimingManagerвы можете использовать Profiler для изучения конкретных деталей.

Примечание: FrameTimingManager могут уменьшить производительность GPU при записи данных на OpenGL ES, поэтому они не могут точно измерить производительность вашего приложения.

Чтобы использовать данные, собранные из FrameTimingManager, см. Получить данные о времени кадра.

Наличие данных по FrameTimingManager

FrameTimingManager предоставляет результаты с установленной задержкой в четыре кадра. Это происходит по следующим причинам:

  • CPU Результаты тайминга не сразу доступны в конце каждого кадра.
  • Unity читает результаты GPU с задержкой в три кадра.

Примечание: Задержка в четыре кадра не гарантирует точные результаты, потому что GPU может не иметь доступных ресурсов для возврата результатов или может не вернуть их правильно.

Подробное описание доступных времен см. в Получить данные о времени кадра.

FrameTimingManger изменяет способ создания метки времени FrameTimeComplete при следующих обстоятельствах:

  • Если GPU поддерживает метки времени GPU, то GPU предоставляет метку времени FrameTimeComplete.
  • Если GPU не поддерживает метки времени GPU, но возвращает время GPU, FrameTimingManager вычисляет значение для gpuFrameTime. Это значение является суммой времени GPU и значений FirstSubmitTimestamp.
  • Если GPU не поддерживает метки времени GPU и не возвращает время GPU, FrameTimingManager устанавливает значение PresentTimestamp как значение FrameTimeComplete.

Поведение при паузе игрока

FrameTimingManager автоматически исключает время, в течение которого Application.Pause приостанавливает приложение, из измерений времени CPU. Когда приложение возобновляется, значение cpuFrameTime для первого возобновленного кадра отражает фактическую работу кадра после возобновления, а не время, в течение которого приложение было приостановлено.

Поддержка платформы

FrameTimingManager поддерживается на следующих платформах и графиках APIs:

Платформа Графика Поддерживаемые
Android OpenGL ES Да
Android Vulkan Да
iOS Metal Да
Linux OpenGL Частично: GPU Время кадра измерение не поддерживается.
Linux Vulkan Да
macOS Metal Да
tvOS Metal Да
WebGL WebGL Частично: GPU Время кадра измерение не поддерживается.
Windows DirectX 11 Да
Windows DirectX 12 Да
Windows OpenGL Да
Windows Vulkan Да
XR OpenGL ES Частично: CPU Время кадра потока отображения и GPU Время кадра измерение не поддерживается.
XR Vulkan Частично: CPU Время кадра потока отображения и GPU Время кадра измерение не поддерживается.

Совместимость с отложенным рендерингом на основе плиток GPUs

Для GPUs, которые используют архитектуру отложенного отображения на основе плиток, например Metal GPUs на устройствах Apple, время GPU может быть больше, чем время кадра.

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

В следующем примере, не GPU ресурсов, поскольку GPU передает задание из очереди вершин в очередь фрагментов. GPUГрафика API В этом случае, выполнение следующей фазы откладывается. Когда это происходит, GPU измерение времени включает в себя время работы фазы и любой пробел между ними. FrameTimingManager сообщает о более высоком GPU измерение времени, чем ожидалось.

Диаграмма, показывающая, каким образом расхождение в указанном времени GPU может произойти в Metal API
Диаграмма, показывающая, каким образом расхождение в указанном времени GPU может произойти в Metal API

Дополнительные ресурсы