Проверьте скорость рендеринга.

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

Чтобы узнать больше о параметрах разработчика на устройстве, в том числе о том, как их включить, прочитайте раздел «Настройка параметров разработчика на устройстве» .

Профиль скорости рендеринга на графическом процессоре

Инструмент Profile GPU Rendering отображает в виде прокручиваемой гистограммы визуальное представление времени, необходимого для рендеринга кадров окна пользовательского интерфейса, относительно эталонного значения в 16,67 мс на кадр.

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

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

Включите профилировщик

Прежде чем начать, убедитесь, что вы используете устройство под управлением Android 4.1 (уровень API 16) или выше, и что у вас включены параметры разработчика . Чтобы начать профилирование рендеринга с помощью графического процессора устройства во время работы вашего приложения, выполните следующие действия:

  1. На вашем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
  2. В разделе «Мониторинг» выберите «Профиль рендеринга GPU» или «Профиль рендеринга HWUI» в зависимости от версии Android, установленной на устройстве.
  3. В диалоговом окне «Профиль рендеринга GPU» выберите параметр «На экране в виде столбцов» , чтобы наложить графики на экран вашего устройства.
  4. Откройте приложение, профиль которого вы хотите создать.

Проверьте результат.

На увеличенном изображении графика профилирования рендеринга GPU, показанного на рисунке 1, вы можете увидеть цветной участок, отображаемый на Android 6.0 (уровень API 23).

Рисунок 1. Увеличенный график рендеринга на графическом процессоре.

Ниже приведены несколько моментов, на которые следует обратить внимание при анализе результата:

  • Для каждого видимого приложения инструмент отображает график.
  • Каждая вертикальная полоса вдоль горизонтальной оси представляет собой кадр, а высота каждой вертикальной полосы соответствует времени, затраченному на рендеринг кадра (в миллисекундах).
  • Горизонтальная зеленая линия соответствует 16,67 миллисекундам. Для достижения 60 кадров в секунду вертикальная полоса для каждого кадра должна оставаться ниже этой линии. Любое превышение этой линии может привести к паузам в анимации.
  • Этот инструмент выделяет кадры, превышающие пороговое значение в 16,67 миллисекунд, делая соответствующую полосу шире и менее прозрачной.
  • Каждая полоса имеет цветные компоненты, которые соответствуют этапу конвейера рендеринга. Количество компонентов варьируется в зависимости от уровня API устройства.

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

Компонент стержня Этап рендеринга Описание
Буферы обмена Этот параметр показывает время, в течение которого центральный процессор ожидает завершения работы графического процессора. Если этот индикатор становится слишком высоким, это означает, что приложение выполняет слишком большую нагрузку на графический процессор.
Выполнение команды Отображает время, затраченное 2D-рендером Android на отправку команд OpenGL для отрисовки и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, необходимого для выполнения каждого списка отображения — чем больше списков отображения, тем выше красная полоса.
Синхронизация и загрузка Отображает время, необходимое для загрузки растровой информации в графический процессор. Большой сегмент указывает на то, что приложение тратит значительное время на загрузку больших объемов графики.
Рисовать Отображает время, затраченное на запись команд рисования, таких как drawLine . В Compose этот этап иногда может включать операции измерения и компоновки. Если эта полоса слишком длинная, запишите трассировку системы и изучите ее с помощью Perfetto для получения подробного анализа.
Замеры / Разметка Отражает время, затраченное на позиционирование и определение размеров компонентов пользовательского интерфейса на этапе компоновки , включая выполнение модификаторов измерения и размещения. Большой сегмент указывает на сложные вычисления в рамках этих модификаторов или на чрезмерно глубокое дерево компоновки, требующее частых перерасчетов.
Обработка ввода и анимация Represents the amount of time it took to evaluate animation API calls or to handle pointer input and its callbacks. If this segment is large, it could indicate that a customized animation or input callback is spending too much time processing. State calculation and data mapping while scrolling through a LazyColumn or LazyRow also typically occur during this segment and are a more common source of slowdowns in this segment.
Разное время / Задержка VSync Этот параметр показывает время, которое приложение тратит на выполнение операций между двумя последовательными кадрами. Это может указывать на то, что в потоке пользовательского интерфейса происходит слишком много обработки, которую можно было бы перенести в другой поток.

Таблица 1. Панели компонентов в Android 6.0 и выше.

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