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

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

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


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

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

Оцените время кадра графического процессора
Для оценки времени кадра GPU вы можете использовать либо срезы GPU, либо счетчики GPU в System Profiler. Оценка будет более точной при использовании срезов GPU.
Срезы графического процессора
Если в System Profiler доступна информация о срезе графического процессора, вы можете получить очень точную информацию о времени кадра графического процессора, измерив общее количество времени, которое ваше приложение тратит на выполнение задач, связанных с одним кадром.
Устройства Mali
На устройствах Mali срезы GPU имеют фрагментные , нефрагментные и иногда дополнительные нефрагментные дорожки. Для менее сложных кадров фрагментная и нефрагментная работа последовательна, поэтому отличить работу одного кадра от другого можно, посмотрев на пробелы между активной работой GPU.
В качестве альтернативы, если вы знакомы с работой, которая отправляется на графический процессор, определение шаблона отправленных проходов рендеринга дает информацию о том, когда начинается и заканчивается кадр.


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


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


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

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

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

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

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

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

Подобную информацию могут предоставить и другие треки:
- Вершины затенены / второй
- Фрагменты затененные / секунда
- % Время затенения вершин
- % Фрагменты затенения времени