На этой странице объясняется, что такое перерисовка, как ее диагностировать и способы ее устранения или смягчения.
Когда приложение рисует один и тот же пиксель более одного раза в одном кадре, это называется перерисовкой . В перерисовке обычно нет необходимости, и лучше всего ее устранить. Overdraw становится проблемой производительности, когда графический процессор тратит время на рендеринг пикселей, которые не влияют на то, что пользователь видит на экране.
О перерисовке
Под перерисовкой система прорисовывает пиксель на экране несколько раз за один кадр рендеринга. Например, если у вас есть несколько карточек пользовательского интерфейса, сложенных друг в друга, каждая карточка скрывает часть карты, расположенной под ней.
Однако системе все равно необходимо нарисовать скрытые части карт в стопке. Это связано с тем, что сложенные карты отображаются в соответствии с алгоритмом художника , то есть в порядке «сзади вперед». Эта последовательность рендеринга позволяет системе применять правильное альфа-смешение к полупрозрачным объектам, таким как тени.
Найдите проблемы с перерисовкой
Платформа предлагает следующие инструменты, которые помогут вам определить, влияет ли перерисовка на производительность вашего приложения.
Отладка инструмента перерисовки графического процессора
Инструмент Debug GPU Overdraw использует цветовое кодирование, чтобы показать, сколько раз ваше приложение отрисовывает каждый пиксель на экране. Чем выше это значение, тем больше вероятность того, что перерисовка повлияет на производительность вашего приложения.
Дополнительные сведения см. в разделе Визуализация перерисовки графического процессора .
Инструмент рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает время, необходимое на каждом этапе конвейера рендеринга для отображения одного кадра, в виде прокручиваемой гистограммы. Часть «Процесс» каждой полосы, выделенная оранжевым цветом, показывает, когда система заменяет буферы. Этот показатель дает важные сведения о перерисовке.
На менее производительных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд и попросить остальную систему подождать, пока она не сможет догнать его. На панели «Процесс» показано, что этот всплеск происходит из-за того, что графический процессор перегружается, пытаясь отрисовать пиксели как можно быстрее. Проблемы, отличные от необработанного количества пикселей, также могут привести к резкому увеличению этого показателя. Например, если инструмент «Отладка перерисовки графического процессора» показывает сильные перерисовки и всплески процесса , скорее всего, возникла проблема с перерисовкой.
Дополнительную информацию см. в разделе «Профиль скорости рендеринга графического процессора» .
Исправить перерисовку
Чтобы уменьшить или устранить перерисовку, вы можете сделать следующее:
- Удалите ненужные фоны в макетах.
- Сгладить иерархию представлений.
- Уменьшите прозрачность.
В этом разделе представлена информация о каждом из этих подходов.
Удалите ненужные фоны в макетах
По умолчанию макет не имеет фона, что означает, что он ничего не отображает сам по себе. Однако если макеты имеют фон, он может привести к перерисовке.
Вы можете улучшить производительность рендеринга, удалив ненужный фон. Ненужный фон может быть не виден, поскольку он полностью закрыт всем, что приложение рисует поверх него. Например, система может полностью закрывать фон родительского объекта, когда рисует поверх него дочерние представления.
Чтобы узнать, почему вы перерисовываете, посмотрите на иерархию в Инспекторе макетов . Вы можете искать фоны, которые не видны пользователю, и удалять их. Вы можете удалить ненужный фон везде, где есть много контейнеров, имеющих общий цвет фона. Вы можете установить фон окна в качестве основного цвета фона вашего приложения и оставить все контейнеры над ним без определенных значений фона.
Сгладить иерархию представлений
Современные макеты позволяют объединять и наслаивать виды для создания красивого дизайна. Однако это может снизить производительность из-за перерисовки, особенно в сценариях, где каждый составной объект представления непрозрачен, что требует отрисовки на экране как видимых, так и невидимых пикселей.
Если вы столкнулись с этой проблемой, вы можете повысить производительность, оптимизировав иерархию представлений, чтобы уменьшить количество перекрывающихся объектов пользовательского интерфейса. Дополнительные сведения о том, как это сделать, см. в разделе Производительность и просмотр иерархий .
Уменьшить прозрачность
Рендеринг прозрачных пикселей на экране, известный как альфа-рендеринг , является ключевым фактором, способствующим перерисовке. В отличие от стандартной перерисовки — когда система полностью скрывает существующие нарисованные пиксели, рисуя непрозрачные пиксели поверх них — прозрачные объекты требуют, чтобы существующие пиксели были сначала нарисованы, чтобы можно было получить правильное уравнение смешивания.
Визуальные эффекты, такие как прозрачная анимация, затухание и тени, предполагают некоторую прозрачность и поэтому могут в значительной степени способствовать перерисовке. В таких ситуациях вы можете улучшить перерисовку, уменьшив количество визуализируемых прозрачных объектов. Например, вы можете получить серый текст, нарисовав черный текст в TextView
с установленным для него полупрозрачным значением альфа. Однако вы можете получить тот же эффект с большей производительностью, нарисовав текст серым цветом.
Чтобы узнать больше о затратах на производительность, которые прозрачность накладывает на весь конвейер рисования, посмотрите видеоролик «Скрытые затраты на прозрачность» .
,На этой странице объясняется, что такое перерисовка, как ее диагностировать и способы ее устранения или смягчения.
Когда приложение рисует один и тот же пиксель более одного раза в одном кадре, это называется перерисовкой . В перерисовке обычно нет необходимости, и лучше всего ее устранить. Overdraw становится проблемой производительности, когда графический процессор тратит время на рендеринг пикселей, которые не влияют на то, что пользователь видит на экране.
О перерисовке
Под перерисовкой система прорисовывает пиксель на экране несколько раз за один кадр рендеринга. Например, если у вас есть несколько карточек пользовательского интерфейса, сложенных друг в друга, каждая карточка скрывает часть карты, расположенной под ней.
Однако системе все равно необходимо нарисовать скрытые части карт в стопке. Это связано с тем, что сложенные карты отображаются в соответствии с алгоритмом художника , то есть в порядке «сзади вперед». Эта последовательность рендеринга позволяет системе применять правильное альфа-смешение к полупрозрачным объектам, таким как тени.
Найдите проблемы с перерисовкой
Платформа предлагает следующие инструменты, которые помогут вам определить, влияет ли перерисовка на производительность вашего приложения.
Отладка инструмента перерисовки графического процессора
Инструмент Debug GPU Overdraw использует цветовое кодирование, чтобы показать, сколько раз ваше приложение отрисовывает каждый пиксель на экране. Чем выше это значение, тем больше вероятность того, что перерисовка повлияет на производительность вашего приложения.
Дополнительные сведения см. в разделе Визуализация перерисовки графического процессора .
Инструмент рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает время, необходимое на каждом этапе конвейера рендеринга для отображения одного кадра, в виде прокручиваемой гистограммы. Часть «Процесс» каждой полосы, выделенная оранжевым цветом, показывает, когда система заменяет буферы. Этот показатель дает важные сведения о перерисовке.
На менее производительных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд и попросить остальную систему подождать, пока она не сможет догнать его. На панели «Процесс» показано, что этот всплеск происходит из-за того, что графический процессор перегружается, пытаясь отрисовать пиксели как можно быстрее. Проблемы, отличные от необработанного количества пикселей, также могут привести к резкому увеличению этого показателя. Например, если инструмент «Отладка перерисовки графического процессора» показывает сильные перерисовки и всплески процесса , скорее всего, возникла проблема с перерисовкой.
Дополнительную информацию см. в разделе «Профиль скорости рендеринга графического процессора» .
Исправить перерисовку
Чтобы уменьшить или устранить перерисовку, вы можете сделать следующее:
- Удалите ненужные фоны в макетах.
- Сгладить иерархию представлений.
- Уменьшите прозрачность.
В этом разделе представлена информация о каждом из этих подходов.
Удалите ненужные фоны в макетах
По умолчанию макет не имеет фона, что означает, что он ничего не отображает сам по себе. Однако если макеты имеют фон, он может привести к перерисовке.
Вы можете улучшить производительность рендеринга, удалив ненужный фон. Ненужный фон может быть не виден, поскольку он полностью закрыт всем, что приложение рисует поверх него. Например, система может полностью закрывать фон родительского объекта, когда рисует поверх него дочерние представления.
Чтобы узнать, почему вы перерисовываете, посмотрите на иерархию в Инспекторе макетов . Вы можете искать фоны, которые не видны пользователю, и удалять их. Вы можете удалить ненужный фон везде, где есть много контейнеров, имеющих общий цвет фона. Вы можете установить фон окна в качестве основного цвета фона вашего приложения и оставить все контейнеры над ним без определенных значений фона.
Сгладить иерархию представлений
Современные макеты позволяют объединять и наслаивать виды для создания красивого дизайна. Однако это может снизить производительность из-за перерисовки, особенно в сценариях, где каждый составной объект представления непрозрачен, что требует отрисовки на экране как видимых, так и невидимых пикселей.
Если вы столкнулись с этой проблемой, вы можете повысить производительность, оптимизировав иерархию представлений, чтобы уменьшить количество перекрывающихся объектов пользовательского интерфейса. Дополнительные сведения о том, как это сделать, см. в разделе Производительность и просмотр иерархий .
Уменьшить прозрачность
Рендеринг прозрачных пикселей на экране, известный как альфа-рендеринг , является ключевым фактором, способствующим перерисовке. В отличие от стандартной перерисовки — когда система полностью скрывает существующие нарисованные пиксели, рисуя непрозрачные пиксели поверх них — прозрачные объекты требуют, чтобы существующие пиксели были сначала нарисованы, чтобы можно было получить правильное уравнение смешивания.
Визуальные эффекты, такие как прозрачная анимация, затухание и тени, предполагают некоторую прозрачность и поэтому могут в значительной степени способствовать перерисовке. В таких ситуациях вы можете улучшить перерисовку, уменьшив количество визуализируемых прозрачных объектов. Например, вы можете получить серый текст, нарисовав черный текст в TextView
с установленным для него полупрозрачным значением альфа. Однако вы можете получить тот же эффект с большей производительностью, нарисовав текст серым цветом.
Чтобы узнать больше о затратах на производительность, которые прозрачность накладывает на весь конвейер рисования, посмотрите видеоролик «Скрытые затраты на прозрачность» .
,На этой странице объясняется, что такое перерисовка, как ее диагностировать и способы ее устранения или смягчения.
Когда приложение рисует один и тот же пиксель более одного раза в одном кадре, это называется перерисовкой . В перерисовке обычно нет необходимости, и лучше всего ее устранить. Overdraw становится проблемой производительности, когда графический процессор тратит время на рендеринг пикселей, которые не влияют на то, что пользователь видит на экране.
О перерисовке
Под перерисовкой система прорисовывает пиксель на экране несколько раз за один кадр рендеринга. Например, если у вас есть несколько карточек пользовательского интерфейса, сложенных друг в друга, каждая карточка скрывает часть карты, расположенной под ней.
Однако системе все равно необходимо нарисовать скрытые части карт в стопке. Это связано с тем, что сложенные карты отображаются в соответствии с алгоритмом художника , то есть в порядке «сзади вперед». Эта последовательность рендеринга позволяет системе применять правильное альфа-смешение к полупрозрачным объектам, таким как тени.
Найдите проблемы с перерисовкой
Платформа предлагает следующие инструменты, которые помогут вам определить, влияет ли перерисовка на производительность вашего приложения.
Отладка инструмента перерисовки графического процессора
Инструмент Debug GPU Overdraw использует цветовое кодирование, чтобы показать, сколько раз ваше приложение отрисовывает каждый пиксель на экране. Чем выше это значение, тем больше вероятность того, что перерисовка повлияет на производительность вашего приложения.
Дополнительные сведения см. в разделе Визуализация перерисовки графического процессора .
Инструмент рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает время, необходимое на каждом этапе конвейера рендеринга для отображения одного кадра, в виде прокручиваемой гистограммы. Часть «Процесс» каждой полосы, выделенная оранжевым цветом, показывает, когда система заменяет буферы. Этот показатель дает важные сведения о перерисовке.
На менее производительных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд и попросить остальную систему подождать, пока она не сможет догнать его. На панели «Процесс» показано, что этот всплеск происходит из-за того, что графический процессор перегружается, пытаясь отрисовать пиксели как можно быстрее. Проблемы, отличные от необработанного количества пикселей, также могут привести к резкому увеличению этого показателя. Например, если инструмент «Отладка перерисовки графического процессора» показывает сильные перерисовки и всплески процесса , скорее всего, возникла проблема с перерисовкой.
Дополнительную информацию см. в разделе «Профиль скорости рендеринга графического процессора» .
Исправить перерисовку
Чтобы уменьшить или устранить перерисовку, вы можете сделать следующее:
- Удалите ненужные фоны в макетах.
- Сгладить иерархию представлений.
- Уменьшите прозрачность.
В этом разделе представлена информация о каждом из этих подходов.
Удалите ненужные фоны в макетах
По умолчанию макет не имеет фона, что означает, что он ничего не отображает сам по себе. Однако если макеты имеют фон, он может привести к перерисовке.
Вы можете улучшить производительность рендеринга, удалив ненужный фон. Ненужный фон может быть не виден, поскольку он полностью закрыт всем, что приложение рисует поверх него. Например, система может полностью закрывать фон родительского объекта, когда рисует поверх него дочерние представления.
Чтобы узнать, почему вы перерисовываете, посмотрите на иерархию в Инспекторе макетов . Вы можете искать фоны, которые не видны пользователю, и удалять их. Вы можете удалить ненужный фон везде, где есть много контейнеров, имеющих общий цвет фона. Вы можете установить фон окна в качестве основного цвета фона вашего приложения и оставить все контейнеры над ним без определенных значений фона.
Сгладить иерархию представлений
Современные макеты позволяют объединять и наслаивать виды для создания красивого дизайна. Однако это может снизить производительность из-за перерисовки, особенно в сценариях, где каждый составной объект представления непрозрачен, что требует отрисовки на экране как видимых, так и невидимых пикселей.
Если вы столкнулись с этой проблемой, вы можете повысить производительность, оптимизировав иерархию представлений, чтобы уменьшить количество перекрывающихся объектов пользовательского интерфейса. Дополнительные сведения о том, как это сделать, см. в разделе Производительность и просмотр иерархий .
Уменьшить прозрачность
Рендеринг прозрачных пикселей на экране, известный как альфа-рендеринг , является ключевым фактором, способствующим перерисовке. В отличие от стандартной перерисовки — когда система полностью скрывает существующие нарисованные пиксели, рисуя непрозрачные пиксели поверх них — прозрачные объекты требуют, чтобы существующие пиксели были сначала нарисованы, чтобы можно было получить правильное уравнение смешивания.
Визуальные эффекты, такие как прозрачная анимация, затухание и тени, предполагают некоторую прозрачность и поэтому могут в значительной степени способствовать перерисовке. В таких ситуациях вы можете улучшить перерисовку, уменьшив количество визуализируемых прозрачных объектов. Например, вы можете получить серый текст, нарисовав черный текст в TextView
с установленным для него полупрозрачным значением альфа. Однако вы можете получить тот же эффект с большей производительностью, нарисовав текст серым цветом.
Чтобы узнать больше о затратах на производительность, которые прозрачность накладывает на весь конвейер рисования, посмотрите видеоролик «Скрытые затраты на прозрачность» .
,На этой странице объясняется, что такое перерисовка, как ее диагностировать и способы ее устранения или смягчения.
Когда приложение рисует один и тот же пиксель более одного раза в одном кадре, это называется перерисовкой . В перерисовке обычно нет необходимости, и лучше всего ее устранить. Overdraw становится проблемой производительности, когда графический процессор тратит время на рендеринг пикселей, которые не влияют на то, что пользователь видит на экране.
О перерисовке
Под перерисовкой система прорисовывает пиксель на экране несколько раз за один кадр рендеринга. Например, если у вас есть несколько карточек пользовательского интерфейса, сложенных друг в друга, каждая карточка скрывает часть карты, расположенной под ней.
Однако системе все равно необходимо нарисовать скрытые части карт в стопке. Это связано с тем, что сложенные карты отображаются в соответствии с алгоритмом художника , то есть в порядке «сзади вперед». Эта последовательность рендеринга позволяет системе применять правильное альфа-смешение к полупрозрачным объектам, таким как тени.
Найдите проблемы с перерисовкой
Платформа предлагает следующие инструменты, которые помогут вам определить, влияет ли перерисовка на производительность вашего приложения.
Отладка инструмента перерисовки графического процессора
Инструмент Debug GPU Overdraw использует цветовое кодирование, чтобы показать, сколько раз ваше приложение отрисовывает каждый пиксель на экране. Чем выше это значение, тем больше вероятность того, что перерисовка повлияет на производительность вашего приложения.
Дополнительные сведения см. в разделе Визуализация перерисовки графического процессора .
Инструмент рендеринга профиля на графическом процессоре
Инструмент Profile GPU Rendering отображает время, необходимое на каждом этапе конвейера рендеринга для отображения одного кадра, в виде прокручиваемой гистограммы. Часть «Процесс» каждой полосы, выделенная оранжевым цветом, показывает, когда система заменяет буферы. Этот показатель дает важные сведения о перерисовке.
На менее производительных графических процессорах доступная скорость заполнения (скорость, с которой графический процессор может заполнять буфер кадра) может быть низкой. По мере увеличения количества пикселей, необходимых для отрисовки кадра, графическому процессору может потребоваться больше времени для обработки новых команд и попросить остальную систему подождать, пока она не сможет догнать его. На панели «Процесс» показано, что этот всплеск происходит из-за того, что графический процессор перегружается, пытаясь отрисовать пиксели как можно быстрее. Проблемы, отличные от необработанного количества пикселей, также могут привести к резкому увеличению этого показателя. Например, если инструмент «Отладка перерисовки графического процессора» показывает сильные перерисовки и всплески процесса , скорее всего, возникла проблема с перерисовкой.
Дополнительную информацию см. в разделе «Профиль скорости рендеринга графического процессора» .
Исправить перерисовку
Чтобы уменьшить или устранить перерисовку, вы можете сделать следующее:
- Удалите ненужные фоны в макетах.
- Сгладить иерархию представлений.
- Уменьшите прозрачность.
В этом разделе представлена информация о каждом из этих подходов.
Удалите ненужные фоны в макетах
По умолчанию макет не имеет фона, что означает, что он ничего не отображает сам по себе. Однако если макеты имеют фон, он может привести к перерисовке.
Вы можете улучшить производительность рендеринга, удалив ненужный фон. Ненужный фон может быть не виден, поскольку он полностью закрыт всем, что приложение рисует поверх него. Например, система может полностью закрывать фон родительского объекта, когда рисует поверх него дочерние представления.
Чтобы узнать, почему вы перерисовываете, посмотрите на иерархию в Инспекторе макетов . Вы можете искать фоны, которые не видны пользователю, и удалять их. Вы можете удалить ненужный фон везде, где есть много контейнеров, имеющих общий цвет фона. Вы можете установить фон окна в качестве основного цвета фона вашего приложения и оставить все контейнеры над ним без определенных значений фона.
Сгладить иерархию представлений
Современные макеты позволяют объединять и наслаивать виды для создания красивого дизайна. Однако это может снизить производительность из-за перерисовки, особенно в сценариях, где каждый составной объект представления непрозрачен, что требует отрисовки на экране как видимых, так и невидимых пикселей.
Если вы столкнулись с этой проблемой, вы можете повысить производительность, оптимизировав иерархию представлений, чтобы уменьшить количество перекрывающихся объектов пользовательского интерфейса. Дополнительные сведения о том, как это сделать, см. в разделе Производительность и просмотр иерархий .
Уменьшить прозрачность
Рендеринг прозрачных пикселей на экране, известный как альфа-рендеринг , является ключевым фактором, способствующим перерисовке. В отличие от стандартной перерисовки — когда система полностью скрывает существующие нарисованные пиксели, рисуя непрозрачные пиксели поверх них — прозрачные объекты требуют, чтобы существующие пиксели были сначала нарисованы, чтобы можно было получить правильное уравнение смешивания.
Визуальные эффекты, такие как прозрачная анимация, затухание и тени, предполагают некоторую прозрачность и поэтому могут в значительной степени способствовать перерисовке. В таких ситуациях вы можете улучшить перерисовку, уменьшив количество визуализируемых прозрачных объектов. Например, вы можете получить серый текст, нарисовав черный текст в TextView
с установленным для него полупрозрачным значением альфа. Однако вы можете получить тот же эффект с большей производительностью, нарисовав текст серым цветом.
Чтобы узнать больше о затратах на производительность, которые прозрачность накладывает на весь конвейер рисования, посмотрите видеоролик «Скрытые затраты на прозрачность» .