A partire da Android 15, la funzionalità di frequenza di aggiornamento adattiva (ARR) consente alla frequenza di aggiornamento del display di adattarsi alla frequenza fotogrammi dei contenuti, utilizzando incrementi discreti di VSync.
La funzionalità ARR offre i seguenti vantaggi:
Riduzione del consumo energetico: per impostazione predefinita, l'ARR consente ai dispositivi di funzionare a frequenze inferiori alle frequenze di aggiornamento massime, passando a frequenze più elevate solo quando è essenziale per l'esperienza utente, il che riduce al minimo il consumo energetico non necessario.
Riduzione del jitter: l'ARR elimina la necessità di cambiare modalità, che è una causa nota di jitter.
Panoramica
Nei pannelli non ARR, il display si aggiorna a una cadenza fissa determinata dalla modalità di visualizzazione attiva.
Nei riquadri ARR, la frequenza VSync e la frequenza di aggiornamento del display sono disaccoppiate, il che consente di modificare le frequenze di aggiornamento all'interno di una modalità di visualizzazione in base alla cadenza di aggiornamento dei contenuti. I pannelli possono funzionare a frequenze di aggiornamento che sono divisori dell'effetto tearing (TE) del pannello. Gli OEM hanno la flessibilità di implementare l'ARR in base ai compromessi di potenza preferiti.
La figura seguente mostra un display con vsyncPeriod
di 240 Hz e
minFrameIntervalNs
(frequenza di aggiornamento massima) di 120 Hz. VSync si verifica ogni
4,16 ms. Un frame può essere presentato a qualsiasi multiplo di VSync dopo il
minFrameIntervalNs
dall'ultimo frame.
Figura 1. Esempio di ARR.
Implementazione
Android 15 supporta l'ARR con nuove API HAL Hardware Composer (HWC) e modifiche alla piattaforma. Per attivare l'ARR, gli OEM devono supportare le modifiche al kernel e al sistema sui dispositivi con Android 15 e versioni successive e implementare la versione 3 delle API android.hardware.graphics.composer3
, come elencato nelle sezioni seguenti.
Per ulteriori informazioni, consulta l'implementazione di riferimento di Pixel delle API che supportano l'ARR.
DisplayConfiguration.aidl
L'API DisplayConfiguration.aidl
specifica la configurazione della visualizzazione utilizzando gli attributi di visualizzazione, insieme ai seguenti attributi per la Rete di ricerca:
- (Facoltativo)
vrrConfig
: se impostato, l'ARR è abilitato per configurazioni specifiche. Se impostato sunull
, la modalità di visualizzazione è impostata su modalità diverse dall'ARR, come la frequenza di aggiornamento multipla (MRR). Con questo attributo, un display può essere configurato come MRR o ARR, ma non entrambi. vsyncPeriod
: la frequenza VSync del display. Sulle display ARR, questo valore viene utilizzato per dedurre le frequenze di aggiornamento discrete supportate.I fornitori devono impostare il valore
DisplayConfiguration.vsyncPeriod
per tutti i dispositivi. Per i display non ARR,DisplayConfiguration.vsyncPeriod
è la frequenza di aggiornamento del display. Se un dispositivo supporta 120 Hz, questo valore deve essere di 8,3 ms.Per le visualizzazioni ARR,
DisplayConfiguration.vsyncPeriod
è la frequenza del segnale TE. Se un dispositivo ha un valoreminFrameIntervalNs
di 8,3 ms, ma la frequenza di aggiornamento è di 240 Hz, questo valore deve essere 4,16 ms.
VrrConfig.aidl
L'API VrrConfig.aidl
include i seguenti attributi:
minFrameIntervalNs
: la frequenza di aggiornamento massima supportata dal display.NotifyExpectedPresentConfig
: il valore dipende da quando la visualizzazione richiede un preavviso di un frame imminente.
IComposerClient.notifyExpectedPresent
fornisce un suggerimento per un frame che è probabile venga presentato, in modo che il display possa adattare di conseguenza il periodo di aggiornamento automatico. frameIntervalNs
rappresenta la cadenza attuale che segue expectedPresentTime
. Ad esempio, se
notifyExpectedPresent
viene chiamato con expectedPresentTime
N e
frameIntervalNs
di 16,6 ms, il fotogramma successivo si trova a N + 16,6 ms
dopo il tempo attuale N. Dopo il momento attuale N, la cadenza dei fotogrammi è di 16,6 ms fino a quando non vengono apportate ulteriori modifiche.
IComposerClient.notifyExpectedPresent
viene chiamato solo se è impostato DisplayConfiguration.notifyExpectedPresentConfig
e se si verifica una delle seguenti condizioni di temporizzazione:
- Tempo di presentazione fuori sincronia: il tempo di presentazione previsto del prossimo frame si discosta dalla frequenza di aggiornamento regolare del display definita da
frameIntervalNs
. - Timeout superato: l'intervallo di tempo tra i frame precedenti è maggiore o uguale a
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
fornisce un indizio sulla frequenza dei frame successivi in nanosecondi.
Test
Utilizza onRefreshRateChangedDebug
per il debug. Questo metodo informa il client che la frequenza di aggiornamento del display è cambiata.
Utilizza l'app di test TouchLatency
per i test manuali, come mostrato nella Figura 2:
Figura 2. App di test TouchLatency.
Nell'app di test, utilizza il cursore per regolare la frequenza di rendering in base a vari valori della frequenza di aggiornamento del divisore della frequenza di aggiornamento del display. Osserva come cambia la frequenza fotogrammi rispetto a quella richiesta.