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