Mit Android 15 wird die Funktion „Adaptive Refresh Rate“ (ARR) eingeführt, mit der die Aktualisierungsrate des Displays mithilfe diskreter VSync-Schritte an die Framerate des Inhalts angepasst werden kann.
Die Funktion „ARR“ bietet folgende Vorteile:
- Reduzierung des Stromverbrauchs: Standardmäßig ermöglicht ARR, dass Geräte mit Raten betrieben werden, die niedriger als ihre maximalen Aktualisierungsraten sind. Höhere Raten werden nur verwendet, wenn dies für die Nutzerfreundlichkeit erforderlich ist. Dadurch wird unnötiger Stromverbrauch minimiert.
- Weniger Ruckeln: Durch ARR entfällt das Umschalten zwischen Modi, was eine bekannte Ursache für Ruckeln ist.
Übersicht
Bei Displays ohne ARR wird die Anzeige in einem festen Rhythmus aktualisiert, der vom aktiven Anzeigemodus abhängt.
Bei ARR-Displays sind die VSync-Rate und die Aktualisierungsrate entkoppelt. Dadurch kann sich die Aktualisierungsrate innerhalb eines Anzeigemodus je nach Häufigkeit der Inhaltsaktualisierung ändern. Panels können mit Aktualisierungsraten betrieben werden, die Teiler des Tearing-Effekts (TE) des Panels sind. OEMs können ARR entsprechend ihren bevorzugten Kompromissen bei der Stromversorgung 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 bei jedem Vielfachen von VSync nach der minFrameIntervalNs
des letzten Frames dargestellt werden.
Abbildung 1: Beispiel für ARR.
Implementierung
Android 15 unterstützt ARR mit neuen Hardware Composer (HWC) HAL-APIs und Plattformänderungen. Damit ARR aktiviert werden kann, 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 beschrieben.
Weitere Informationen finden Sie in der Referenzimplementierung von Pixel der APIs, die ARR unterstützen.
DisplayConfiguration.aidl
In der DisplayConfiguration.aidl
API wird die Displaykonfiguration mithilfe von Displayattributen angegeben. Außerdem werden die folgenden Attribute für ARR verwendet:
- Optional
vrrConfig
: Wenn festgelegt, ist ARR für bestimmte Konfigurationen aktiviert. Wenn dieser Parameter aufnull
gesetzt ist, wird der Anzeigemodus auf Nicht-ARR-Modi wie Multiple Refresh Rate (MRR) festgelegt. Mit diesem Attribut kann eine Anzeige entweder als MRR oder ARR konfiguriert werden, aber nicht beides. vsyncPeriod
: Die VSync-Rate des Displays. Auf ARR-Displays wird dieser Wert verwendet, um die unterstützten diskreten Aktualisierungsraten abzuleiten.Anbieter müssen den Wert
DisplayConfiguration.vsyncPeriod
für alle Geräte festlegen. Bei Displays ohne ARR istDisplayConfiguration.vsyncPeriod
die Aktualisierungsrate des Displays. Wenn ein Gerät 120 Hz unterstützt, muss dieser Wert 8,3 ms betragen.Bei ARR-Displays ist
DisplayConfiguration.vsyncPeriod
die Frequenz des TE-Signals. Wenn ein Gerät eineminFrameIntervalNs
von 8,3 ms, aber eine TE von 240 Hz hat, muss dieser Wert 4,16 ms betragen.
VrrConfig.aidl
Die VrrConfig.aidl
API enthält die folgenden Attribute:
minFrameIntervalNs
: Die maximale Bildwiederholrate, die das Display unterstützt.NotifyExpectedPresentConfig
: Dies hängt davon ab, wann das Display eine Vorabbenachrichtigung über einen bevorstehenden Frame benötigt.
IComposerClient.notifyExpectedPresent
gibt einen Hinweis für einen Frame, der wahrscheinlich präsentiert wird, damit das Display seinen Selbsterfrischungszeitraum entsprechend anpassen kann. frameIntervalNs
steht für die aktuelle Häufigkeit nach dem 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 dem aktuellen Zeitpunkt N beträgt die Bildrate 16,6 ms, bis es zu weiteren Änderungen kommt.
IComposerClient.notifyExpectedPresent
wird nur aufgerufen, wenn DisplayConfiguration.notifyExpectedPresentConfig
festgelegt ist und eine der folgenden Zeitbedingungen eintritt:
- Die erwartete Darstellungszeit des nächsten Frames weicht von der regulären Aktualisierungsrate des Displays ab, die durch
frameIntervalNs
definiert ist. - Zeitlimit überschritten: Das Zeitintervall zwischen den vorherigen Frames ist größer oder gleich
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
gibt einen Hinweis auf die Taktung der anstehenden Frames in Nanosekunden.
Testen
Verwenden Sie onRefreshRateChangedDebug
zur Fehlerbehebung. Diese Methode benachrichtigt den Client darüber, dass sich die Aktualisierungsrate des Displays geändert hat.
Verwenden Sie die Test-App TouchLatency
für manuelle Tests, wie in Abbildung 2 gezeigt:
Abbildung 2: TouchLatency-Test-App
Verwenden Sie in der Test-App den Schieberegler, um die Rendering-Rate auf verschiedene Werte des Teilers der Aktualisierungsrate des Displays einzustellen. Beobachten Sie, wie sich die Framerate basierend auf der angeforderten Rate ändert.