Hardware Composer HAL

Die Hardware Composer (HWC) HAL bestimmt die effizienteste Methode zum Compositing von Puffern mit der verfügbaren Hardware. Als HAL ist die Implementierung gerätespezifisch und wird in der Regel vom OEM der Displayhardware vorgenommen.

Der Wert dieses Ansatzes wird deutlich, wenn man Overlay-Ebenen betrachtet, bei denen mehrere Puffer in der Displayhardware und nicht auf der GPU zusammengesetzt werden. Betrachten Sie beispielsweise ein typisches Android-Smartphone im Hochformat mit der Statusleiste oben, der Navigationsleiste unten und App-Inhalten überall sonst. Die Inhalte der einzelnen Ebenen befinden sich in separaten Puffern. Sie können die Komposition mit einer der folgenden Methoden verarbeiten:

  • Der App-Inhalt wird in einem Scratch-Buffer gerendert, dann wird die Statusleiste darüber gerendert, die Navigationsleiste darüber und schließlich wird der Scratch-Buffer an die Displayhardware übergeben.
  • Alle drei Puffer werden an die Displayhardware übergeben und diese wird angewiesen, Daten für verschiedene Teile des Bildschirms aus verschiedenen Puffern zu lesen.

Letzterer Ansatz kann deutlich effizienter sein.

Die Funktionen von Displayprozessoren variieren erheblich. Die Anzahl der Overlays, die Möglichkeit, Ebenen zu drehen oder zu mischen, sowie Einschränkungen hinsichtlich der Positionierung und Überlappung lassen sich nur schwer über eine API ausdrücken. Um diese Optionen zu berücksichtigen, führt der HWC die folgenden Berechnungen durch:

  1. SurfaceFlinger stellt HWC eine vollständige Liste der Ebenen zur Verfügung und fragt: „Wie möchtest du das handhaben?“
  2. HWC reagiert darauf, indem jede Ebene als Geräte- oder Client-Zusammensetzung gekennzeichnet wird.
  3. SurfaceFlinger kümmert sich um alle Clients, übergibt den Ausgabepuffer an HWC und lässt HWC den Rest erledigen.

Da Hardwareanbieter Entscheidungsfindungscode anpassen können, ist es möglich, die beste Leistung aus jedem Gerät herauszuholen.

Overlay-Ebenen sind möglicherweise weniger effizient als die GL-Zusammensetzung, wenn sich auf dem Bildschirm nichts ändert. Das gilt insbesondere, wenn Overlay-Inhalte transparente Pixel haben und sich überlappende Ebenen überblendet werden. In solchen Fällen kann der HWC die GLES-Zusammensetzung für einige oder alle Ebenen anfordern und den zusammengesetzten Puffer beibehalten. Wenn SurfaceFlinger anfordert, dieselben Puffer zu kombinieren, kann das HWC den zuvor kombinierten Scratch-Puffer anzeigen. Dadurch kann die Akkulaufzeit eines inaktiven Geräts verlängert werden.

Android-Geräte unterstützen in der Regel vier Overlay-Ebenen. Wenn Sie versuchen, mehr Ebenen als Overlays zusammenzufügen, verwendet das System für einige von ihnen die GLES-Zusammensetzung. Die Anzahl der von einer App verwendeten Ebenen kann sich also messbar auf den Stromverbrauch und die Leistung auswirken.