Google setzt sich dafür ein, die Rassengerechtigkeit für schwarze Gemeinschaften zu fördern. Siehe wie.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Ebenen und Anzeigen

Ebenen und Anzeigen sind zwei Grundelemente, die Kompositionsarbeit und Interaktionen mit der Anzeigehardware darstellen.

Schichten

Eine Schicht ist die wichtigste Kompositionseinheit. Eine Ebene ist eine Kombination aus einer Oberfläche und einer Instanz von SurfaceControl . Jede Ebene verfügt über eine Reihe von Eigenschaften, die definieren, wie sie mit anderen Ebenen interagiert. Die Ebeneneigenschaften werden in der folgenden Tabelle beschrieben.

Eigentum Beschreibung
Positional Definiert, wo die Ebene auf ihrer Anzeige angezeigt wird. Enthält Informationen wie die Positionen der Kanten einer Ebene und ihre Z-Reihenfolge relativ zu anderen Ebenen (unabhängig davon, ob sie sich vor oder hinter anderen Ebenen befinden sollen).
Inhalt Definiert, wie der auf der Ebene angezeigte Inhalt innerhalb der durch die Positionseigenschaften definierten Grenzen dargestellt werden soll. Enthält Informationen wie Zuschneiden (um einen Teil des Inhalts zu erweitern, um die Grenzen der Ebene zu füllen) und Transformieren (um gedrehten oder gespiegelten Inhalt anzuzeigen).
Komposition Definiert, wie die Ebene mit anderen Ebenen zusammengesetzt werden soll. Enthält Informationen wie den Mischmodus und einen schichtweiten Alpha-Wert für das Alpha-Compositing .
Optimierung Bietet Informationen, die nicht unbedingt erforderlich sind, um die Ebene korrekt zusammenzusetzen, die jedoch vom Hardware Composer (HWC) -Gerät verwendet werden können, um die Kompositionsleistung zu optimieren. Enthält Informationen wie den sichtbaren Bereich der Ebene und den Teil der Ebene, der seit dem vorherigen Frame aktualisiert wurde.

Anzeigen

Eine Anzeige ist eine weitere wichtige Kompositionseinheit. Ein System kann mehrere Anzeigen haben und Anzeigen können während des normalen Systembetriebs hinzugefügt oder entfernt werden. Anzeigen werden auf Anfrage des HWC oder auf Anfrage des Frameworks hinzugefügt / entfernt. Die HWC-Geräteanforderungsanzeigen werden hinzugefügt oder entfernt, wenn eine externe Anzeige mit dem Gerät verbunden oder von diesem getrennt wird, was als Hotplugging bezeichnet wird . Clients fordern virtuelle Anzeigen an , deren Inhalt in einen Off-Screen-Puffer anstatt in eine physische Anzeige gerendert wird.

Virtuelle Anzeigen

SurfaceFlinger unterstützt ein internes Display (in das Telefon oder Tablet integriert), externe Displays (z. B. einen über HDMI angeschlossenen Fernseher) und ein oder mehrere virtuelle Displays, die zusammengesetzte Ausgaben im System verfügbar machen. Virtuelle Anzeigen können verwendet werden, um den Bildschirm aufzuzeichnen oder den Bildschirm über ein Netzwerk zu senden. Für eine virtuelle Anzeige generierte Frames werden in eine BufferQueue geschrieben.

Virtuelle Anzeigen können denselben Satz von Ebenen wie die Hauptanzeige (der Ebenenstapel) verwenden oder einen eigenen Satz haben. Es gibt keinen VSYNC für eine virtuelle Anzeige, daher löst der VSYNC für die interne Anzeige die Komposition für alle Anzeigen aus.

In HWC-Implementierungen, die sie unterstützen, können virtuelle Anzeigen mit OpenGL ES (GLES), HWC oder sowohl GLES als auch HWC zusammengesetzt werden. Bei nicht unterstützenden Implementierungen werden virtuelle Anzeigen immer mit GLES zusammengesetzt.

Fallstudie: Screenrecord

Mit dem Befehl screenrecord kann der Benutzer alles, was auf dem Bildschirm angezeigt wird, als .mp4 Datei auf der Festplatte aufzeichnen. Um dies zu implementieren, empfängt das System zusammengesetzte Frames von SurfaceFlinger, schreibt sie in den Videocodierer und schreibt dann die codierten Videodaten in eine Datei. Die Video-Codecs werden von einem separaten Prozess ( mediaserver ) verwaltet, sodass große Grafikpuffer im System verschoben werden müssen. Um es schwieriger zu machen, ist das Ziel, 60 fps Video mit voller Auflösung aufzunehmen. Der Schlüssel, um diese Arbeit effizient zu gestalten, ist BufferQueue.

Mit der MediaCodec Klasse kann eine App Daten als Rohbytes in Puffern oder über eine Oberfläche bereitstellen. Wenn screenrecord Zugriff auf einen Video-Encoder anfordert, erstellt der mediaserver Prozess eine BufferQueue, verbindet sich mit der Consumer-Seite und leitet die Producer-Seite als Oberfläche an screenrecord .

Das screenrecord Utility fragt dann Surface eine virtuelle Anzeige , dass die Spiegel Hauptanzeige zu erzeugen (das heißt, sie alle die gleichen Schichten aufweisen), und leitet diese Ausgabe an die Oberfläche zu senden , die von dem kam mediaserver - Prozess. In diesem Fall ist SurfaceFlinger eher der Hersteller von Puffern als der Verbraucher.

Nach Abschluss der Konfiguration wird die screenrecord ausgelöst, wenn die codierten Daten angezeigt werden. Während Apps gezeichnet werden, werden ihre Puffer an SurfaceFlinger weitergeleitet, der sie zu einem einzigen Puffer zusammensetzt, der im mediaserver Prozess direkt an den Video-Encoder gesendet wird. Die Vollbilder werden vom screenrecord nie gesehen. Intern verfügt der mediaserver Prozess über eine eigene Methode zum Verschieben von Puffern, die auch Daten per Handle weiterleitet, wodurch der Overhead minimiert wird.

Fallstudie: Sekundäranzeigen simulieren

Der WindowManager kann SurfaceFlinger auffordern, eine sichtbare Ebene zu erstellen, für die SurfaceFlinger als BufferQueue-Consumer fungiert. Sie können SurfaceFlinger auch bitten, eine virtuelle Anzeige zu erstellen, für die SurfaceFlinger als BufferQueue-Produzent fungiert.

Wenn Sie eine virtuelle Anzeige mit einer sichtbaren Ebene verbinden, wird eine geschlossene Schleife erstellt, in der der zusammengesetzte Bildschirm in einem Fenster angezeigt wird. Dieses Fenster ist jetzt Teil der zusammengesetzten Ausgabe. Bei der nächsten Aktualisierung zeigt das zusammengesetzte Bild im Fenster auch den Fensterinhalt an. Um dies in Aktion zu sehen, aktivieren Sie die Entwickleroptionen in den Einstellungen , wählen Sie Sekundäre Anzeigen simulieren und aktivieren Sie ein Fenster. Um Nebenanzeigen in Aktion zu sehen, die Verwendung screenrecord die Tat ermöglichen die Anzeige erfassen dann spielen sie Frame für Frame zurück.