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

Оценка времени обработки кадров на ЦП и ГП (времени кадра) имеет важное значение для понимания производительности вашего приложения и выявления узких мест. При профилировании приложения с помощью 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. Многопоточное приложение, в котором работают другие потоки, пока основной поток находится в режиме ожидания.

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

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

Для более точной идентификации фрагментов приложения можно добавить в него маркеры ATrace . Это позволит отобразить эти маркеры в дорожке загрузки ЦП в System Profiler.

Скриншот отображения фрагментов ATrace на дорожке, созданной с помощью ЦП.
Рисунок 8. Срезы ATrace, показанные на дорожке ЦП.

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

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

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

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

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

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

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

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

Для приложений с более распараллеленным рабочим процессом на графическом процессоре время обработки кадров на графическом процессоре можно получить, найдя все кадры с одинаковым идентификатором отправки (submissionID) на панели «Выделение» для каждого фрагмента.

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

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


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

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

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

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

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

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

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

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

Счетчики GPU

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

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

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

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

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

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

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

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

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

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

Скриншот инструкций по работе с вершинами / Второй трек.
Рисунок 20. Инструкции для вершин / Вторая дорожка.

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

  • Затененные вершины / Второй
  • Затененные фрагменты / Второй
  • % Время затенения вершин
  • % Фрагменты затенения времени