Ab Android 15 kann die Displayaktualisierungsrate mithilfe der Funktion für die adaptive Bildwiederholrate (ARR) an die Framerate der Inhalte angepasst werden. Dabei werden diskrete VSync-Schritte verwendet.
Die ARR-Funktion bietet folgende Vorteile:
Stromverbrauch senken: Standardmäßig können Geräte mit ARR mit niedrigeren als den maximalen Bildwiederholraten betrieben werden. Höhere Raten werden nur dann verwendet, wenn dies für die Nutzerfreundlichkeit unerlässlich ist. So wird unnötiger Stromverbrauch minimiert.
Reduzierung von Rucklern: Durch ARR entfällt der Moduswechsel, der eine bekannte Ursache für Ruckler ist.
Übersicht
Bei Panels ohne ARR wird das Display in einem festen Takt aktualisiert, der vom aktiven Displaymodus bestimmt wird.
Bei ARR-Bildschirmen sind die VSync-Rate und die Bildwiederholrate der Anzeige voneinander getrennt. So können sich die Bildwiederholraten innerhalb eines Anzeigemodus ändern, je nach Aktualisierungstakt der Inhalte. Die Bereiche können mit Aktualisierungsraten ausgeführt werden, die Teil des Reißeffekts (TE) des Bereichs sind. OEMs haben die Flexibilität, ARR basierend auf ihren bevorzugten Leistungskompromissen zu implementieren.
Die folgende Abbildung zeigt ein Display mit einer vsyncPeriod
von 240 Hz und einer minFrameIntervalNs
(maximale Aktualisierungsrate) von 120 Hz. VSync erfolgt alle 4,16 ms. Ein Frame kann nach der minFrameIntervalNs
des letzten Frames in einem beliebigen Vielfachen von VSync dargestellt werden.
Abbildung 1. Beispiel für ARR.
Implementierung
Android 15 unterstützt ARR mit neuen HAL APIs (Hardware Composer) und Plattformänderungen. Um die automatische Ratenzahlung zu aktivieren, müssen OEMs Kernel- und Systemänderungen auf Geräten mit Android 15 und höher unterstützen und Version 3 der android.hardware.graphics.composer3
APIs implementieren, wie in den folgenden Abschnitten aufgeführt.
Weitere Informationen finden Sie in der Referenzimplementierung von Pixel für die APIs, die ARR unterstützen.
DisplayConfiguration.aidl
Die DisplayConfiguration.aidl
API gibt die Anzeigekonfiguration mithilfe von Anzeigeattributen sowie den folgenden Attributen für ARR an:
- Optional:
vrrConfig
: Wenn diese Option festgelegt ist, wird die automatische Ressourcenzuweisung für bestimmte Konfigurationen aktiviert. Wennnull
festgelegt ist, wird der Anzeigemodus auf einen Modus ohne ARR gesetzt, z. B. Multiple Refresh Rate (MRR). Mit diesem Attribut kann ein Display entweder als MRR oder ARR konfiguriert werden, nicht aber als beides. vsyncPeriod
: Die VSync-Rate des Displays. Bei ARR-Displays wird dieser Wert verwendet, um die unterstützten diskreten Bildwiederholraten abzuleiten.Anbieter müssen den Wert „
DisplayConfiguration.vsyncPeriod
“ für alle Geräte festlegen. Bei Displays ohne ARR istDisplayConfiguration.vsyncPeriod
die Displayaktualisierungsrate. Wenn ein Gerät 120 Hz unterstützt, muss dieser Wert 8,3 ms betragen.Bei ARR-Displays ist
DisplayConfiguration.vsyncPeriod
die TE-Signalfrequenz. Wenn ein Gerät eineminFrameIntervalNs
von 8,3 ms hat, aber die TE 240 Hz beträgt, muss dieser Wert 4,16 ms betragen.
VrrConfig.aidl
Die VrrConfig.aidl
API umfasst die folgenden Attribute:
minFrameIntervalNs
: Die maximale Bildwiederholrate, die das Display unterstützen kann.NotifyExpectedPresentConfig
: Das hängt davon ab, wann das Display eine Vorabankündigung eines anstehenden Frames benötigt.
IComposerClient.notifyExpectedPresent
gibt einen Hinweis auf einen Frame, der wahrscheinlich angezeigt wird, damit das Display seinen Selbstaktualisierungszeitraum entsprechend anpassen kann. frameIntervalNs
steht für den aktuellen Ablauf nach expectedPresentTime
. Wenn notifyExpectedPresent
beispielsweise mit expectedPresentTime
N und frameIntervalNs
von 16,6 ms aufgerufen wird, liegt der nächste Frame bei N + 16,6 ms nach der aktuellen Zeit N. Nach der aktuellen Zeit N beträgt die Framefrequenz 16,6 ms, bis es weitere Änderungen gibt.
IComposerClient.notifyExpectedPresent
wird nur aufgerufen, wenn DisplayConfiguration.notifyExpectedPresentConfig
festgelegt ist und eine der folgenden Zeitbedingungen eintritt:
- Außer Takt: Die erwartete Präsentationszeit des nächsten Frames weicht von der regulären Bildwiederholrate des Displays ab, die durch
frameIntervalNs
definiert ist. - Zeitlimit überschritten: Das Zeitintervall zwischen den vorherigen Frames ist mindestens
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
gibt einen Hinweis auf die Kadenz der nächsten Frames in Nanosekunden.
Testen
Verwenden Sie onRefreshRateChangedDebug
für die Fehlerbehebung. Mit dieser Methode wird der Client darüber informiert, dass sich die Bildwiederholrate des Displays geändert hat.
Verwenden Sie die Test-App TouchLatency
für manuelle Tests, wie in Abbildung 2 dargestellt:
Abbildung 2. TouchLatency-Test-App
Passen Sie in der Test-App mit dem Schieberegler die Renderrate an verschiedene Werte der Teileraktualisierungsraten der Aktualisierungsrate Ihres Displays an. Beobachte, wie sich die Framerate in Bezug auf die angeforderte Rate ändert.