Adaptive Aktualisierungsrate

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.

arr-example

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 auf null 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 ist DisplayConfiguration.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 eine minFrameIntervalNs 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:

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:

touchlatency-app

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.