Hardware-Composer HAL

Der Hardware Composer (HWC) HAL bestimmt den effizientesten Weg zum Zusammensetzen von Puffern mit der verfügbaren Hardware. Als HAL ist seine Implementierung gerätespezifisch und erfolgt normalerweise durch den Displayhardware-OEM.

Der Wert dieses Ansatzes ist leicht zu erkennen, wenn Sie Overlay Planes betrachten, die mehrere Puffer in der Anzeigehardware und nicht in der GPU zusammensetzen. Stellen Sie sich beispielsweise ein typisches Android-Telefon im Hochformat vor, mit der Statusleiste oben, der Navigationsleiste unten und App-Inhalten überall sonst. Die Inhalte für jede Schicht befinden sich in separaten Puffern. Sie können die Komposition mit einer der folgenden Methoden handhaben:

  • Rendern des App-Inhalts in einen Scratch-Puffer, dann Rendern der Statusleiste darüber, der Navigationsleiste darüber und schließlich Übergeben des Scratch-Puffers an die Anzeigehardware.
  • Weiterleiten aller drei Puffer an die Anzeigehardware und deren Anweisung, Daten aus verschiedenen Puffern für verschiedene Teile des Bildschirms zu lesen.

Der letztere Ansatz kann wesentlich effizienter sein.

Die Fähigkeiten des Anzeigeprozessors variieren erheblich. Die Anzahl der Überlagerungen, ob Ebenen gedreht oder überblendet werden können, und Einschränkungen bei der Positionierung und Überlappung können über eine API schwer auszudrücken sein. 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öchten Sie damit umgehen?“
  2. HWC antwortet, indem es jede Schicht als Geräte- oder Client-Komposition markiert.
  3. SurfaceFlinger kümmert sich um jeden Client, übergibt den Ausgabepuffer an HWC und lässt HWC den Rest erledigen.

Da Hardwareanbieter den Code zur Entscheidungsfindung 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, wenn Überlagerungsinhalte transparente Pixel aufweisen und überlappende Ebenen gemischt werden. In solchen Fällen kann das HWC eine GLES-Zusammensetzung für einige oder alle Schichten anfordern und den zusammengesetzten Puffer behalten. Wenn SurfaceFlinger darum bittet, denselben Puffersatz zusammenzusetzen, kann der HWC den zuvor zusammengesetzten Scratch-Puffer anzeigen. Dies kann die Akkulaufzeit eines im Leerlauf befindlichen Geräts verbessern.

Android-Geräte unterstützen normalerweise vier Overlay-Ebenen. Der Versuch, mehr Ebenen als Overlays zusammenzusetzen, führt dazu, dass das System für einige von ihnen die GLES-Komposition verwendet, was bedeutet, dass die Anzahl der von einer App verwendeten Ebenen einen messbaren Einfluss auf den Stromverbrauch und die Leistung haben kann.