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 de VSync discretas.
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 for 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 que não são de ARR, a tela é atualizada em uma cadência fixa determinada pelo modo de exibição ativo.
Nos painéis de ARR, a taxa de VSync e a taxa 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 a seguir mostra uma tela com vsyncPeriod
de 240 Hz e
minFrameIntervalNs
(taxa de atualização máxima) de 120 Hz. A sincronização vertical ocorre a cada
4,16 ms. Um frame pode ser apresentado em qualquer múltiplo de sincronização vertical após a
minFrameIntervalNs
do último frame.
Figura 1. Exemplo de ARR.
Implementação
O Android 15 oferece suporte ao ARR com novas APIs HAL do Hardware Composer (HWC) e mudanças
na 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 definido, o ARR será ativado 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 de ARR, esse valor é usado para derivar as taxas de atualização discretas compatíveis.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 de ARR,
DisplayConfiguration.vsyncPeriod
é a frequência do sinal TE. Se um dispositivo tiver umminFrameIntervalNs
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
: isso é determinado quando a tela exige aviso prévio de 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: a hora de apresentação esperada 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 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 a taxa de frames muda em relação à taxa solicitada.