Taxa de atualização adaptativa

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.

arr-exemplo

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 como null, 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 uma minFrameIntervalNs 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:

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:

touchlatency-app

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.