Cómo optimizar las frecuencias de actualización

Android 15 establece una frecuencia de actualización predeterminada de 60 Hz para los juegos para optimizar el consumo de energía. Para desbloquear velocidades de fotogramas más altas, como 120 FPS, ahora debes solicitarlas de forma explícita con la API de Frame Rate o la biblioteca de Swappy.

Sin embargo, el sistema puede anular esta solicitud en función de factores como el nivel de batería o la temperatura del dispositivo. Si bien las frecuencias de actualización más altas mejoran la fluidez visual, también exigen más energía y generan calor adicional. Por lo tanto, es fundamental ofrecer a los usuarios la opción de elegir su frecuencia de actualización preferida y supervisar cuidadosamente el rendimiento para garantizar una experiencia del usuario equilibrada.

Usa la setFrameRate() API

La API de setFrameRate() permite a los desarrolladores de juegos usar una frecuencia de actualización de pantalla específica. Para ello, se deben seguir dos pasos:

  1. Verifica la compatibilidad del dispositivo y la versión de Android.
  2. Solicita FPS altos con setFrameRate().

Verifica la compatibilidad del dispositivo y la versión de Android:

Usa los métodos Display.getSupportedModes() para determinar si el dispositivo admite 90 Hz, 120 Hz o cualquier otra frecuencia de actualización. Si el dispositivo está limitado a 60 Hz, no es posible exceder este límite.

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")
}

Solicita FPS altos

Invoca setFrameRate() cuando se inicie el bucle de renderización, durante la inicialización de la ventana del juego o cuando los FPS objetivo necesiten cambiar la frecuencia de actualización de la pantalla.

Incluso si solicitas una frecuencia más alta, el sistema podría limitar la frecuencia de actualización a 60 Hz debido a factores como el modo de ahorro de energía o la limitación térmica. Si el rendimiento de renderización de tu juego no alcanza los FPS objetivo, solicitar una frecuencia de actualización más alta puede consumir energía innecesaria y aumentar la temperatura del dispositivo.

En el siguiente fragmento, se muestra cómo evitar una frecuencia de actualización demasiado alta con la API de 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
  )
}

En la página de Framerate, se proporciona información más detallada para que puedas leerla.

Usa la biblioteca de Frame Pacing

La biblioteca de Frame Pacing, o Swappy, es una biblioteca de código abierto diseñada para simplificar la administración de VSync y la programación de fotogramas en motores de juegos de Android C/C++. Esta herramienta optimiza el proceso de optimización de las frecuencias de actualización, ya que actúa de manera eficaz como una capa de abstracción de nivel superior sobre funcionalidades como setFrameRate(). Además, Swappy proporciona funciones adicionales que pueden mejorar la fluidez y el rendimiento generales de tu juego.

En la página de Swappy, se proporciona información más detallada.

Sugerencias adicionales para obtener mejores resultados

En la siguiente sección, se presentan varias sugerencias principales:

  1. Cambio dinámico de la velocidad de fotogramas
  2. Supervisión del rendimiento
  3. Proporciona opciones de FPS en función de la frecuencia de actualización máxima de la pantalla.

Cambio dinámico de la velocidad de fotogramas

Para optimizar el rendimiento y el consumo de energía, considera implementar el cambio dinámico de la velocidad de fotogramas en tu juego. Esta técnica te permite realizar una transición fluida entre frecuencias de actualización más altas, como 120 Hz para un juego más fluido durante escenas exigentes, y frecuencias más bajas, como 60 Hz durante momentos menos intensos o cuando la duración de la batería es una preocupación o se orienta a menos de 60 FPS. La ejecución constante a 120 Hz puede generar un calor excesivo y un agotamiento rápido de la batería, lo que podría generar una experiencia del usuario negativa. Si ajustas de forma inteligente la frecuencia de actualización en función de la carga de renderización actual y las condiciones del dispositivo, puedes lograr un equilibrio entre la fidelidad visual y la eficiencia energética.

Supervisión del rendimiento

Para garantizar que tu juego funcione de manera óptima con frecuencias de actualización más altas, integra herramientas de supervisión del rendimiento, como un contador de fotogramas o una superposición de rendimiento. Estas herramientas proporcionan comentarios en tiempo real sobre la velocidad de fotogramas real de tu juego, lo que te permite verificar si alcanzas de manera constante los 120 FPS objetivo.

Si la velocidad de fotogramas fluctúa de manera significativa, considera orientar a una velocidad de fotogramas alcanzable más baja en el dispositivo determinado. Esto puede ofrecer una experiencia más fluida sin los problemas de rendimiento que podrían ocurrir cuando se intenta obtener la frecuencia de actualización más alta.

Proporciona opciones de FPS en función de la frecuencia de actualización máxima de la pantalla

Tu juego debe detectar la frecuencia de actualización máxima de la pantalla que admite el dispositivo actual, como 60 Hz, 90 Hz o 120 Hz, y limitar la configuración de FPS en consecuencia. Por ejemplo, si el dispositivo solo admite hasta 60 Hz, es recomendable inhabilitar cualquier opción superior a 60 FPS en la configuración del juego para evitar confundir al jugador.