HAL Hardware Composer (HWC) określa najbardziej wydajny sposób łączenia buforów z dostępnym sprzętem. Jako warstwa HAL jej implementacja jest zależna od urządzenia i zwykle jest wykonywana przez producenta sprzętu wyświetlającego.
Wartość tego podejścia jest łatwa do rozpoznania, gdy weźmie się pod uwagę płaszczyzny nakładki , które składają się z wielu buforów w sprzęcie wyświetlającym, a nie w GPU. Rozważmy na przykład typowy telefon z Androidem w orientacji pionowej, z paskiem stanu na górze, paskiem nawigacji na dole i zawartością aplikacji w każdym innym miejscu. Zawartość każdej warstwy znajduje się w oddzielnych buforach. Kompozycję można obsługiwać za pomocą jednej z następujących metod:
- Renderowanie zawartości aplikacji do bufora zarysowania, a następnie renderowanie nad nim paska stanu, paska nawigacyjnego na górze, a na koniec przekazanie bufora zarysowania do sprzętu wyświetlającego.
- Przekazanie wszystkich trzech buforów do sprzętu wyświetlającego i nakazanie mu odczytywania danych z różnych buforów dla różnych części ekranu.
To drugie podejście może być znacznie wydajniejsze.
Możliwości procesora wyświetlania znacznie się różnią. Liczba nakładek, niezależnie od tego, czy warstwy można obracać, czy mieszać, a ograniczenia dotyczące pozycjonowania i nakładania się mogą być trudne do wyrażenia za pomocą interfejsu API. Aby uwzględnić te opcje, HWC wykonuje następujące obliczenia:
- SurfaceFlinger udostępnia HWC pełną listę warstw i pyta: „Jak chcesz sobie z tym poradzić?”
- HWC odpowiada, oznaczając każdą warstwę jako kompozycję urządzenia lub klienta.
- SurfaceFlinger zajmuje się każdym klientem, przekazując bufor wyjściowy do HWC, a HWC zajmuje się resztą.
Ponieważ dostawcy sprzętu mogą dostosować kod decyzyjny do własnych potrzeb, możliwe jest uzyskanie najlepszej wydajności z każdego urządzenia.
Płaszczyzny nakładki mogą być mniej wydajne niż kompozycja GL, gdy nic na ekranie się nie zmienia. Jest to szczególnie ważne, gdy zawartość nakładki ma przezroczyste piksele, a nakładające się warstwy są mieszane. W takich przypadkach HWC może zażądać kompozycji GLES dla niektórych lub wszystkich warstw i zachować bufor złożony. Jeśli SurfaceFlinger poprosi o skomponowanie tego samego zestawu buforów, HWC może pokazać poprzednio skomponowany bufor zarysowania. Może to wydłużyć żywotność baterii nieaktywnego urządzenia.
Urządzenia z Androidem zazwyczaj obsługują cztery płaszczyzny nakładki. Próba skomponowania większej liczby warstw niż nakładek powoduje, że system wykorzystuje dla niektórych z nich kompozycję GLES, co oznacza, że liczba warstw używanych przez aplikację może mieć wymierny wpływ na zużycie energii i wydajność.