Оценка времени обработки кадров ЦП и ГП (время кадра) необходима для понимания производительности вашего приложения и выявления узких мест. Когда вы профилируете приложение с помощью AGI, System Profiler предоставляет данные трассировки, которые вы можете использовать для оценки времени кадра.
Время процессора
В AGI вы можете просмотреть общее и активное время кадров ЦП на дорожке ЦП в системном профиле .
Общее время процессора
Чтобы измерить общее затраченное время ЦП, выберите диапазон времени , включающий время между последовательными событиями отправки кадров. Событиями отправки кадра являются eglSwapBuffers
(для OpenGL) и vkQueuePresentKHR
(для Vulkan).
![Скриншот нескольких событий eglSwapBuffer.](https://developer.android.com/static/images/agi/long-images/image1.png?authuser=19&hl=ru)
eglSwapBuffer
. ![Скриншот события vkQueuePresentKHR.](https://developer.android.com/static/images/agi/long-images/image2.png?authuser=19&hl=ru)
vkQueuePresentKHR
. Это измерение представляет собой оценку общего времени ЦП, но не обязательно отражает активное время ЦП. Например, в приложениях с привязкой к графическому процессору ЦП может ждать, пока графический процессор завершит свою работу, прежде чем отправлять новый кадр. Это часто происходит, когда событие dequeueBuffer
, eglSwapBuffer
(для OpenGL) или vkQueuePresent
(для Vulkan) занимает большую часть процессорного времени. Время ожидания включается в общее время ЦП, но не в активное время ЦП.
![Снимок экрана, на котором показано большое количество простоя во время событий dequeueBuffer и eglSwapBuffer.](https://developer.android.com/static/images/agi/long-images/image3.png?authuser=19&hl=ru)
dequeueBuffer
и eglSwapBuffer
.Активное время процессора
Активное время ЦП определяет, когда ЦП выполняет код приложения, не находясь в состоянии простоя.
Чтобы измерить активное время ЦП, просмотрите срезы «Выполнение» прямо над событиями ЦП. Подсчитайте все части трассировки между двумя событиями отправки кадров, которые находятся в состоянии «Выполняется» . Убедитесь, что вы включили рабочие потоки.
![Скриншот двух периодов времени ЦП, который можно использовать для измерения активного времени ЦП.](https://developer.android.com/static/images/agi/long-images/image5.png?authuser=19&hl=ru)
![Снимок экрана многопоточного приложения, у которого есть рабочий поток, в то время как основной поток простаивает.](https://developer.android.com/static/images/agi/long-images/image6.png?authuser=19&hl=ru)
Другой способ измерить активное время ЦП — просмотреть фрагменты приложений на дорожках ЦП. Эти срезы указывают, когда процессор работает, и соответствуют слайсам «Работа» .
![Снимок экрана, на котором показано рабочее состояние закрепленного потока, соответствующего дорожке ЦП.](https://developer.android.com/static/images/agi/long-images/image7.png?authuser=19&hl=ru)
Чтобы облегчить идентификацию фрагментов приложения, вы можете добавить в свое приложение маркеры ATrace . Это отобразит маркеры на дорожке ЦП в программе System Profiler.
![Снимок экрана с маркером ATrace на дорожке ЦП.](https://developer.android.com/static/images/agi/long-images/image8.png?authuser=19&hl=ru)
Оцените время кадра графического процессора
Чтобы оценить время кадра графического процессора, вы можете использовать срезы графического процессора или счетчики графического процессора в профилировщике системы. Оценка более точна при использовании срезов графического процессора.
Срезы графического процессора
Если в System Profiler доступна информация о срезах графического процессора, вы можете получить очень точную информацию о времени кадра графического процессора, измеряя общее количество времени, которое ваше приложение тратит на выполнение задач, связанных с одним кадром.
устройства Мали
На устройствах Mali срезы графического процессора имеют фрагментные , нефрагментированные и иногда дополнительные нефрагментированные дорожки. Для менее сложных кадров работа фрагментов и нефрагментов является последовательной, поэтому отличить работу одного кадра от другого можно путем поиска промежутков между активной работой графического процессора.
В качестве альтернативы, если вы знакомы с работой, передаваемой на графический процессор, определение шаблона отправленных проходов рендеринга дает информацию о том, когда кадр начинается и заканчивается.
![Скриншот нескольких кадров, выполняемых последовательно.](https://developer.android.com/static/images/agi/long-images/image9.png?authuser=19&hl=ru)
![Скриншот, на котором AGI увеличен на работе отдельного кадра.](https://developer.android.com/static/images/agi/long-images/image10.png?authuser=19&hl=ru)
Для приложений, которые имеют более сильно распараллеленный рабочий процесс графического процессора, вы можете получить время кадров графического процессора, выполнив поиск всех кадров с одинаковым идентификатором отправки на панели выбора для каждого фрагмента.
В приложениях на базе Vulkan для составления кадра можно использовать несколько отправок. Отслеживайте идентификаторы отправленных материалов с помощью дорожки событий Vulkan , которая содержит фрагменты для каждой отправки. При выборе фрагмента отправки будут выделены все фрагменты активности графического процессора, соответствующие отправке.
![Снимок экрана с распараллеленной рабочей нагрузкой графического процессора, где работа над одним кадром может перекрываться с другим.](https://developer.android.com/static/images/agi/long-images/image11.png?authuser=19&hl=ru)
![Скриншот нескольких событий Vulkan для выбранного кадра.](https://developer.android.com/static/images/agi/long-images/image12.png?authuser=19&hl=ru)
Адрено устройства
На устройствах Adreno фрагменты графического процессора появляются на дорожке очереди графического процессора 0 и всегда представляются последовательно, поэтому вы можете просмотреть все фрагменты, представляющие проходы рендеринга для кадра, и использовать их для измерения времени кадра графического процессора.
![Скриншот нескольких кадров, выполняемых последовательно.](https://developer.android.com/static/images/agi/long-images/image13.png?authuser=19&hl=ru)
![Снимок экрана, на котором AGI увеличен в кадре с несколькими проходами рендеринга.](https://developer.android.com/static/images/agi/long-images/image14.png?authuser=19&hl=ru)
Аналогично описанному ранее сценарию Мали: если приложение использует Vulkan, дорожка событий Vulkan предоставляет информацию о работе, отправленной для выполнения кадра. Чтобы выделить проходы рендеринга, щелкните фрагменты событий Vulkan , связанные с кадром.
![Снимок экрана приложения на основе Vulkan с событиями Vulkan для выбранного кадра.](https://developer.android.com/static/images/agi/long-images/image15.png?authuser=19&hl=ru)
В некоторых сценариях границы кадров графического процессора различить сложнее, поскольку приложение сильно привязано к графическому процессору. В этих сценариях, если вы знакомы с работой, передаваемой на графический процессор, вы можете определить шаблон, по которому выполняются проходы рендеринга, и определить границы кадра на основе этой информации.
![Снимок экрана приложения, сильно привязанного к графическому процессору, с шаблоном прохода рендеринга, который помогает идентифицировать границы кадра.](https://developer.android.com/static/images/agi/long-images/image16.png?authuser=19&hl=ru)
Счетчики графического процессора
Если информация о срезах графического процессора недоступна в трассировке, вы можете оценить время кадра графического процессора с помощью дорожек счетчика графического процессора .
устройства Мали
На устройствах Mali вы можете использовать отслеживание использования графического процессора , чтобы оценить время кадра графического процессора для приложения, которое не интенсивно использует графический процессор. Когда приложения менее интенсивно используют графический процессор, у них есть регулярные периоды высокой и низкой активности графического процессора вместо постоянно высокой активности. Чтобы оценить время кадра графического процессора с помощью трека использования графического процессора , измерьте продолжительность периодов высокой активности на треке.
![Снимок экрана: загрузка графического процессора и отслеживание очереди графического процессора на устройстве Mali.](https://developer.android.com/static/images/agi/long-images/image17.png?authuser=19&hl=ru)
Если приложение более интенсивно использует графический процессор, вы можете использовать фрагментные и нефрагментированные дорожки для оценки времени кадра графического процессора. Выявляя закономерности в уровнях активности фрагментных и нефрагментарных дорожек, вы можете получить приблизительную оценку того, где находятся границы кадра, и использовать это для измерения времени кадра графического процессора.
![Скриншот фрагментных и нефрагментированных треков.](https://developer.android.com/static/images/agi/long-images/image18.png?authuser=19&hl=ru)
Адрено устройства
На устройствах Adreno, если приложение не интенсивно использует графический процессор, вы можете оценить время кадра графического процессора так же, как вы это сделали для устройств Mali в предыдущем разделе.
![Скриншот отслеживания использования графического процессора и очереди графического процессора на устройстве Adreno.](https://developer.android.com/static/images/agi/long-images/image19.png?authuser=19&hl=ru)
Если приложение более интенсивно использует графический процессор, вы можете использовать дорожки Vertex Instructions/Second и Fragment Instructions/Second для оценки времени кадра графического процессора. Ища закономерности в уровнях активности этих дорожек, вы можете получить приблизительную оценку того, где находятся границы кадра, и использовать это для измерения времени кадра графического процессора.
![Скриншот Vertex Instructions/Второй трек.](https://developer.android.com/static/images/agi/long-images/image20.png?authuser=19&hl=ru)
Эти другие треки могут предоставить аналогичную информацию:
- Вершины закрашены / секунда
- Фрагменты затенены / секунда
- % вершин временного затенения
- % фрагментов времени