Der Hardware Composer (HWC) HAL ermittelt die effizienteste Methode zum Zusammensetzen von Puffern mit der verfügbaren Hardware. Als HAL ist die Implementierung gerätespezifisch und wird normalerweise vom OEM der Display-Hardware durchgeführt.
Der Wert dieses Ansatzes lässt sich leicht erkennen, wenn man Overlay-Ebenen betrachtet, die mehrere Puffer in der Anzeigehardware und nicht in der GPU zusammenfassen. Stellen Sie sich zum Beispiel ein typisches Android-Telefon im Hochformat vor, mit der Statusleiste oben, der Navigationsleiste unten und App-Inhalten überall sonst. Die Inhalte für jede Ebene befinden sich in separaten Puffern. Sie können die Komposition mit einer der folgenden Methoden bearbeiten:
- Rendern Sie den App-Inhalt in einen Arbeitspuffer, rendern Sie dann die Statusleiste darüber, die Navigationsleiste darüber und übergeben Sie schließlich den Arbeitspuffer an die Anzeigehardware.
- Übergabe aller drei Puffer an die Anzeigehardware und Anweisung an diese, Daten aus verschiedenen Puffern für verschiedene Teile des Bildschirms zu lesen.
Letzterer Ansatz kann deutlich effizienter sein.
Die Fähigkeiten des Anzeigeprozessors variieren erheblich. Die Anzahl der Überlagerungen, ob Ebenen gedreht oder gemischt werden können sowie Einschränkungen bei Positionierung und Überlappung können über eine API schwer auszudrücken sein. Um diese Optionen zu berücksichtigen, führt das HWC die folgenden Berechnungen durch:
- SurfaceFlinger stellt HWC eine vollständige Liste der Ebenen zur Verfügung und fragt: „Wie wollen Sie damit umgehen?“
- HWC reagiert, indem es jede Ebene als Geräte- oder Clientzusammensetzung markiert.
- SurfaceFlinger kümmert sich um jeden Client, übergibt den Ausgabepuffer an HWC und überlässt HWC den Rest.
Da Hardwareanbieter den Entscheidungscode individuell anpassen können, ist es möglich, die beste Leistung aus jedem Gerät herauszuholen.
Überlagerungsebenen sind möglicherweise weniger effizient als die GL-Komposition, wenn sich auf dem Bildschirm nichts ändert. Dies gilt insbesondere dann, wenn Overlay-Inhalte transparente Pixel haben und überlappende Ebenen gemischt werden. In solchen Fällen kann der HWC die GLES-Zusammensetzung für einige oder alle Schichten anfordern und den zusammengesetzten Puffer behalten. Wenn SurfaceFlinger die Zusammenstellung desselben Puffersatzes anfordert, kann das HWC den zuvor zusammengestellten Arbeitspuffer anzeigen. Dies kann die Akkulaufzeit eines inaktiven Geräts verbessern.
Android-Geräte unterstützen normalerweise vier Overlay-Ebenen. Der Versuch, mehr Ebenen als Überlagerungen zusammenzusetzen, führt dazu, dass das System für einige davon die GLES-Komposition verwendet. Das bedeutet, dass die Anzahl der von einer App verwendeten Ebenen einen messbaren Einfluss auf den Stromverbrauch und die Leistung haben kann.