Оцените время обработки кадров ЦП и ГП.

Оценка времени обработки кадров ЦП и ГП (время кадра) имеет важное значение для понимания производительности вашего приложения и обнаружения узких мест. При профилировании приложения с помощью AGI System Profiler предоставляет данные трассировки, которые можно использовать для оценки времени кадра.

время ЦП

В AGI вы можете просматривать общее и активное время кадра ЦП в треке ЦП системного профиля .

Общее время ЦП

Чтобы измерить общее затраченное время ЦП, выберите временной диапазон , включающий время между последовательными событиями отправки кадров. События отправки кадров — eglSwapBuffers (для OpenGL) и vkQueuePresentKHR (для Vulkan).

Скриншот событий eglSwapBuffer.
Рисунок 1. Время между двумя событиями eglSwapBuffer .


Скриншот события vkQueuePresentKHR.
Рисунок 2. Время между двумя событиями vkQueuePresentKHR .

Это измерение является оценкой общего времени ЦП, но не обязательно представляет активное время ЦП. Например, в приложениях, привязанных к ГП, ЦП может ждать, пока ГП завершит свою работу, прежде чем отправлять новый кадр. Это часто происходит, когда событие dequeueBuffer , eglSwapBuffer (для OpenGL) или vkQueuePresent (для Vulkan) занимает большую часть времени ЦП. Время ожидания включается в общее время ЦП, но не в активное время ЦП.

Скриншот, на котором видно большое количество простоев во время событий dequeueBuffer и eglSwapBuffer.
Рисунок 3. Значительный объем простоя ЦП во время событий dequeueBuffer и eglSwapBuffer .

Активное время ЦП

Активное время ЦП определяет, когда ЦП выполняет код приложения, не находясь в состоянии простоя.

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

Скриншот двух периодов времени ЦП, которые можно использовать для измерения активного времени ЦП.
Рисунок 5. Два периода времени ЦП, которые можно использовать для измерения активного времени ЦП.


Скриншот многопоточного приложения, в котором есть другие рабочие потоки, пока основной поток бездействует.
Рисунок 6. Многопоточное приложение, в котором есть другие рабочие потоки, пока основной поток бездействует.

Другой способ измерения активного времени ЦП — просмотр срезов приложения в треках ЦП. Эти срезы показывают, когда ЦП работает, и они соответствуют срезам Running .

Скриншот, отображающий состояние выполнения закрепленного потока, соответствующего треку ЦП.
Рисунок 7. Состояние выполнения закрепленного потока соответствует треку ЦП.

Чтобы помочь идентифицировать слайсы приложения, вы можете добавить маркеры ATrace в свое приложение. Это отобразит маркеры в треке CPU System Profiler.

Скриншот срезов ATrace, показанных на дорожке ЦП.
Рисунок 8. Срезы ATrace, показанные на дорожке ЦП.

Оцените время кадра графического процессора

Для оценки времени кадра GPU вы можете использовать либо срезы GPU, либо счетчики GPU в System Profiler. Оценка будет более точной при использовании срезов GPU.

Срезы графического процессора

Если в System Profiler доступна информация о срезе графического процессора, вы можете получить очень точную информацию о времени кадра графического процессора, измерив общее количество времени, которое ваше приложение тратит на выполнение задач, связанных с одним кадром.

Устройства Mali

На устройствах Mali срезы GPU имеют фрагментные , нефрагментные и иногда дополнительные нефрагментные дорожки. Для менее сложных кадров фрагментная и нефрагментная работа последовательна, поэтому отличить работу одного кадра от другого можно, посмотрев на пробелы между активной работой GPU.

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

Скриншот последовательного выполнения нескольких кадров.
Рисунок 9. Несколько кадров выполняются последовательно.
Скриншот, на котором AGI увеличивает масштаб работы отдельного кадра.
Рисунок 10. Увеличенное изображение работы отдельного кадра.

Для приложений с более сильно распараллеленным рабочим процессом GPU вы можете получить время кадра GPU, выполнив поиск всех кадров с одинаковым идентификатором отправки на панели выбора для каждого фрагмента.

Для приложений на базе Vulkan можно использовать несколько отправок для создания кадра. Отслеживайте идентификаторы отправок с помощью трека событий Vulkan , который содержит срез для каждого отправления. Выбор среза отправки выделит все срезы активности GPU, которые соответствуют отправке.

Скриншот параллельной рабочей нагрузки графического процессора, где работа над одним кадром может накладываться на другую.
Рисунок 11. Распараллеленная рабочая нагрузка графического процессора, где работа над одним кадром может перекрываться с другим.


Скриншот нескольких событий Vulkan, выбранных для кадра.
Рисунок 12. Несколько событий Vulkan, выбранных для кадра.

Устройства Adreno

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

Скриншот последовательного выполнения нескольких кадров.
Рисунок 13. Несколько кадров выполняются последовательно.
Скриншот, на котором AGI увеличивает масштаб кадра с несколькими проходами рендеринга.
Рисунок 14. Увеличенный кадр с несколькими проходами рендеринга.

Подобно сценарию Mali, описанному ранее: если приложение использует Vulkan, трек событий Vulkan предоставляет информацию о работе, отправляемой для выполнения кадра. Чтобы выделить проходы рендеринга, щелкните срезы событий Vulkan , которые связаны с кадром.

Скриншот приложения на базе Vulkan, в котором выбраны события Vulkan кадра.
Рисунок 15. Приложение на базе Vulkan, в котором выбираются события Vulkan для кадра.

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

Скриншот приложения, сильно зависящего от графического процессора, с шаблоном прохода рендеринга, который помогает определить границы кадров.
Рисунок 16. Приложение с высокой степенью зависимости от графического процессора и шаблоном прохода рендеринга, который помогает определять границы кадров.

Счетчики графического процессора

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

Устройства Mali

На устройствах Mali вы можете использовать трек использования GPU для оценки времени кадра GPU для приложения, которое не интенсивно использует GPU. Когда приложения менее интенсивно используют GPU, у них есть регулярные периоды высокой и низкой активности GPU, вместо постоянно высокой активности. Чтобы оценить время кадра GPU с помощью трека использования GPU , измерьте продолжительность периодов высокой активности в треке.

Скриншот использования графического процессора и отслеживания очереди графического процессора на устройстве Mali.
Рисунок 17. Отслеживание использования графического процессора и очереди графического процессора на устройстве Mali.

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

Скриншот фрагментированных и нефрагментированных треков.
Рисунок 18. Фрагментированные и нефрагментированные треки.

Устройства Adreno

На устройствах Adreno, если приложение не сильно нагружает графический процессор, вы можете оценить время кадра графического процессора так же, как и для устройств Mali, описанных в предыдущем разделе.

Скриншот процента использования графического процессора и треков очереди графического процессора на устройстве Adreno.
Рисунок 19. Процент использования графического процессора и отслеживание очереди графического процессора на устройстве Adreno.

Если приложение более интенсивно использует GPU, и у приложения постоянно высокий процент использования GPU, вы можете использовать треки Vertex Instructions / Second и Fragment Instructions / Second для оценки времени кадра GPU. Выявляя закономерности в уровнях активности этих треков, вы можете получить грубую оценку того, где находятся границы кадра, и использовать это для измерения времени кадра GPU.

Скриншот Vertex Instructions / Второй трек.
Рисунок 20. Вершинные инструкции / Второй трек.

Подобную информацию могут предоставить и другие треки:

  • Вершины затенены / второй
  • Фрагменты затененные / секунда
  • % Время затенения вершин
  • % Фрагменты затенения времени