Taxa de atualização adaptativa

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.

arr-example

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 como null, 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.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 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 um minFrameIntervalNs de 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:

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:

touchlatency-app

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.