Android включает в себя некоторые параметры разработчика на устройстве, которые помогут вам визуализировать, где ваше приложение может столкнуться с проблемами при отрисовке пользовательского интерфейса, например, выполнять больше работы по рендерингу, чем необходимо, или выполнять длинные потоки и операции с графическим процессором. На этой странице описывается, как отлаживать перерисовку графического процессора и профилировать рендеринг графического процессора.
Чтобы узнать больше о параметрах разработчика на устройстве, в том числе о том, как их включить, прочтите статью Настройка параметров разработчика на устройстве .
Скорость рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает в виде прокручиваемой гистограммы визуальное представление того, сколько времени требуется для рендеринга кадров окна пользовательского интерфейса относительно эталонного значения 16,67 мс на кадр.
На менее мощных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть довольно низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд, и он попросит остальную систему подождать, пока она не сможет догнать его. Инструмент профилирования помогает определить, когда графический процессор перегружается при отрисовке пикселей или сильно перерисовывается.
Включить профилировщик
Прежде чем начать, убедитесь, что вы используете устройство под управлением Android 4.1 (уровень API 16) или более поздней версии и включили параметры разработчика . Чтобы начать профилирование рендеринга графического процессора устройства во время использования приложения, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- В разделе «Мониторинг» выберите «Профиль рендеринга графического процессора» или «Профиль рендеринга HWUI» в зависимости от версии Android, работающей на устройстве.
- В диалоговом окне «Профиль рендеринга графического процессора» выберите «На экране в виде полос», чтобы наложить графики на экран вашего устройства.
- Откройте приложение, которое вы хотите профилировать.
Проверьте вывод
На увеличенном изображении графика рендеринга профиля GPU, показанном на рисунке 1, вы можете увидеть цветной участок, отображаемый в Android 6.0 (уровень API 23).
Ниже приведены несколько замечаний относительно вывода:
- Для каждого видимого приложения инструмент отображает график.
- Каждая вертикальная полоса вдоль горизонтальной оси представляет кадр, а высота каждой вертикальной полосы представляет время, необходимое для рендеринга кадра (в миллисекундах).
- Горизонтальная зеленая линия представляет 16,67 миллисекунды. Чтобы добиться скорости 60 кадров в секунду, вертикальная полоса каждого кадра должна оставаться ниже этой линии. Каждый раз, когда полоса выходит за эту линию, в анимации могут возникать паузы.
- Инструмент выделяет кадры, длительность которых превышает порог в 16,67 миллисекунды, делая соответствующую полосу шире и менее прозрачной.
- Каждая полоса имеет цветные компоненты, которые соответствуют этапу конвейера рендеринга. Количество компонентов варьируется в зависимости от уровня API устройства.
В следующей таблице приведены описания каждого сегмента вертикальной полосы в выходных данных профилировщика при использовании устройства под управлением Android 6.0 и более поздних версий.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Поменять буферы | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Проблема с командой | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
Синхронизация и загрузка | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. | |
Рисовать | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. | |
Измерение/Расположение | Представляет количество времени, затраченное на обратные вызовы onLayout и onMeasure в иерархии представлений. Большой сегмент указывает на то, что обработка иерархии представлений занимает много времени. | |
Обработка ввода и анимация | Представляет количество времени, которое потребовалось для оценки всех аниматоров, работавших для этого кадра, и обработки всех входных обратных вызовов. Если этот сегмент большой, это может указывать на то, что пользовательский аниматор или обратный вызов ввода тратит слишком много времени на обработку. Привязка представления во время прокрутки, такая как RecyclerView.Adapter.onBindViewHolder() , также обычно происходит во время этого сегмента и является более распространенным источником замедления в этом сегменте. | |
Разное время/задержка вертикальной синхронизации | Представляет время, которое приложение тратит на выполнение операций между двумя последовательными кадрами. Это может быть индикатором того, что в потоке пользовательского интерфейса происходит слишком большая обработка, которую можно выгрузить в другой поток. |
Версии Android от 4.0 (уровень API 14) до 5.0 (уровень API 21) имеют синие, фиолетовые, красные и оранжевые сегменты. Версии Android ниже 4.0 имеют только синий, красный и оранжевый компоненты. В следующей таблице показаны панели компонентов в Android 4.0 и 5.0.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Процесс | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Выполнять | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
XFer | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. Этот сегмент не отображается на устройствах под управлением Android 4.0 или более ранней версии. | |
Обновлять | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. |
Дополнительные сведения о том, как интерпретировать информацию, предоставляемую инструментом профилирования, см. в разделе Анализ с помощью профильной рендеринга на графическом процессоре .
Примечание. Хотя этот инструмент называется Profile GPU Rendering, все отслеживаемые процессы фактически происходят в ЦП. Рендеринг происходит путем отправки команд на графический процессор, а графический процессор визуализирует экран асинхронно. В определенных ситуациях графическому процессору может потребоваться слишком много работы, и вашему процессору придется подождать, прежде чем он сможет отправлять новые команды. Когда это произойдет, вы увидите пики на оранжевой и красной полосах, и отправка команд будет заблокирована до тех пор, пока в очереди команд графического процессора не освободится больше места.
Визуализация перерисовки графического процессора
Еще одна функция в параметрах разработчика помогает вам определить перерисовку путем цветового кодирования вашего пользовательского интерфейса. Перерисовка происходит, когда ваше приложение рисует один и тот же пиксель более одного раза в одном и том же кадре. Таким образом, эта визуализация показывает, где ваше приложение может выполнять больше работы по рендерингу, чем необходимо, что может стать проблемой с производительностью из-за дополнительных усилий графического процессора по рендерингу пикселей, которые не будут видны пользователю. Поэтому вам следует по возможности исправлять события перерисовки .
Если вы еще этого не сделали, включите параметры разработчика . Затем, чтобы визуализировать перерисовку на вашем устройстве, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- Прокрутите вниз до раздела «Аппаратное ускорение рендеринга» и выберите «Отладка перерисовки графического процессора» .
- В диалоговом окне «Отладка перерисовки графического процессора» выберите «Показать области перерисовки» .
Android окрашивает элементы пользовательского интерфейса, чтобы определить степень перерисовки следующим образом:
- Истинный цвет: без перерисовки
- Синий: перерасход 1 раз
- Зеленый: перерасход 2 раза
- Розовый: перерасход 3 раза
- Красный: перерисовка 4 или более раз.
Обратите внимание, что эти цвета полупрозрачны, поэтому точный цвет, который вы видите на экране, зависит от содержимого вашего пользовательского интерфейса.
Теперь, когда вы можете определить, где в макете происходит перерисовка, прочитайте, как уменьшить перерисовку .
Помните, что некоторый перерасход неизбежен. Настраивая пользовательский интерфейс вашего приложения, постарайтесь получить визуализацию, которая показывает в основном настоящие цвета или только 1X перерисовку (синий).
Android включает в себя некоторые параметры разработчика на устройстве, которые помогут вам визуализировать, где ваше приложение может столкнуться с проблемами при отрисовке пользовательского интерфейса, например, выполнять больше работы по рендерингу, чем необходимо, или выполнять длинные потоки и операции с графическим процессором. На этой странице описывается, как отлаживать перерисовку графического процессора и профилировать рендеринг графического процессора.
Чтобы узнать больше о параметрах разработчика на устройстве, в том числе о том, как их включить, прочтите статью Настройка параметров разработчика на устройстве .
Скорость рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает в виде прокручиваемой гистограммы визуальное представление того, сколько времени требуется для рендеринга кадров окна пользовательского интерфейса относительно эталонного значения 16,67 мс на кадр.
На менее мощных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть довольно низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд, и он попросит остальную систему подождать, пока она не сможет догнать его. Инструмент профилирования помогает определить, когда графический процессор перегружается при отрисовке пикселей или сильно перерисовывается.
Включить профилировщик
Прежде чем начать, убедитесь, что вы используете устройство под управлением Android 4.1 (уровень API 16) или более поздней версии и включили параметры разработчика . Чтобы начать профилирование рендеринга графического процессора устройства во время использования приложения, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- В разделе «Мониторинг» выберите «Профиль рендеринга графического процессора» или «Профиль рендеринга HWUI» в зависимости от версии Android, работающей на устройстве.
- В диалоговом окне «Профиль рендеринга графического процессора» выберите «На экране в виде полос», чтобы наложить графики на экран вашего устройства.
- Откройте приложение, которое вы хотите профилировать.
Проверьте вывод
На увеличенном изображении графика рендеринга профиля GPU, показанном на рисунке 1, вы можете увидеть цветной участок, отображаемый в Android 6.0 (уровень API 23).
Ниже приведены несколько замечаний относительно вывода:
- Для каждого видимого приложения инструмент отображает график.
- Каждая вертикальная полоса вдоль горизонтальной оси представляет кадр, а высота каждой вертикальной полосы представляет время, необходимое для рендеринга кадра (в миллисекундах).
- Горизонтальная зеленая линия представляет 16,67 миллисекунды. Чтобы добиться скорости 60 кадров в секунду, вертикальная полоса каждого кадра должна оставаться ниже этой линии. Каждый раз, когда полоса выходит за эту линию, в анимации могут возникать паузы.
- Инструмент выделяет кадры, длительность которых превышает порог в 16,67 миллисекунды, делая соответствующую полосу шире и менее прозрачной.
- Каждая полоса имеет цветные компоненты, которые соответствуют этапу конвейера рендеринга. Количество компонентов варьируется в зависимости от уровня API устройства.
В следующей таблице приведены описания каждого сегмента вертикальной полосы в выходных данных профилировщика при использовании устройства под управлением Android 6.0 и более поздних версий.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Поменять буферы | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Проблема с командой | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
Синхронизация и загрузка | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. | |
Рисовать | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. | |
Измерение/Расположение | Представляет количество времени, затраченное на обратные вызовы onLayout и onMeasure в иерархии представлений. Большой сегмент указывает на то, что обработка иерархии представлений занимает много времени. | |
Обработка ввода и анимация | Представляет количество времени, которое потребовалось для оценки всех аниматоров, работавших для этого кадра, и обработки всех входных обратных вызовов. Если этот сегмент большой, это может указывать на то, что пользовательский аниматор или обратный вызов ввода тратит слишком много времени на обработку. Привязка представления во время прокрутки, такая как RecyclerView.Adapter.onBindViewHolder() , также обычно происходит во время этого сегмента и является более распространенным источником замедления в этом сегменте. | |
Разное время/задержка вертикальной синхронизации | Представляет время, которое приложение тратит на выполнение операций между двумя последовательными кадрами. Это может быть индикатором того, что в потоке пользовательского интерфейса происходит слишком большая обработка, которую можно выгрузить в другой поток. |
Версии Android от 4.0 (уровень API 14) до 5.0 (уровень API 21) имеют синие, фиолетовые, красные и оранжевые сегменты. Версии Android ниже 4.0 имеют только синий, красный и оранжевый компоненты. В следующей таблице показаны панели компонентов в Android 4.0 и 5.0.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Процесс | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Выполнять | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
XFer | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. Этот сегмент не отображается на устройствах под управлением Android 4.0 или более ранней версии. | |
Обновлять | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. |
Дополнительные сведения о том, как интерпретировать информацию, предоставляемую инструментом профилирования, см. в разделе Анализ с помощью профильной рендеринга на графическом процессоре .
Примечание. Хотя этот инструмент называется Profile GPU Rendering, все отслеживаемые процессы фактически происходят в ЦП. Рендеринг происходит путем отправки команд на графический процессор, а графический процессор визуализирует экран асинхронно. В определенных ситуациях графическому процессору может потребоваться слишком много работы, и вашему процессору придется подождать, прежде чем он сможет отправлять новые команды. Когда это произойдет, вы увидите пики на оранжевой и красной полосах, и отправка команд будет заблокирована до тех пор, пока в очереди команд графического процессора не освободится больше места.
Визуализация перерисовки графического процессора
Еще одна функция в параметрах разработчика помогает вам определить перерисовку путем цветового кодирования вашего пользовательского интерфейса. Перерисовка происходит, когда ваше приложение рисует один и тот же пиксель более одного раза в одном и том же кадре. Таким образом, эта визуализация показывает, где ваше приложение может выполнять больше работы по рендерингу, чем необходимо, что может стать проблемой с производительностью из-за дополнительных усилий графического процессора по рендерингу пикселей, которые не будут видны пользователю. Поэтому вам следует по возможности исправлять события перерисовки .
Если вы еще этого не сделали, включите параметры разработчика . Затем, чтобы визуализировать перерисовку на вашем устройстве, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- Прокрутите вниз до раздела «Аппаратное ускорение рендеринга» и выберите «Отладка перерисовки графического процессора» .
- В диалоговом окне «Отладка перерисовки графического процессора» выберите «Показать области перерисовки» .
Android окрашивает элементы пользовательского интерфейса, чтобы определить степень перерисовки следующим образом:
- Истинный цвет: без перерисовки
- Синий: перерасход 1 раз
- Зеленый: перерасход 2 раза
- Розовый: перерасход 3 раза
- Красный: перерисовка 4 или более раз.
Обратите внимание, что эти цвета полупрозрачны, поэтому точный цвет, который вы видите на экране, зависит от содержимого вашего пользовательского интерфейса.
Теперь, когда вы можете определить, где в макете происходит перерисовка, прочитайте, как уменьшить перерисовку .
Помните, что некоторый перерасход неизбежен. Настраивая пользовательский интерфейс вашего приложения, постарайтесь получить визуализацию, которая показывает в основном настоящие цвета или только 1X перерисовку (синий).
Android включает в себя некоторые параметры разработчика на устройстве, которые помогут вам визуализировать, где ваше приложение может столкнуться с проблемами при отрисовке пользовательского интерфейса, например, выполнять больше работы по рендерингу, чем необходимо, или выполнять длинные потоки и операции с графическим процессором. На этой странице описывается, как отлаживать перерисовку графического процессора и профилировать рендеринг графического процессора.
Чтобы узнать больше о параметрах разработчика на устройстве, в том числе о том, как их включить, прочтите статью Настройка параметров разработчика на устройстве .
Скорость рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает в виде прокручиваемой гистограммы визуальное представление того, сколько времени требуется для рендеринга кадров окна пользовательского интерфейса относительно эталонного значения 16,67 мс на кадр.
На менее мощных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть довольно низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд, и он попросит остальную систему подождать, пока она не сможет догнать его. Инструмент профилирования помогает определить, когда графический процессор перегружается при отрисовке пикселей или сильно перерисовывается.
Включить профилировщик
Прежде чем начать, убедитесь, что вы используете устройство под управлением Android 4.1 (уровень API 16) или более поздней версии и включили параметры разработчика . Чтобы начать профилирование рендеринга графического процессора устройства во время использования приложения, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- В разделе «Мониторинг» выберите «Профиль рендеринга графического процессора» или «Профиль рендеринга HWUI» в зависимости от версии Android, работающей на устройстве.
- В диалоговом окне «Профиль рендеринга графического процессора» выберите «На экране в виде полос», чтобы наложить графики на экран вашего устройства.
- Откройте приложение, которое вы хотите профилировать.
Проверьте вывод
На увеличенном изображении графика рендеринга профиля GPU, показанном на рисунке 1, вы можете увидеть цветной участок, отображаемый в Android 6.0 (уровень API 23).
Ниже приведены несколько замечаний относительно вывода:
- Для каждого видимого приложения инструмент отображает график.
- Каждая вертикальная полоса вдоль горизонтальной оси представляет кадр, а высота каждой вертикальной полосы представляет время, необходимое для рендеринга кадра (в миллисекундах).
- Горизонтальная зеленая линия представляет 16,67 миллисекунды. Чтобы добиться скорости 60 кадров в секунду, вертикальная полоса каждого кадра должна оставаться ниже этой линии. Каждый раз, когда полоса выходит за эту линию, в анимации могут возникать паузы.
- Инструмент выделяет кадры, длительность которых превышает порог в 16,67 миллисекунды, делая соответствующую полосу шире и менее прозрачной.
- Каждая полоса имеет цветные компоненты, которые соответствуют этапу конвейера рендеринга. Количество компонентов варьируется в зависимости от уровня API устройства.
В следующей таблице приведены описания каждого сегмента вертикальной полосы в выходных данных профилировщика при использовании устройства под управлением Android 6.0 и более поздних версий.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Поменять буферы | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Проблема с командой | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
Синхронизация и загрузка | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. | |
Рисовать | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. | |
Измерение/Расположение | Представляет количество времени, затраченное на обратные вызовы onLayout и onMeasure в иерархии представлений. Большой сегмент указывает на то, что обработка иерархии представлений занимает много времени. | |
Обработка ввода и анимация | Представляет количество времени, которое потребовалось для оценки всех аниматоров, работавших для этого кадра, и обработки всех входных обратных вызовов. Если этот сегмент большой, это может указывать на то, что пользовательский аниматор или обратный вызов ввода тратит слишком много времени на обработку. Привязка представления во время прокрутки, такая как RecyclerView.Adapter.onBindViewHolder() , также обычно происходит во время этого сегмента и является более распространенным источником замедления в этом сегменте. | |
Разное время/задержка вертикальной синхронизации | Представляет время, которое приложение тратит на выполнение операций между двумя последовательными кадрами. Это может быть индикатором того, что в потоке пользовательского интерфейса происходит слишком большая обработка, которую можно выгрузить в другой поток. |
Версии Android от 4.0 (уровень API 14) до 5.0 (уровень API 21) имеют синие, фиолетовые, красные и оранжевые сегменты. Версии Android ниже 4.0 имеют только синий, красный и оранжевый компоненты. В следующей таблице показаны панели компонентов в Android 4.0 и 5.0.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Процесс | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Выполнять | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
XFer | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. Этот сегмент не отображается на устройствах под управлением Android 4.0 или более ранней версии. | |
Обновлять | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. |
Дополнительные сведения о том, как интерпретировать информацию, предоставляемую инструментом профилирования, см. в разделе Анализ с помощью профильной рендеринга на графическом процессоре .
Примечание. Хотя этот инструмент называется Profile GPU Rendering, все отслеживаемые процессы фактически происходят в ЦП. Рендеринг происходит путем отправки команд на графический процессор, а графический процессор визуализирует экран асинхронно. В определенных ситуациях графическому процессору может потребоваться слишком много работы, и вашему процессору придется подождать, прежде чем он сможет отправлять новые команды. Когда это произойдет, вы увидите пики на оранжевой и красной полосах, и отправка команд будет заблокирована до тех пор, пока в очереди команд графического процессора не освободится больше места.
Визуализация перерисовки графического процессора
Еще одна функция в параметрах разработчика помогает вам определить перерисовку путем цветового кодирования вашего пользовательского интерфейса. Перерисовка происходит, когда ваше приложение рисует один и тот же пиксель более одного раза в одном и том же кадре. Таким образом, эта визуализация показывает, где ваше приложение может выполнять больше работы по рендерингу, чем необходимо, что может стать проблемой с производительностью из-за дополнительных усилий графического процессора по рендерингу пикселей, которые не будут видны пользователю. Поэтому вам следует по возможности исправлять события перерисовки .
Если вы еще этого не сделали, включите параметры разработчика . Затем, чтобы визуализировать перерисовку на вашем устройстве, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- Прокрутите вниз до раздела «Аппаратное ускорение рендеринга» и выберите «Отладка перерисовки графического процессора» .
- В диалоговом окне «Отладка перерисовки графического процессора» выберите «Показать области перерисовки» .
Android окрашивает элементы пользовательского интерфейса, чтобы определить степень перерисовки следующим образом:
- Истинный цвет: без перерисовки
- Синий: перерасход 1 раз
- Зеленый: перерасход 2 раза
- Розовый: перерасход 3 раза
- Красный: перерисовка 4 или более раз.
Обратите внимание, что эти цвета полупрозрачны, поэтому точный цвет, который вы видите на экране, зависит от содержимого вашего пользовательского интерфейса.
Теперь, когда вы можете определить, где в макете происходит перерисовка, прочитайте, как уменьшить перерисовку .
Помните, что некоторый перерасход неизбежен. Настраивая пользовательский интерфейс вашего приложения, постарайтесь получить визуализацию, которая показывает в основном настоящие цвета или только 1X перерисовку (синий).
Android включает в себя некоторые параметры разработчика на устройстве, которые помогут вам визуализировать, где ваше приложение может столкнуться с проблемами при отрисовке пользовательского интерфейса, например, выполнять больше работы по рендерингу, чем необходимо, или выполнять длинные потоки и операции с графическим процессором. На этой странице описывается, как отлаживать перерисовку графического процессора и профилировать рендеринг графического процессора.
Чтобы узнать больше о параметрах разработчика на устройстве, в том числе о том, как их включить, прочтите статью Настройка параметров разработчика на устройстве .
Скорость рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает в виде прокручиваемой гистограммы визуальное представление того, сколько времени требуется для рендеринга кадров окна пользовательского интерфейса относительно эталонного значения 16,67 мс на кадр.
На менее мощных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть довольно низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд, и он попросит остальную систему подождать, пока она не сможет догнать его. Инструмент профилирования помогает определить, когда графический процессор перегружается при отрисовке пикселей или сильно перерисовывается.
Включить профилировщик
Прежде чем начать, убедитесь, что вы используете устройство под управлением Android 4.1 (уровень API 16) или более поздней версии и включили параметры разработчика . Чтобы начать профилирование рендеринга графического процессора устройства во время использования приложения, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- В разделе «Мониторинг» выберите «Профиль рендеринга графического процессора» или «Профиль рендеринга HWUI» в зависимости от версии Android, работающей на устройстве.
- В диалоговом окне «Профиль рендеринга графического процессора» выберите «На экране в виде полос», чтобы наложить графики на экран вашего устройства.
- Откройте приложение, которое вы хотите профилировать.
Проверьте вывод
На увеличенном изображении графика рендеринга профиля GPU, показанном на рисунке 1, вы можете увидеть цветной участок, отображаемый в Android 6.0 (уровень API 23).
Ниже приведены несколько замечаний относительно вывода:
- Для каждого видимого приложения инструмент отображает график.
- Каждая вертикальная полоса вдоль горизонтальной оси представляет кадр, а высота каждой вертикальной полосы представляет время, необходимое для рендеринга кадра (в миллисекундах).
- Горизонтальная зеленая линия представляет 16,67 миллисекунды. Чтобы добиться скорости 60 кадров в секунду, вертикальная полоса каждого кадра должна оставаться ниже этой линии. Каждый раз, когда полоса выходит за эту линию, в анимации могут возникать паузы.
- Инструмент выделяет кадры, длительность которых превышает порог в 16,67 миллисекунды, делая соответствующую полосу шире и менее прозрачной.
- Каждая полоса имеет цветные компоненты, которые соответствуют этапу конвейера рендеринга. Количество компонентов варьируется в зависимости от уровня API устройства.
В следующей таблице приведены описания каждого сегмента вертикальной полосы в выходных данных профилировщика при использовании устройства под управлением Android 6.0 и более поздних версий.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Поменять буферы | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Проблема с командой | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
Синхронизация и загрузка | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. | |
Рисовать | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. | |
Измерение/Расположение | Представляет количество времени, затраченное на обратные вызовы onLayout и onMeasure в иерархии представлений. Большой сегмент указывает на то, что обработка иерархии представлений занимает много времени. | |
Обработка ввода и анимация | Представляет количество времени, которое потребовалось для оценки всех аниматоров, работавших для этого кадра, и обработки всех входных обратных вызовов. Если этот сегмент большой, это может указывать на то, что пользовательский аниматор или обратный вызов ввода тратит слишком много времени на обработку. Привязка представления во время прокрутки, такая как RecyclerView.Adapter.onBindViewHolder() , также обычно происходит во время этого сегмента и является более распространенным источником замедления в этом сегменте. | |
Разное время/задержка вертикальной синхронизации | Представляет время, которое приложение тратит на выполнение операций между двумя последовательными кадрами. Это может быть индикатором того, что в потоке пользовательского интерфейса происходит слишком большая обработка, которую можно выгрузить в другой поток. |
Версии Android от 4.0 (уровень API 14) до 5.0 (уровень API 21) имеют синие, фиолетовые, красные и оранжевые сегменты. Версии Android ниже 4.0 имеют только синий, красный и оранжевый компоненты. В следующей таблице показаны панели компонентов в Android 4.0 и 5.0.
Компонент бара | Этап рендеринга | Описание |
---|---|---|
Процесс | Представляет время, в течение которого ЦП ожидает завершения работы графического процессора. Если эта полоса становится высокой, это означает, что приложение выполняет слишком большую нагрузку на графический процессор. | |
Выполнять | Представляет время, затраченное средством 2D-рендеринга Android на выдачу команд OpenGL для рисования и перерисовки списков отображения. Высота этой полосы прямо пропорциональна сумме времени, которое требуется для выполнения каждого списка отображения: чем больше списков отображения, тем выше красная полоса. | |
XFer | Представляет время, необходимое для загрузки информации о растровом изображении в графический процессор. Большой сегмент указывает на то, что приложению требуется значительное время для загрузки большого количества графики. Этот сегмент не отображается на устройствах под управлением Android 4.0 или более ранней версии. | |
Обновлять | Представляет время, затраченное на создание и обновление списков отображения представления. Если эта часть панели высокая, возможно, нужно много рисовать пользовательские представления или много работать над методами onDraw. |
Дополнительные сведения о том, как интерпретировать информацию, предоставляемую инструментом профилирования, см. в разделе Анализ с помощью профильной рендеринга на графическом процессоре .
Примечание. Хотя этот инструмент называется Profile GPU Rendering, все отслеживаемые процессы фактически происходят в ЦП. Рендеринг происходит путем отправки команд на графический процессор, а графический процессор визуализирует экран асинхронно. В определенных ситуациях графическому процессору может потребоваться слишком много работы, и вашему процессору придется подождать, прежде чем он сможет отправлять новые команды. Когда это произойдет, вы увидите пики на оранжевой и красной полосах, и отправка команд будет заблокирована до тех пор, пока в очереди команд графического процессора не освободится больше места.
Визуализация перерисовки графического процессора
Еще одна функция в параметрах разработчика помогает вам определить перерисовку путем цветового кодирования вашего пользовательского интерфейса. Перерисовка происходит, когда ваше приложение рисует один и тот же пиксель более одного раза в одном и том же кадре. Таким образом, эта визуализация показывает, где ваше приложение может выполнять больше работы по рендерингу, чем необходимо, что может стать проблемой с производительностью из-за дополнительных усилий графического процессора по рендерингу пикселей, которые не будут видны пользователю. Поэтому вам следует по возможности исправлять события перерисовки .
Если вы еще этого не сделали, включите параметры разработчика . Затем, чтобы визуализировать перерисовку на вашем устройстве, выполните следующие действия:
- На своем устройстве перейдите в «Настройки» и нажмите «Параметры разработчика» .
- Прокрутите вниз до раздела «Аппаратное ускорение рендеринга» и выберите «Отладка перерисовки графического процессора» .
- В диалоговом окне «Отладка перерисовки графического процессора» выберите «Показать области перерисовки» .
Android окрашивает элементы пользовательского интерфейса, чтобы определить степень перерисовки следующим образом:
- Истинный цвет: без перерисовки
- Синий: перерасход 1 раз
- Зеленый: перерасход 2 раза
- Розовый: перерасход 3 раза
- Красный: перерисовка 4 или более раз.
Обратите внимание, что эти цвета полупрозрачны, поэтому точный цвет, который вы видите на экране, зависит от содержимого вашего пользовательского интерфейса.
Теперь, когда вы можете определить, где в макете происходит перерисовка, прочитайте, как уменьшить перерисовку .
Помните, что некоторый перерасход неизбежен. Настраивая пользовательский интерфейс вашего приложения, постарайтесь получить визуализацию, которая показывает в основном настоящие цвета или только 1X перерисовку (синий).