Adaptive Aktualisierungsrate

Ab Android 15 kann die Display-Aktualisierungsrate mit dem ARR-Feature (Adaptive Refresh Rate) in diskreten VSync-Schritten an die Framerate des Inhalts angepasst werden.

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.

  • Jank reduzieren: Durch ARR entfällt das Umschalten zwischen Modi, was eine bekannte Ursache für Jank 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 können sich die Aktualisierungsraten innerhalb eines Anzeigemodus je nach Häufigkeit der Inhaltsaktualisierung ändern. Die Panels können mit Aktualisierungsraten betrieben werden, die Teiler des Tearing-Effekts (TE) des Panels sind. OEMs können ARR flexibel implementieren und dabei ihre bevorzugten Kompromisse bei der Stromversorgung berücksichtigen.

Die folgende Abbildung zeigt ein Display mit einer vsyncPeriod von 240 Hz und einer minFrameIntervalNs (maximale Aktualisierungsrate) von 120 Hz. VSync findet alle 4,16 ms statt. Ein Frame kann in beliebigen Vielfachen von VSync nach der minFrameIntervalNs des letzten Frames präsentiert 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. Um ARR 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 der APIs, die ARR unterstützen.

DisplayConfiguration.aidl

In der DisplayConfiguration.aidl-API wird die Anzeigekonfiguration mithilfe von Anzeigeattributen sowie den folgenden Attributen für ARR angegeben:

  • 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 Präsentationszeit 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 bevorstehenden Frames in Nanosekunden.

Testen

Verwenden Sie onRefreshRateChangedDebug zur Fehlerbehebung. Diese Methode benachrichtigt den Client, 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 Ihres Displays einzustellen. Beobachten Sie, wie sich die Framerate im Vergleich zur angeforderten Rate ändert.