A partire da Android 13, l'HWC (Hardware Composer) è definito in
AIDL e le versioni HIDL che vanno da
android.hardware.graphics.composer@2.1
per
I campi android.hardware.graphics.composer@2.4
sono deprecati.
In questa pagina vengono descritte le differenze tra l'AIDL e l'HIDL HAL per l'architettura HWC e implementazione e test dell'AIDL HAL.
A causa dei vantaggi offerti da AIDL, i fornitori sono invitati a implementare Avvio dell'HAL per il compositore AIDL Android 13 anziché la versione HIDL. Consulta le Implementazione per ulteriori informazioni.
Differenze tra HAL AIDL e HIDL
Il nuovo compositore AIDL HAL, denominato android.hardware.graphics.composer3
, è
definita in IComposer.aidl
.
Espone un'API simile all'HAL (HIDL HAL)
android.hardware.graphics.composer@2.4
con le seguenti modifiche:
Rimozione della coda di messaggi rapidi (FMQ) in dei comandi assegnabili.
AIDL HAL definisce l'interfaccia di comando in base ai modelli del tipo "parcelable" in contrasto con i comandi serializzati su FMQ in HIDL. Questo offre un'interfaccia stabile per i comandi e una definizione più leggibile di come viene interpretato il payload del comando.
La
executeCommands
è definito inIComposerClient.aidl
comeCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
in cui ogni comando è un tipo di dati "parcelable" molto digitato e definito
DisplayCommand.aidl
Le risposte ai comandi sono particellari tipicamente digitate definite inCommandResultPayload.aidl
Rimozione di
IComposerClient.getClientTargetSupport
perché non ci sono client attivi per questo metodo.Rappresentazione dei colori come numeri in virgola mobile anziché byte per allinearsi meglio con stack di elementi grafici superiore in Android come definito in
ASurfaceTransaction_setColor
.Aggiunta di nuovi campi per il controllo dei contenuti HDR.
Nell'AIDL HAL, gli stack di livelli misti SDR/HDR supportano l'oscuramento continuo dei Livelli SDR quando un livello HDR è visualizzato contemporaneamente sullo schermo.
Il campo
brightness
inLayerCommand
consente a SurfaceFlinger di specificare una luminosità per livello, in modo che HWC attenua la luminosità dei contenuti dello strato nello spazio di luce lineare, anziché nello spazio gamma.Il campo
brightness
inClientTargetPropertyWithBrightness
consente a HWC di specificare lo spazio di luminosità per la composizione del client e indicaRenderEngine
se attenuare i livelli SDR nella composizione del client.La
dimmingStage
consente a HWC di configurare quandoRenderEngine
deve oscurare i contenuti. Questo supportaColorModes
, definito dal fornitore, che potrebbe preferire la riduzione della gamma per consentire miglioramenti del contrasto definiti dal fornitore nelle pipeline di colore.È stato aggiunto un nuovo tipo di composizione
DISPLAY_DECORATION
inComposition.aidl
per le decorazioni dello schermo.Alcuni dispositivi dispongono di hardware dedicato per ottimizzare disegnando la maschera alfa che smussa angoli arrotondati e ritagli sui display. I dispositivi con questo hardware devono implementare
IComposerClient.getDisplayDecorationSupport
per restituire una strutturaDisplayDecorationSupport
come definita nel nuovoDisplayDecorationSupport.aidl
. Questa struttura descrive lePixelFormat
eAlphaInterpretation
enum richieste dal dispositivo. In questa implementazione, l'UI di sistema contrassegna livello maschera alfa comeDISPLAY_DECORATION
, un nuovo tipo di composizione che sfrutta l'hardware dedicato.È stata aggiunta una nuova
expectedPresentTime
. suDisplayCommand.aidl
.Il campo
expectedPresentTime
consente a SurfaceFlinger di impostare il valore previsto dall'ora presente fino a quando i contenuti correnti devono essere visualizzati sullo schermo. Con questo , SurfaceFlinger invia un comando Present all'implementazione prima più tempo, permettendo di portare a termine una parte maggiore del lavoro di composizione.Aggiunta di nuove API per controllare la configurazione del display all'avvio.
Con
BOOT_DISPLAY_CONFIG
, i fornitori possono specificare che la configurazione di avvio del display è supportata. LasetBootDisplayConfig
,clearBootDisplayConfig
, egetPreferredBootDisplayConfig
metodi che utilizzanoBOOT_DISPLAY_CONFIG
come segue:Con
setBootDisplayConfig
, comunica ai fornitori la configurazione della visualizzazione al momento di avvio. Fornitori deve memorizzare nella cache la configurazione di visualizzazione dell'avvio e avviarla in questa configurazione riavvio. Se il dispositivo non si avvia in questa configurazione, il fornitore deve trovare un che corrisponde alla risoluzione e alla frequenza di aggiornamento di questa configurazione. In caso contrario, esistente, il fornitore deve usare la sua configurazione di visualizzazione preferita.Con
clearBootDisplayConfig
, il framework comunica ai fornitori di cancellare la configurazione di avvio della visualizzazione, e nella configurazione display che preferisce al riavvio successivo.Con
getPreferredBootDisplayConfig
, il framework esegue una query in modalità di avvio preferita dal fornitore.
Quando la configurazione del display di avvio non è supportata, questi metodi restituiscono un valore pari a
UNSUPPORTED
.Aggiunta di nuove API per controllare il timer di inattività del display.
Con
DISPLAY_IDLE_TIMER
, i fornitori possono specificare di implementare un timer di inattività per questa visualizzazione. In caso di inattività, questa funzionalità modifica la frequenza di aggiornamento impostandola su un valore inferiore per risparmiare energia. La piattaforma utilizzasetIdleTimerEnabled
controllare il timeout del timer e, in alcuni casi, disattivarlo per per impedire interruttori indesiderati della frequenza di aggiornamento in caso di inattività.Utilizzo del
IComposerCallback.onVsyncIdle
il callback indica alla piattaforma che il display è inattivo e il pulsantevsync
la frequenza è cambiata. La piattaforma risponde a questo callback reimpostando il Modellovsync
. Forza la risincronizzazione divsync
al frame successivo e apprende il nuovo Cadenza divsync
.
Implementazione
I fornitori non sono tenuti a implementare l'AIDL HAL per Android 13. Tuttavia, sono incoraggiati a implementare l'AIDL Composer HAL anziché la versione HIDL per utilizzare le nuove funzionalità e le nuove API.
Un'implementazione di riferimento per AIDL HWC HAL è implementato negli emulatori Android.
Test
Per testare l'implementazione, esegui VtsHalGraphicsComposer3_TargetTest
.