À partir d'Android 15, la fonctionnalité de fréquence d'actualisation adaptative (ARR, Adaptive Refresh Rate) permet à la fréquence d'actualisation de l'écran de s'adapter à la fréquence d'images du contenu, en utilisant des étapes VSync discrètes.
La fonctionnalité ARR offre les avantages suivants :
Réduction de la consommation d'énergie : par défaut, ARR permet aux appareils de fonctionner à des fréquences inférieures à leur fréquence d'actualisation maximale, en passant à des fréquences plus élevées uniquement lorsque cela est essentiel pour l'expérience utilisateur, ce qui minimise la consommation d'énergie inutile.
Réduction des saccades : ARR élimine le besoin de changer de mode, ce qui est une cause connue de saccades.
Présentation
Sur les panneaux non ARR, l'affichage est actualisé à une cadence fixe déterminée par le mode d'affichage actif.
Sur les panneaux ARR, la fréquence VSync et la fréquence d'actualisation de l'écran sont dissociées, ce qui permet aux fréquences d'actualisation de changer au sein d'un même mode d'affichage, en fonction de la cadence de mise à jour du contenu. Les panneaux peuvent fonctionner à des fréquences d'actualisation qui sont des diviseurs de l'effet de déchirement (TE) du panneau. Les OEM peuvent implémenter l'ARR en fonction des compromis de puissance qu'ils préfèrent.
La figure suivante montre un écran avec une vsyncPeriod
de 240 Hz et une minFrameIntervalNs
(fréquence d'actualisation maximale) de 120 Hz. La synchronisation verticale se produit toutes les 4,16 ms. Une frame peut être présentée à n'importe quel multiple de la synchronisation verticale après la minFrameIntervalNs
de la dernière frame.
Figure 1 : Exemple de RA annuel.
Implémentation
Android 15 est compatible avec ARR grâce aux nouvelles API HAL Hardware Composer (HWC) et aux modifications apportées à la plate-forme. Pour activer ARR, les OEM doivent prendre en charge les modifications du noyau et du système sur les appareils équipés d'Android 15 ou version ultérieure, et implémenter la version 3 des API android.hardware.graphics.composer3
, comme indiqué dans les sections suivantes.
Pour en savoir plus, consultez l'implémentation de référence de Pixel des API compatibles avec l'ARR.
DisplayConfiguration.aidl
L'API DisplayConfiguration.aidl
spécifie la configuration de l'affichage à l'aide d'attributs d'affichage, ainsi que les attributs suivants pour ARR :
- Facultatif
vrrConfig
: Si cette option est définie, ARR est activé pour des configurations spécifiques. Si la valeur est définie surnull
, le mode d'affichage est défini sur des modes non ARR tels que multiple refresh rate (MRR). Avec cet attribut, un affichage peut être configuré en tant que MRR ou ARR, mais pas les deux. vsyncPeriod
: Fréquence VSync de l'écran. Sur les écrans ARR, cette valeur est utilisée pour dériver les fréquences d'actualisation discrètes compatibles.Les fournisseurs doivent définir la valeur
DisplayConfiguration.vsyncPeriod
pour tous les appareils. Pour les écrans non ARR,DisplayConfiguration.vsyncPeriod
correspond à la fréquence d'actualisation de l'écran. Si un appareil est compatible avec 120 Hz, cette valeur doit être de 8,3 ms.Pour les affichages ARR,
DisplayConfiguration.vsyncPeriod
correspond à la fréquence du signal TE. Si un appareil a unminFrameIntervalNs
de 8,3 ms, mais que la fréquence TE est de 240 Hz, cette valeur doit être de 4,16 ms.
VrrConfig.aidl
L'API VrrConfig.aidl
inclut les attributs suivants :
minFrameIntervalNs
: taux d'actualisation maximal que l'écran peut prendre en charge.NotifyExpectedPresentConfig
: cette valeur est déterminée par le moment où l'écran doit être averti à l'avance d'un prochain frame.
IComposerClient.notifyExpectedPresent
fournit un indice pour un frame susceptible d'être présenté, afin que l'écran puisse adapter sa période d'autoréactualisation en conséquence. frameIntervalNs
représente la cadence actuelle qui suit expectedPresentTime
. Par exemple, si notifyExpectedPresent
est appelé avec expectedPresentTime
N et frameIntervalNs
de 16,6 ms, le prochain frame se trouve à N + 16,6 ms après l'heure actuelle N. Après le moment actuel N, la cadence d'images est de 16,6 ms jusqu'à ce que d'autres modifications soient apportées.
IComposerClient.notifyExpectedPresent
n'est appelé que lorsque DisplayConfiguration.notifyExpectedPresentConfig
est défini et si l'une des conditions de timing suivantes se produit :
- Heure actuelle hors cadence : l'heure de présentation attendue du prochain frame s'écarte de la fréquence d'actualisation régulière de l'écran définie par
frameIntervalNs
. - Délai avant expiration dépassé : l'intervalle de temps entre les images précédentes est supérieur ou égal à
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
fournit un indice sur la cadence des prochains frames en nanosecondes.
Tests
Utilisez onRefreshRateChangedDebug
pour le débogage. Cette méthode informe le client que la fréquence d'actualisation de l'écran a changé.
Utilisez l'application de test TouchLatency
pour les tests manuels, comme illustré à la figure 2 :
Figure 2. Application de test TouchLatency.
Dans l'application de test, utilisez le curseur pour ajuster la fréquence de rendu à différentes valeurs de fréquence d'actualisation du diviseur de la fréquence d'actualisation de votre écran. Observez comment la fréquence d'images change par rapport à la fréquence demandée.