Kompozytor sprzętu HAL

Hardware Composer (HWC) HAL określa najbardziej efektywny sposób łączenia buforów z dostępnym sprzętem. Implementacja warstwy HAL jest specyficzna dla urządzenia i zwykle wykonywana jest przez producenta OEM sprzętu wyświetlającego.

Wartość tego podejścia łatwo rozpoznać, biorąc pod uwagę płaszczyzny nakładek , 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 pozostałych miejscach. 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 tymczasowego, następnie renderowanie nad nim paska stanu, paska nawigacji na górze i na koniec przekazanie bufora tymczasowego do sprzętu wyświetlającego.
  • Przekazanie wszystkich trzech buforów do sprzętu wyświetlającego i polecenie mu odczytania danych z różnych buforów dla różnych części ekranu.

To drugie podejście może być znacznie skuteczniejsze.

Możliwości procesorów graficznych znacznie się różnią. Liczba nakładek, możliwość obracania lub mieszania warstw oraz 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:

  1. SurfaceFlinger udostępnia HWC pełną listę warstw i pyta: „Jak chcesz sobie z tym poradzić?”
  2. HWC odpowiada, oznaczając każdą warstwę jako urządzenie lub kompozycję klienta.
  3. SurfaceFlinger zajmuje się każdym klientem, przekazując bufor wyjściowy do HWC i pozwala HWC zająć się resztą.

Ponieważ dostawcy sprzętu mogą dostosować kod decyzyjny do indywidualnych potrzeb, możliwe jest uzyskanie najlepszej wydajności z każdego urządzenia.

Płaszczyzny nakładek mogą być mniej wydajne niż kompozycja GL, gdy nic na ekranie się nie zmienia. Jest to szczególnie prawdziwe, gdy zawartość nakładki ma przezroczyste piksele, a nakładające się warstwy są mieszane. W takich przypadkach HWC może zażądać składu GLES dla niektórych lub wszystkich warstw i zatrzymać złożony bufor. Jeśli SurfaceFlinger poprosi o złożenie tego samego zestawu buforów, HWC może wyświetlić wcześniej skomponowany bufor tymczasowy. Może to wydłużyć żywotność baterii bezczynnego urządzenia.

Urządzenia z systemem Android zazwyczaj obsługują cztery płaszczyzny nakładek. Próba połączenia większej liczby warstw niż nakładek powoduje, że system w przypadku niektórych z nich wykorzystuje kompozycję GLES, co oznacza, że ​​liczba warstw używanych przez aplikację może mieć wymierny wpływ na zużycie energii i wydajność.