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

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

Время процессора

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

Общее время процессора

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

Скриншот нескольких событий eglSwapBuffer.
Рисунок 1. Несколько событий eglSwapBuffer .


Скриншот события vkQueuePresentKHR.
Рисунок 2. Событие vkQueuePresentKHR .

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

Снимок экрана, на котором показано большое количество простоя во время событий dequeueBuffer и eglSwapBuffer.
Рисунок 3. Большое количество простоев во время событий dequeueBuffer и eglSwapBuffer .

Активное время процессора

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

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

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


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

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

Снимок экрана, на котором показано рабочее состояние закрепленного потока, соответствующего дорожке ЦП.
Рисунок х. Состояние выполнения закрепленного потока соответствует дорожке ЦП.

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

Снимок экрана с маркером ATrace на дорожке ЦП.
Рисунок 8. Маркер ATrace на дорожке ЦП.

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

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

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

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

устройства Мали

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

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

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

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

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

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


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

Адрено устройства

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

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

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

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

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

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

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

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

устройства Мали

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

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

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

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

Адрено устройства

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

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

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

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

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

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