Аппаратный компоновщик (HWC) HAL определяет наиболее эффективный способ объединения буферов с доступным оборудованием. Как HAL, его реализация зависит от устройства и обычно выполняется OEM-производителем аппаратного обеспечения дисплея.
Ценность этого подхода легко понять, когда вы рассматриваете плоскости наложения , которые объединяют несколько буферов в оборудовании дисплея, а не в графическом процессоре. Например, рассмотрим типичный Android-телефон в портретной ориентации, со строкой состояния вверху, панелью навигации внизу и содержимым приложений повсюду. Содержимое каждого слоя находится в отдельных буферах. Вы можете обрабатывать композицию, используя любой из следующих методов:
- Рендеринг содержимого приложения в рабочий буфер, затем визуализация строки состояния поверх него, панели навигации поверх нее и, наконец, передача рабочего буфера аппаратному обеспечению дисплея.
- Передача всех трех буферов оборудованию дисплея и указание ему считывать данные из разных буферов для разных частей экрана.
Последний подход может быть значительно более эффективным.
Возможности процессора дисплея существенно различаются. Количество наложений, возможность поворота или смешивания слоев, а также ограничения на позиционирование и перекрытие могут быть сложными для выражения через API. Чтобы учесть эти варианты, HWC выполняет следующие расчеты:
- SurfaceFlinger предоставляет HWC полный список слоев и спрашивает: «Как вы хотите с этим справиться?»
- В ответ HWC помечает каждый слой как устройство или клиентскую композицию.
- SurfaceFlinger заботится о любом клиенте, передавая буфер вывода в HWC, и позволяет HWC обрабатывать все остальное.
Поскольку поставщики оборудования могут настраивать код принятия решений по индивидуальному заказу, можно добиться максимальной производительности от каждого устройства.
Плоскости наложения могут быть менее эффективными, чем композиция GL, когда на экране ничего не меняется. Это особенно верно, когда содержимое наложения имеет прозрачные пиксели, а перекрывающиеся слои смешиваются. В таких случаях HWC может запросить композицию GLES для некоторых или всех слоев и сохранить объединенный буфер. Если SurfaceFlinger запрашивает компоновку одного и того же набора буферов, HWC может показать ранее составленный временной буфер. Это может увеличить срок службы батареи бездействующего устройства.
Устройства Android обычно поддерживают четыре плоскости наложения. Попытка скомпоновать больше слоев, чем наложений, приводит к тому, что система использует композицию GLES для некоторых из них, а это означает, что количество слоев, используемых приложением, может иметь ощутимое влияние на энергопотребление и производительность.