O Android 15 apresenta o recurso de taxa de atualização adaptativa (ARR, na sigla em inglês), que permite que a taxa de atualização da tela se adapte à taxa de frames 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 menores do que as taxas de atualização máximas, passando 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 troca 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 ativo.
Nos painéis de ARR, a taxa de VSync e a taxa de atualização da tela são separadas, o que permite 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 tearing (TE) do painel. Os OEMs podem implementar a ARR com base nas compensaçõ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. 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 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 Android 15 e versões mais recentes, além de 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 à 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:
- Opcional
vrrConfig: se definido, o ARR será ativado para configurações específicas. Se definido comonull, o modo de exibição será definido como modos não ARR, como taxa de atualização múltipla (MRR). Com esse atributo, uma exibição pode ser configurada como MRR ou ARR, mas não ambos. vsyncPeriod: A taxa de VSync da tela. Em telas ARR, esse valor é usado para derivar as taxas de atualização discretas compatíveis.Os fornecedores precisam definir o valor
DisplayConfiguration.vsyncPeriodpara todos os dispositivos. Para telas que não são ARR,DisplayConfiguration.vsyncPeriodé a taxa de atualização da tela. Se um dispositivo for compatível com 120 Hz, esse valor deverá ser de 8,3 ms.Para as exibições de ARR,
DisplayConfiguration.vsyncPeriodé a frequência do sinal de TE. Se um dispositivo tiver umminFrameIntervalNsde 8,3 ms, mas a TE for 240 Hz, esse valor precisará ser de 4,16 ms.
VrrConfig.aidl
A API VrrConfig.aidl inclui os seguintes atributos:
minFrameIntervalNs: A taxa máxima de atualização 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 o expectedPresentTime. Por exemplo, se
notifyExpectedPresent for chamado com expectedPresentTime N e
frameIntervalNs de 16,6 ms, o próximo frame será N + 16,6 ms
após o tempo atual N. Depois do tempo atual N, a cadência de frames será de 16,6 ms até que haja mais mudanças.
IComposerClient.notifyExpectedPresent é chamado somente quando DisplayConfiguration.notifyExpectedPresentConfig está definido e se uma das seguintes condições de tempo ocorre:
- Tempo presente fora de cadência: o tempo de apresentação esperado do próximo
frame difere da taxa de atualização regular da tela definida por
frameIntervalNs. - Tempo limite excedido: o intervalo 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 taxa de atualização da tela. Observe como a taxa de frames muda com base na taxa solicitada.