Введение менеджера тайминга кадров
Вы можете использовать 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 измерение времени, чем ожидалось.