Client-Framebuffer-Verwaltung

Ab Android 13 werden neue Framebuffer verwendet, Kunde werden zugewiesen, wenn sich die Bildschirmauflösung ändert. Dieses Die Zuordnung erfolgt durch SurfaceFlinger im nächsten Zyklus invalid . nach einer Auflösungsänderung.

Framebuffer-Verwaltung beim Ändern der Auflösung

Änderungen an Lösungen können aus einem der folgenden Gründe auftreten zwei Szenarien:

  • Ein Hotplug-Ereignis, die vom Hardware Composer (HWC) initiiert wird, was beim Wechsel von einem externen Bildschirm mit einem anderen externen Bildschirm mit einer anderen Standardauflösung verbinden.

    Während eines Hotplug-Ereignisses werden die Handles der alten Framebuffer freigegeben. wenn die alten Anzeigedaten entfernt wurden.

  • Ein von SurfaceFlinger initiierter Wechsel des Anzeigemodus. Dieser erfolgt, wenn das Nutzer ändert die Auflösung in den Nutzereinstellungen oder eine App ändert die Auflösung mit preferredDisplayModeId.

    Beim Wechsel des Anzeigemodus werden die Handles zu vorhandenen Client-Framepuffern werden von SurfaceFlinger veröffentlicht, bevor setActiveConfig aufgerufen wird. oder setActiveConfigWithConstraints.

Zur Vermeidung katastrophaler Probleme wie Speicherfragmentierung auf Geräten, nicht genügend Arbeitsspeicher für den alten und neuen Framebuffer reserviert, dass HWC die alten Framebuffer nicht mehr verwendet Handles an diese Framebuffer an, wie in den folgenden Fällen gezeigt:

Durch Loslassen der Ziehpunkte kann der Framebuffer-Speicher vollständig freigegeben werden. vor der Zuweisung neuer Framebuffer von SurfaceFlinger während des nächsten invalid -Zyklus an.

Empfehlungen für die Framebuffer-Verwaltung

Gibt HWC die Handles nicht rechtzeitig für alte Framebuffer frei, findet die neue Framebuffer-Zuweisung vor dem alten Framebuffer statt. Deallocation fest. Dies kann zu schwerwiegenden Problemen führen, wenn die neue Zuweisung fehlschlägt aufgrund von Fragmentierung oder anderen Problemen. Noch schlimmer, wenn HWC gibt diese Aliasse gar nicht frei, auftreten.

Folgen Sie diesen Empfehlungen, um schwerwiegende Zuweisungsfehler zu vermeiden:

  • Wenn HWC weiterhin die alten Client-Framezwischenspeicher verwenden muss, Client-Framebuffer bereitgestellt werden, ist es wichtig, genügend Arbeitsspeicher für den alten und den neuen Framebuffer und führt möglicherweise eine Defragmentierung durch. für den Framebuffer-Speicherplatz.

  • Zuweisen eines dedizierten Arbeitsspeicherpools für die Framebuffer, der von des Grafikpuffers ein. Das ist wichtig, weil zwischen kann ein Drittanbieter-Prozess Grafikspeicher zuweisen. Wenn derselbe Grafikspeicherpool verwendet wird, und wenn der Grafikspeicher voll ist, den zuvor durch einen Framebuffer zugewiesenen Grafikspeicher belegen kann. Das führt dazu, dass unzureichender Speicher für die Neuzuweisung des Framebuffers oder den Arbeitsspeicher fragmentieren.

Framebuffer-Verwaltung testen

OEMs werden empfohlen, die ordnungsgemäße Verwaltung des Framebuffer-Speichers der Kunden Auflösungsschalter für ihr Gerät, die wie folgt beschrieben werden:

  • Bei Hotplug-Fällen können Sie einfach zwei verschiedene Displays mit unterschiedlichen Auflösungen.

  • Verwende für Moduswechsel das CTS von ModeSwitchingTestActivity. Verifizierertest, um einen Moduswechsel zu initiieren, mit dem das Verhalten des Framebuffer-Speichers getestet wird. Mit diesem Test können Probleme visuell identifiziert werden, die schwer zu erkennen sind Programmatisch garantiert.