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

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

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


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

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

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


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


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


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

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

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

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

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

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

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