Compositore hardware HAL

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

Il valore di questo approccio è facile da riconoscere quando si considera sovrapposizione aerei, che compositi buffer multipli in hardware di visualizzazione piuttosto che la 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 per ogni livello sono in buffer separati. Puoi gestire la composizione utilizzando uno dei seguenti metodi:

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

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

Le capacità del processore video variano in modo significativo. Il numero di sovrapposizioni, se i livelli possono 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 occupa di qualsiasi client, passando il buffer di output a HWC e consente a HWC di gestire il resto.

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

I piani di sovrapposizione possono essere meno efficienti della composizione GL quando non cambia nulla sullo schermo. Ciò è particolarmente vero quando i contenuti della sovrapposizione hanno pixel trasparenti e i livelli sovrapposti sono uniti. In tali casi, l'HWC può richiedere la composizione GLES per alcuni o tutti i livelli e conservare il buffer composito. Se SurfaceFlinger chiede di comporre lo stesso set di buffer, l'HWC può mostrare lo scratch buffer 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 agli overlay 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.