Die HAL des Hardware-Composers (HWC) bestimmt die effizienteste Methode, Buffers mit der verfügbaren Hardware zusammenzuführen. Als HAL ist die Implementierung gerätespezifisch und wird in der Regel vom OEM der Displayhardware durchgeführt.
Der Wert 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 vor, mit der Statusleiste oben, der Navigationsleiste unten und App-Inhalten überall sonst. Die Inhalte der einzelnen Ebenen befinden sich in separaten Buffers. 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 Funktionen von Displayprozessoren variieren stark. 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 zur Verfügung und fragt: „Wie möchten Sie das handhaben?“
- 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 Entscheidungscode anpassen können, ist es möglich, mit jedem Gerät die bestmögliche Leistung zu 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 denselben Satz von Buffers zusammenstellen soll, kann der HWC den zuvor zusammengesetzten Scratch-Puffer 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 von ihnen die GLES-Komposition. Das bedeutet, dass die Anzahl der von einer App verwendeten Ebenen einen messbaren Einfluss auf den Energieverbrauch und die Leistung haben kann.