Począwszy od Androida 13 interfejs HAL Hardware Composer (HWC) jest zdefiniowany w
AIDL i wersja HIDL od
android.hardware.graphics.composer@2.1
dla
Wycofano reguły android.hardware.graphics.composer@2.4
.
Na tej stronie opisujemy różnice między AIDL a HAL HIDL dla HWC oraz wdrażanie i testowanie interfejsu AIDL HAL.
Z powodu zaletami oferowanymi przez AIDL, zachęcamy dostawców usług do wdrożenia Rozpoczęcie HAL kompozytora AIDL Android 13 zamiast HIDL. Zobacz Implementacja, w której znajdziesz więcej informacji.
Różnice między HAL AIDL i HIDL
Nowy HAL kompozytora AIDL o nazwie android.hardware.graphics.composer3
to
zdefiniowane w dokumencie IComposer.aidl
.
Udostępnia interfejs API podobny do HIDL HAL
android.hardware.graphics.composer@2.4
z tymi zmianami:
Usunięcie kolejki wiadomości (FMQ) w na cześć poleceń.
Interfejs AIDL HAL definiuje interfejs poleceń na podstawie ściśle określonego typu parcelable, w przeciwieństwie do poleceń serializowanych przez FMQ w HIDL. Ten zapewnia stabilny interfejs poleceń i czytelną definicję sposobu, ładunek polecenia jest interpretowany.
executeCommands
metoda jest zdefiniowana wIComposerClient.aidl
jakoCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
gdzie każde polecenie jest ściśle wpisywanym typem parcelable zdefiniowanym w
DisplayCommand.aidl
Odpowiedzi polecenia to pakiety parcelable wyraźnie zdefiniowane wCommandResultPayload.aidl
Usunięto metodę
IComposerClient.getClientTargetSupport
, ponieważ nie ma aktywnych klientów dla tej metody.Przedstawienie kolorów w postaci liczby zmiennoprzecinkowej, a nie bajtów, aby lepiej dopasować górny stos grafiki w Androidzie, jak określono w
ASurfaceTransaction_setColor
.Dodaliśmy nowe pola do kontrolowania treści HDR.
W panelu HAL AIDL mieszane stosy warstw SDR/HDR obsługują płynne przyciemnianie warstwy SDR, gdy na ekranie jest jednocześnie widoczna warstwa HDR.
Pole
brightness
w tabeliLayerCommand
pozwala SurfaceFlinger określić jasność poszczególnych warstw, dzięki czemu HWC przyciemnia w przestrzeni światła linearnego, a nie w przestrzeni gamma.Pole
brightness
w tabeliClientTargetPropertyWithBrightness
pozwala urządzeniu HWC określać jasność instrukcjaRenderEngine
czy przyciemnić warstwy SDR w komponencie klienta.dimmingStage
pozwala HWC skonfigurować, kiedy zawartość elementuRenderEngine
ma przyciemnić treść. Ten obsługuje zdefiniowane przez dostawcęColorModes
, które mogą preferować przyciemnienie w ekranie gamma aby umożliwić zdefiniowane przez dostawcę zwiększenie kontrastu w potokach kolorów.Dodanie nowego typu kompozycji
DISPLAY_DECORATION
wComposition.aidl
. do dekoracji ekranu.Niektóre urządzenia mają specjalny sprzęt, który optymalizuje dodawanie maski alfa, wygładza zaokrąglone rogi i wycięcia na wyświetlaczach. Urządzenia z takim sprzętem muszą zastosuj
IComposerClient.getDisplayDecorationSupport
do zwrócenia strukturyDisplayDecorationSupport
określonej w nowymDisplayDecorationSupport.aidl
Ta struktura opisujePixelFormat
iAlphaInterpretation
wyliczenia wymagane przez urządzenie. W ramach tej implementacji interfejs systemu oznacza parametr warstwa maski alfa jakoDISPLAY_DECORATION
, nowego typu kompozycji wykorzystującego dedykowany sprzęt.Dodanie nowego elementu
expectedPresentTime
doDisplayCommand.aidl
.Pole
expectedPresentTime
umożliwia usłudze SurfaceFlinger ustawienie oczekiwanego od chwili obecnej do momentu, gdy na ekranie muszą zostać wyświetlone bieżące treści. W związku z tym SurfaceFlinger wysyła obecne polecenie do implementacji przed co pozwala skupić się na większej ilości danych.Dodanie nowych interfejsów API w celu kontrolowania konfiguracji wyświetlania podczas rozruchu.
Korzystając z
BOOT_DISPLAY_CONFIG
, dostawcy mogą określić, że konfiguracja wyświetlacza rozruchowego jest obsługiwana.setBootDisplayConfig
,clearBootDisplayConfig
, igetPreferredBootDisplayConfig
metod korzystania zBOOT_DISPLAY_CONFIG
w następujący sposób:Korzystając z
setBootDisplayConfig
, platforma informuje dostawców o konfiguracji wyświetlania czasu uruchamiania. Dostawcy musi zapisywać się w pamięci podręcznej w konfiguracji wyświetlacza podczas rozruchu i uruchamiać w tej konfiguracji przy następnym uruchomieniu i uruchomić ponownie. Jeśli urządzenia nie można uruchomić w tej konfiguracji, dostawca musi znaleźć która odpowiada rozdzielczości i częstotliwości odświeżania tej konfiguracji. Jeśli nie, , dostawca powinien użyć swojej preferowanej konfiguracji wyświetlacza.Korzystając z
clearBootDisplayConfig
, informuje dostawców o konieczności wyczyszczenia konfiguracji wyświetlacza w trakcie rozruchu; podczas ponownego uruchamiania urządzenia z preferowaną konfiguracją wyświetlacza.Korzystając z
getPreferredBootDisplayConfig
, platforma wysyła zapytanie do preferowanego trybu uruchamiania dostawcy.
Jeśli konfiguracja wyświetlacza rozruchowego nie jest obsługiwana, te metody zwracają błąd
UNSUPPORTED
.Dodanie nowych interfejsów API do sterowania licznikiem czasu bezczynności wyświetlacza.
Korzystając z
DISPLAY_IDLE_TIMER
, Dostawcy mogą określić, że licznik braku aktywności jest zaimplementowany na potrzeby tego wyświetlacza. W stanie bezczynności ta opcja zmienia częstotliwość odświeżania na niższą. w celu oszczędzania baterii. Platforma używasetIdleTimerEnabled
by kontrolować czas oczekiwania, a w niektórych przypadkach go wyłączyć w celu w celu uniknięcia niepożądanej częstotliwości odświeżania podczas bezczynności.Korzystanie z narzędzia
IComposerCallback.onVsyncIdle
Wywołanie zwrotne wskazuje platformie, że wyświetlacz jest nieaktywny, a funkcjavsync
a jego częstotliwość się zmieniła. Platforma odpowiada na to wywołanie zwrotne, resetując swoje Model:vsync
. Wymusza ponowną synchronizację elementuvsync
przy następnej klatce i uczy się nowej Rytmvsync
.
Implementacja
Dostawcy nie są zobowiązani do wdrażania interfejsu AIDL HAL w Androidzie 13. Pamiętaj jednak: zachęca ich do wdrożenia AIDL HAL kompozytora zamiast wersji HIDL, aby korzystać z nowych funkcji i interfejsów API.
implementacji referencyjnej. dla interfejsu AIDL HAL HAL jest zaimplementowany w emulatorach Androida.
Testowanie
Aby przetestować implementację, uruchom narzędzie VtsHalGraphicsComposer3_TargetTest
.