Die Hardware Composer HAL (Hardware Composer Hardware Abstraction Layer) bestimmt die effizienteste Methode, Buffers mit der verfügbaren Hardware zu kombinieren. Als HAL ist die Implementierung gerätespezifisch und wird in der Regel vom OEM der Displayhardware durchgeführt.
Der Vorteil dieses Ansatzes wird schnell klar, wenn man sich Overlay-Ebenen ansieht, bei denen mehrere Buffers in der Displayhardware und nicht in der GPU zusammengesetzt werden. Stellen Sie sich beispielsweise ein typisches Android-Smartphone im Hochformat mit der Statusleiste oben, der Navigationsleiste unten und App-Inhalten überall sonst vor. Die Inhalte der einzelnen Ebenen befinden sich in separaten Zwischenspeichern. Sie können die Zusammensetzung mit einer der folgenden Methoden verarbeiten:
- Die App-Inhalte werden in einem Scratch-Puffer gerendert, dann die Statusleiste darüber und die Navigationsleiste darüber. Schließlich wird der Scratch-Puffer an die Displayhardware übergeben.
- Alle drei Puffer an die Displayhardware übergeben und sie anweisen, Daten aus verschiedenen Puffern für verschiedene Bereiche des Bildschirms zu lesen.
Letzterer Ansatz kann deutlich effizienter sein.
Die Leistungsfähigkeit des Displayprozessors variiert erheblich. Die Anzahl der Overlays, ob Ebenen gedreht oder überlagert werden können, sowie Einschränkungen bei Positionierung und Überschneidung können sich nur schwer über eine API ausdrücken lassen. Um diese Optionen zu berücksichtigen, führt das HWC die folgenden Berechnungen durch:
- SurfaceFlinger stellt HWC eine vollständige Liste der Ebenen bereit und fragt: „Wie möchten Sie damit umgehen?“
- HWC reagiert, indem jede Schicht als Geräte- oder Clientzusammensetzung gekennzeichnet wird.
- SurfaceFlinger kümmert sich um jeden Client, übergibt den Ausgabepuffer an HWC und lässt HWC den Rest erledigen.
Da Hardwareanbieter den Code für die Entscheidungsfindung benutzerdefiniert anpassen können, kann jedes Gerät die beste Leistung erzielen.
Overlay-Ebenen sind möglicherweise weniger effizient als GL-Kompositionen, wenn sich auf dem Bildschirm nichts ändert. Das gilt insbesondere, wenn Overlay-Inhalte transparente Pixel haben und sich überlappende Ebenen überlagern. In solchen Fällen kann der HWC die GLES-Komposition für einige oder alle Ebenen anfordern und den zusammengesetzten Buffer beibehalten. Wenn SurfaceFlinger anfordert, denselben Satz Puffer zu erstellen, kann die HWC den zuvor zusammengesetzten Scratch-Zwischenspeicher anzeigen. Dadurch kann die Akkulaufzeit eines inaktiv stehenden Geräts verlängert werden.
Android-Geräte unterstützen in der Regel vier Overlay-Ebenen. Wenn Sie versuchen, mehr Ebenen als Overlays zu kombinieren, verwendet das System für einige davon die GLES-Komposition. Die Anzahl der von einer App verwendeten Ebenen kann sich also messbar auf den Energieverbrauch und die Leistung auswirken.