À partir d'Android 13, le HAL Hardware Composer (HWC) est défini dans AIDL, et les versions HIDL allant de android.hardware.graphics.composer@2.1
à android.hardware.graphics.composer@2.4
sont obsolètes.
Cette page décrit les différences entre les HAL AIDL et HIDL pour le HWC, ainsi que l'implémentation et le test du HAL AIDL.
En raison des avantages offerts par AIDL, les fournisseurs sont encouragés à implémenter le HAL de compositeur AIDL à partir d'Android 13 au lieu de la version HIDL. Pour en savoir plus, consultez la section Implémentation.
Différences entre les HAL AIDL et HIDL
Le nouveau HAL de compositeur AIDL, nommé android.hardware.graphics.composer3
, est défini dans IComposer.aidl
.
Elle expose une API semblable à la HAL HIDL android.hardware.graphics.composer@2.4
avec les modifications suivantes :
Suppression de la file d'attente de messages rapides (FMQ) au profit des commandes pouvant être sérialisées.
Le HAL AIDL définit l'interface de commande basée sur des types de données Parcelable fortement typés, contrairement aux commandes sérialisées sur FMQ dans HIDL. Cela fournit une interface stable pour les commandes et une définition plus lisible de la façon dont la charge utile de la commande est interprétée.
La méthode
executeCommands
est définie dansIComposerClient.aidl
comme suit :CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
où chaque commande est un type Parcelable fortement typé défini dans
DisplayCommand.aidl
. Les réponses aux commandes sont des éléments Parcelable fortement typés définis dansCommandResultPayload.aidl
.Suppression de
IComposerClient.getClientTargetSupport
, car aucun client actif n'utilise cette méthode.Représentation des couleurs sous forme de valeurs flottantes plutôt que d'octets pour mieux s'aligner sur la pile graphique supérieure d'Android, comme défini dans
ASurfaceTransaction_setColor
.Ajout de nouveaux champs pour contrôler le contenu HDR.
Dans l'AIDL HAL, les piles de calques SDR/HDR mixtes permettent d'assombrir facilement les calques SDR lorsqu'un calque HDR est simultanément à l'écran.
Le champ
brightness
dansLayerCommand
permet à SurfaceFlinger de spécifier une luminosité par calque, de sorte que le HWC diminue la luminosité du contenu du calque dans l'espace de luminosité linéaire, par opposition à l'espace gamma.Le champ
brightness
dansClientTargetPropertyWithBrightness
permet au HWC de spécifier l'espace de luminosité pour la composition du client et d'indiquer àRenderEngine
s'il faut atténuer les calques SDR dans la composition du client.Le champ
dimmingStage
permet au HWC de configurer le moment oùRenderEngine
doit atténuer le contenu. Cela permet de prendre en compte lesColorModes
définis par le fournisseur, qui peuvent préférer une atténuation dans l'espace gamma, afin d'autoriser les améliorations de contraste définies par le fournisseur dans leurs pipelines de couleurs.Ajout d'un nouveau type de composition
DISPLAY_DECORATION
dansComposition.aidl
pour les décorations d'écran.Certains appareils disposent d'un matériel dédié pour optimiser le dessin du masque alpha qui adoucit les angles arrondis et les encoches sur les écrans. Les appareils dotés de ce matériel doivent implémenter
IComposerClient.getDisplayDecorationSupport
pour renvoyer une structureDisplayDecorationSupport
telle que définie dans le nouveauDisplayDecorationSupport.aidl
. Cette structure décrit les énumérationsPixelFormat
etAlphaInterpretation
requises par l'appareil. Lors de cette implémentation, l'UI système marque le calque de masque alpha commeDISPLAY_DECORATION
, un nouveau type de composition qui tire parti du matériel dédié.Ajout d'un champ
expectedPresentTime
àDisplayCommand.aidl
.Le champ
expectedPresentTime
permet à SurfaceFlinger de définir l'heure de présentation prévue à laquelle le contenu actuel doit être affiché à l'écran. Avec cette fonctionnalité, SurfaceFlinger envoie une commande de présentation à l'implémentation à l'avance, ce qui lui permet de mettre en pipeline une plus grande partie du travail de composition.Ajout de nouvelles API pour contrôler la configuration de l'affichage au démarrage.
À l'aide de
BOOT_DISPLAY_CONFIG
, les fournisseurs peuvent spécifier que la configuration de l'écran de démarrage est prise en charge. Les méthodessetBootDisplayConfig
,clearBootDisplayConfig
etgetPreferredBootDisplayConfig
utilisentBOOT_DISPLAY_CONFIG
comme suit :En utilisant
setBootDisplayConfig
, le framework informe les fournisseurs de la configuration d'affichage au moment du démarrage. Les fournisseurs doivent mettre en cache la configuration de l'écran de démarrage et démarrer dans cette configuration au prochain redémarrage. Si l'appareil ne parvient pas à démarrer avec cette configuration, le fournisseur doit trouver une configuration correspondant à la résolution et à la fréquence d'actualisation de cette configuration. Si aucune configuration de ce type n'existe, le fournisseur doit utiliser la configuration d'affichage de son choix.À l'aide de
clearBootDisplayConfig
, le framework informe les fournisseurs qu'ils doivent effacer la configuration de l'écran de démarrage et démarrer avec la configuration d'écran de leur choix lors du prochain redémarrage.À l'aide de
getPreferredBootDisplayConfig
, le framework interroge le mode de démarrage préféré du fournisseur.
Lorsque la configuration de l'écran de démarrage n'est pas prise en charge, ces méthodes renvoient une valeur de
UNSUPPORTED
.Ajout de nouvelles API pour contrôler le minuteur d'inactivité de l'écran.
À l'aide de
DISPLAY_IDLE_TIMER
, les fournisseurs peuvent spécifier qu'un minuteur d'inactivité est implémenté par le fournisseur pour cet affichage. Lorsqu'il est inactif, cette fonctionnalité réduit la fréquence d'actualisation pour économiser de l'énergie. La plate-forme utilisesetIdleTimerEnabled
pour contrôler le délai d'expiration du minuteur et, dans certains cas, pour le désactiver afin d'éviter les changements de fréquence d'actualisation indésirables en cas d'inactivité.L'utilisation du rappel
IComposerCallback.onVsyncIdle
indique à la plate-forme que l'écran est inactif et que la cadencevsync
a changé. La plate-forme répond à ce rappel en réinitialisant son modèlevsync
. Il force une resynchronisationvsync
sur la prochaine image et apprend la nouvelle cadencevsync
.
Implémentation
Les fournisseurs ne sont pas tenus d'implémenter l'AIDL HAL pour Android 13. Toutefois, ils sont encouragés à implémenter le HAL de compositeur AIDL au lieu de la version HIDL pour utiliser les nouvelles fonctionnalités et API.
Une implémentation de référence pour l'AIDL HWC HAL est implémentée dans les émulateurs Android.
Tests
Pour tester votre implémentation, exécutez VtsHalGraphicsComposer3_TargetTest
.