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.
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 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 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:
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.