A partir do Android 15, o recurso de taxa de atualização adaptativa (ARR, na sigla em inglês) permite que a taxa de atualização da tela se adapte à taxa de quadros do conteúdo usando etapas discretas de VSync.
O recurso ARR oferece os seguintes benefícios:
Redução do consumo de energia: por padrão, o ARR permite que os dispositivos operem em taxas mais baixas do que as taxas de atualização máximas, fazendo a transição para taxas mais altas apenas quando essencial para a experiência do usuário, o que minimiza o consumo de energia desnecessário.
Redução de instabilidade: o ARR elimina a necessidade de alternar de modo, que é uma causa conhecida de instabilidade.
Visão geral
Em painéis não ARR, a tela é atualizada em uma cadência fixa determinada pelo modo de exibição ativa.
Em painéis de ARR, as taxas de VSync e de atualização da tela são separadas, permitindo que as taxas de atualização mudem em um modo de exibição, com base na cadência de atualização do conteúdo. Os painéis podem ser executados em taxas de atualização que são divisores do efeito de rasgo (TE, na sigla em inglês) do painel. Os OEMs têm a flexibilidade de implementar o ARR com base nas comissões de energia preferidas.
A figura abaixo é uma tela com vsyncPeriod
de 240 Hz e
minFrameIntervalNs
(taxa de atualização máxima) de 120 Hz. O VSync ocorre a cada
4,16 ms. Um frame pode ser apresentado em qualquer múltiplo de VSync após o
minFrameIntervalNs
do último frame.
Figura 1. Exemplo de ARR.
Implementação
O Android 15 oferece suporte à ARR com as novas APIs HAL do Hardware Composer (HWC) e mudanças
de plataforma. Para ativar o ARR, os OEMs precisam oferecer suporte a mudanças no kernel e no sistema em
dispositivos com o Android 15 e versões mais recentes e implementar a versão 3 das
APIs android.hardware.graphics.composer3
, conforme listado nas seções a seguir.
Consulte a implementação de referência do Pixel das APIs que oferecem suporte a ARR para mais informações.
DisplayConfiguration.aidl
A API DisplayConfiguration.aidl
especifica a configuração
de exibição usando atributos de exibição, além dos seguintes atributos para
ARR:
vrrConfig
opcional: se definida, a ARR será ativada para configurações específicas. Se definido comonull
, o modo de exibição é definido como modos não ARR, como taxa de atualização múltipla (MRR, na sigla em inglês). Com esse atributo, uma tela pode ser configurada como MRR ou ARR, mas não ambas.vsyncPeriod
: a taxa de VSync da tela. Em telas ARR, esse valor é usado para derivar as taxas de atualização discretas com suporte.Os fornecedores precisam definir o valor
DisplayConfiguration.vsyncPeriod
para todos os dispositivos. Para telas que não são ARR,DisplayConfiguration.vsyncPeriod
é a taxa de atualização da tela. Se um dispositivo oferece suporte a 120 Hz, esse valor precisa ser de 8,3 ms.Para telas ARR,
DisplayConfiguration.vsyncPeriod
é a frequência do sinal TE. Se um dispositivo tiver umaminFrameIntervalNs
de 8,3 ms, mas a TE for 240 Hz, esse valor precisa ser 4,16 ms.
VrrConfig.aidl
A API VrrConfig.aidl
inclui os seguintes atributos:
minFrameIntervalNs
: a taxa de atualização máxima que a tela pode oferecer.NotifyExpectedPresentConfig
: é determinado por quando a tela exige aviso com antecedência sobre um frame futuro.
IComposerClient.notifyExpectedPresent
fornece uma dica
para um frame que provavelmente será apresentado, para que a tela possa adaptar o
período de autoatualização de acordo. frameIntervalNs
representa a cadência
atual que segue após o expectedPresentTime
. Por exemplo, se
notifyExpectedPresent
for chamado com expectedPresentTime
N e
frameIntervalNs
de 16,6 ms, o próximo frame estará em N + 16,6 ms
após o tempo atual N. Após o tempo atual N, a cadência de frames é
de 16,6 ms até que haja outras mudanças.
IComposerClient.notifyExpectedPresent
é chamado apenas quando
DisplayConfiguration.notifyExpectedPresentConfig
está definido e se uma das
seguintes condições de tempo ocorrer:
- Hora de apresentação fora de cadência: o tempo de apresentação esperado do próximo
frame se desvia da taxa de atualização normal da tela definida por
frameIntervalNs
. - Tempo limite excedido: o intervalo de tempo entre os frames anteriores é maior
ou igual a
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
fornece uma dica sobre a
cadência dos próximos frames em nanossegundos.
Teste
Use onRefreshRateChangedDebug
para depuração. Esse
método notifica o cliente de que a taxa de atualização da tela mudou.
Use o app de teste TouchLatency
para testes manuais, conforme mostrado na Figura 2:
Figura 2. App de teste de TouchLatency.
No app de teste, use o controle deslizante para ajustar a taxa de renderização a vários valores de taxas de atualização do divisor da tela. Observe como o frame rate muda em relação à taxa solicitada.