Compositore hardware HAL

L'HAL Hardware Composer (HWC) determina il modo più efficiente per comporre i buffer con l'hardware disponibile. In quanto HAL, la sua implementazione è specifica del dispositivo e di solito viene eseguita dall'OEM dell'hardware del display.

Il valore di questo approccio è facile da riconoscere se si considerano i piani di sovrapposizione , che compongono più buffer nell'hardware del display anziché nella GPU. Ad esempio, considera un tipico telefono Android con orientamento verticale, con la barra di stato in alto, la barra di navigazione in basso e il contenuto dell'app ovunque. I contenuti di ogni livello sono in buffer separati. Puoi gestire la composizione utilizzando uno dei seguenti metodi:

  • Eseguire il rendering del contenuto dell'app in uno scratch buffer, quindi eseguire il rendering della barra di stato su di esso, la barra di navigazione in cima a quella e infine passare lo scratch buffer all'hardware del display.
  • Passare tutti e tre i buffer all'hardware del display e istruirlo a leggere i dati da buffer diversi per parti diverse dello schermo.

Quest'ultimo approccio può essere significativamente più efficiente.

Le capacità del processore del display variano in modo significativo. Il numero di sovrapposizioni, indipendentemente dal fatto che i livelli possano essere ruotati o uniti, e le restrizioni sul posizionamento e sulla sovrapposizione possono essere difficili da esprimere tramite un'API. Per soddisfare queste opzioni, l'HWC esegue i seguenti calcoli:

  1. SurfaceFlinger fornisce a HWC un elenco completo di livelli e chiede: "Come vuoi gestirlo?"
  2. HWC risponde contrassegnando ogni livello come composizione dispositivo o client.
  3. SurfaceFlinger si prende cura di qualsiasi client, passando il buffer di output a HWC e lascia che HWC gestisca il resto.

Poiché i fornitori di hardware possono personalizzare il codice decisionale su misura, è possibile ottenere le migliori prestazioni da ogni dispositivo.

I piani di sovrapposizione possono essere meno efficienti della composizione GL quando nulla sullo schermo cambia. Ciò è particolarmente vero quando i contenuti sovrapposti hanno pixel trasparenti e i livelli sovrapposti sono fusi. In questi casi, l'HWC può richiedere la composizione GLES per alcuni o tutti gli strati e conservare il buffer composito. Se SurfaceFlinger chiede di comporre lo stesso set di buffer, l'HWC può mostrare il buffer scratch precedentemente composto. Ciò può migliorare la durata della batteria di un dispositivo inattivo.

I dispositivi Android in genere supportano quattro piani di sovrapposizione. Il tentativo di comporre più livelli rispetto alle sovrapposizioni fa sì che il sistema utilizzi la composizione GLES per alcuni di essi, il che significa che il numero di livelli utilizzati da un'app può avere un impatto misurabile sul consumo energetico e sulle prestazioni.