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 wird normalerweise vom Display-Hardware-OEM durchgeführt.

Der Wert dieses Ansatzes ist leicht zu erkennen , wenn Sie Ebene betrachten Overlay, das Verbund mehr Puffer in der Display - Hardware anstelle der GPU. Betrachten Sie beispielsweise ein typisches Android-Telefon im Hochformat mit der Statusleiste oben, der Navigationsleiste unten und App-Inhalten überall. Die Inhalte für jede Schicht befinden sich in separaten Puffern. Sie können die Komposition mit einer der folgenden Methoden verarbeiten:

  • Den App-Inhalt in einen Scratch-Puffer rendern, dann die Statusleiste darüber rendern, die Navigationsleiste darüber und schließlich den Scratch-Puffer an die Anzeigehardware übergeben.
  • Übergabe aller drei Puffer an die Anzeigehardware und Anweisung, Daten aus verschiedenen Puffern für verschiedene Teile des Bildschirms zu lesen.

Letzterer Ansatz kann deutlich effizienter sein.

Die Leistungsfähigkeit des Anzeigeprozessors variiert erheblich. Die Anzahl der Überlagerungen, ob Ebenen gedreht oder gemischt werden können, sowie Einschränkungen bei der Positionierung und Überlappung können durch eine API schwierig auszudrücken sein. Um diese Optionen zu berücksichtigen, führt der HWC folgende 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 Ebene 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 Entscheidungscode individuell 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-Komposition, wenn sich auf dem Bildschirm nichts ändert. Dies gilt insbesondere dann, wenn Overlay-Inhalte transparente Pixel aufweisen und überlappende Ebenen gemischt werden. In solchen Fällen kann die HWC die GLES-Zusammensetzung für einige oder alle Schichten anfordern und den zusammengesetzten Puffer beibehalten. Wenn SurfaceFlinger den gleichen Satz von Puffern zusammensetzen möchte, kann der HWC den zuvor zusammengesetzten Scratch-Puffer 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 von ihnen die GLES-Zusammensetzung verwendet, was bedeutet, dass die Anzahl der von einer App verwendeten Ebenen einen messbaren Einfluss auf den Stromverbrauch und die Leistung haben kann.