Аппаратный композитор HAL

HAL Hardware Composer (HWC) определяет наиболее эффективный способ составления буферов с помощью доступного оборудования. Как HAL, его реализация зависит от устройства и обычно выполняется изготовителем оборудования дисплея.

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

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

Последний подход может быть значительно более эффективным.

Возможности процессора дисплея значительно различаются. Количество наложений, независимо от того, могут ли слои вращаться или смешиваться, а также ограничения на позиционирование и перекрытие может быть сложно выразить через API. Чтобы учесть эти варианты, HWC выполняет следующие расчеты:

  1. SurfaceFlinger предоставляет HWC полный список слоев и спрашивает: «Как вы хотите с этим справиться?»
  2. HWC отвечает, отмечая каждый уровень как состав устройства или клиента.
  3. SurfaceFlinger заботится о любом клиенте, передавая выходной буфер HWC, и позволяет HWC обрабатывать все остальное.

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

Плоскости наложения могут быть менее эффективными, чем композиция GL, когда на экране ничего не меняется. Это особенно верно, когда содержимое наложения имеет прозрачные пиксели, а перекрывающиеся слои смешиваются. В таких случаях HWC может запросить состав GLES для некоторых или всех слоев и сохранить составной буфер. Если SurfaceFlinger запрашивает составление того же набора буферов, HWC может показать ранее составленный рабочий буфер. Это может продлить срок службы батареи неактивного устройства.

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