Komponent sprzętowy (HWC) decyduje o najskuteczniejszym sposobie łączenia buforów za pomocą dostępnego sprzętu. Jako interfejs HAL jest on implementowany w zależności od urządzenia i zwykle jest wykonywany przez producenta sprzętu wyświetlacza.
Wartość tego podejścia jest łatwa do zrozumienia, gdy weźmiemy pod uwagę płaszczyzny nakładek, które łączą wiele buforów w sprzęcie wyświetlacza, a nie na karcie graficznej. Weźmy na przykład typowy telefon z Androidem w orientacji pionowej z paskiem stanu u góry, paskiem nawigacyjnym u dołu, a treścią aplikacji w pozostałych miejscach. Zawartość każdej warstwy znajduje się w osobnych buforach. Kompozycję możesz dostosować na jeden z tych sposobów:
- Renderowanie treści aplikacji w buforze pomocniczym, a następnie renderowanie paska stanu i paska nawigacyjnego, a na końcu przekazanie bufora pomocniczego do wyświetlacza.
- Przekazywanie wszystkich 3 buforów na wyświetlacz i instruowanie go do odczytywania danych z różnych buforów w różnych częściach ekranu.
To drugie podejście może być znacznie wydajniejsze.
Możliwości procesora wyświetlacza różnią się znacznie. Liczba nakładek, możliwość obracania lub mieszania warstw oraz ograniczenia dotyczące pozycjonowania i nakładania mogą być trudne do wyrażenia za pomocą interfejsu API. Aby uwzględnić te opcje, HWC wykonuje te obliczenia:
- SurfaceFlinger przekazuje HWC pełną listę warstw i pyta: „Jak chcesz to zrobić?”
- HWC reaguje, oznaczając każdą warstwę jako kompozycję urządzenia lub klienta.
- SurfaceFlinger obsługuje dowolnego klienta, przekazując bufor wyjściowy do HWC, a HWC zajmuje się resztą.
Producenci sprzętu mogą dostosowywać kod do podejmowania decyzji, dzięki czemu można uzyskać najlepszą wydajność każdego urządzenia.
Gdy na ekranie nic się nie zmienia, płaszczyzny nakładek mogą być mniej wydajne niż kompozycja GL. Dotyczy to zwłaszcza sytuacji, gdy nakładka zawiera przezroczyste piksele, a nachodzące na siebie warstwy są mieszane. W takich przypadkach HWC może poprosić o kompozycję GLES dla niektórych lub wszystkich warstw i zatrzymać zbufor złożony. Jeśli SurfaceFlinger poprosi o złożenie tego samego zestawu buforów, HWC może wyświetlić wcześniej złożony bufor roboczy. Może to wydłużyć czas pracy nieaktywnego urządzenia.
Urządzenia z Androidem zwykle obsługują 4 płaszczyzny nakładki. Próba złożenia większej liczby warstw niż nakładek powoduje, że system używa do niektórych z nich kompozycji GLES, co oznacza, że liczba warstw używanych przez aplikację może mieć zauważalny wpływ na zużycie energii i wydajność.