Otimizar taxas de atualização

O Android 15 define uma taxa de atualização padrão de 60 Hz para jogos para otimizar o consumo de energia. Para desbloquear taxas de frames mais altas, como 120 QPS, agora é necessário solicitar essas taxas explicitamente usando a API Frame Rate ou a biblioteca Swappy.

No entanto, o sistema pode substituir essa solicitação com base em fatores como o nível da bateria ou a temperatura do dispositivo. Embora taxas de atualização mais altas melhorem a suavidade visual, elas também exigem mais energia e geram mais calor. Portanto, é fundamental oferecer aos usuários a opção de escolher a taxa de atualização preferida e monitorar cuidadosamente o desempenho para garantir uma experiência equilibrada.

Use a API setFrameRate()

A API setFrameRate() permite que os desenvolvedores de jogos usem uma taxa de atualização de tela específica. Para fazer isso, siga estas duas etapas:

  1. Verifique a compatibilidade do dispositivo e da versão do Android.
  2. Solicite FPS altos usando setFrameRate().

Verificar a compatibilidade do dispositivo e da versão do Android:

Use os métodos Display.getSupportedModes() para determinar se o dispositivo oferece suporte a 90 Hz, 120 Hz ou outras taxas de atualização. Se o dispositivo estiver limitado a 60 Hz, não será possível exceder esse limite.

Kotlin

val display = windowManager.defaultDisplay
val supportedModes = display.supportedModes
for (mode in supportedModes) {
  Log.d("DisplayInfo", "Supported mode: ${mode.physicalWidth}x${mode.physicalHeight}, ${mode.refreshRate}Hz")
}

Solicitar QPS altos

Invoque setFrameRate() quando o loop de renderização começar, durante a inicialização da janela do jogo ou quando o FPS de destino precisar mudar a taxa de atualização da tela.

Mesmo que você solicite uma taxa mais alta, o sistema ainda pode limitar a taxa de atualização a 60 Hz devido a fatores como o modo de economia de energia ou a limitação térmica. Se a performance de renderização do jogo não atingir o QPS desejado, solicitar uma taxa de atualização mais alta pode consumir energia desnecessária e aumentar a temperatura do dispositivo.

O snippet a seguir demonstra como evitar uma taxa de atualização excessivamente alta com a API setFrameRate().

Kotlin

val targetFps = 120f
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
  window.setFrameRate(
      targetFps,
      Window.FrameRateCompatibility.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,
      0
  )
}

A página "Framerate" (em inglês) oferece informações mais detalhadas.

Usar a biblioteca Frame Pacing

A biblioteca de ritmo de frames, ou Swappy, é uma biblioteca de código aberto projetada para simplificar o gerenciamento de VSync e a programação de frames em mecanismos de jogos Android C/C++. Essa ferramenta simplifica o processo de otimização das taxas de atualização, atuando como uma camada de abstração de nível superior em relação a funcionalidades como setFrameRate(). Além disso, o Swappy oferece outros recursos que podem melhorar a fluidez e o desempenho geral do jogo.

A página Swappy (em inglês) oferece informações mais detalhadas.

Outras dicas para melhores resultados

A seção a seguir apresenta várias dicas importantes:

  1. Troca dinâmica de frame rate.
  2. Monitoramento de desempenho.
  3. Ofereça opções de QPS com base na taxa de atualização máxima da tela.

Troca dinâmica de frame rate

Para otimizar a performance e o consumo de energia, implemente a troca dinâmica de frame rate no jogo. Essa técnica permite fazer a transição entre taxas de atualização mais altas, como 120 Hz, para uma jogabilidade mais suave durante cenas exigentes, e taxas mais baixas, como 60 Hz, durante momentos menos intensivos ou quando a duração da bateria é uma preocupação ou o objetivo é ficar abaixo de 60 QPS. A execução constante a 120 Hz pode levar a uma geração excessiva de calor e ao consumo rápido da bateria, o que pode resultar em uma experiência negativa do usuário. Ao ajustar de forma inteligente a taxa de atualização com base na carga de renderização atual e nas condições do dispositivo, é possível encontrar um equilíbrio entre a fidelidade visual e a eficiência energética.

Monitoramento de desempenho

Para garantir a melhor performance do jogo em taxas de atualização mais altas, integre ferramentas de monitoramento de desempenho, como um frame counter ou uma sobreposição de desempenho. Essas ferramentas fornecem feedback em tempo real sobre a taxa de frames real do jogo, permitindo verificar se você está alcançando consistentemente o objetivo de 120 QPS.

Se a taxa de frames flutua significativamente, considere segmentar uma taxa de frames alcançável mais baixa no dispositivo. Isso pode proporcionar uma experiência mais suave sem os problemas de desempenho que podem ocorrer ao tentar alcançar a taxa de atualização mais alta.

Oferecer opções de QPS com base na taxa de atualização máxima da tela

O jogo precisa detectar a taxa de atualização máxima da tela aceita pelo dispositivo atual, como 60 Hz, 90 Hz ou 120 Hz, e limitar as configurações de QPS de acordo. Por exemplo, se o dispositivo oferecer suporte apenas a 60 Hz, é recomendável desativar todas as opções acima de 60 QPS nas configurações do jogo para evitar confundir o jogador.