En Android vitals, una sesión lenta es aquella en la que más del 25% de los fotogramas son lentos. Un fotograma es lento si no se presenta en menos de 50 ms después del fotograma anterior (equivalente a 20 FPS). Android vitals también informa una segunda métrica de sesiones lentas con un objetivo de 34 ms (equivalente a 30 FPS). Si usas sesiones lentas, podrás comprender el rendimiento de la velocidad de fotogramas de tu juego, que afecta la fluidez y homogeneidad del título para los usuarios.
A su debido tiempo, Play comenzará a alejar a los usuarios de los juegos que no puedan alcanzar los 20 FPS en sus teléfonos. Ten en cuenta que Android vitals solo comienza a supervisar la velocidad de fotogramas después de que el juego se ejecutó por un minuto.
Visita nuestro Centro de ayuda para obtener más detalles sobre la métrica.

Cómo medir los FPS y detectar fotogramas lentos
El comando dumpsys SurfaceFlinger --timestats de Android proporciona histogramas de tiempos de FPS promedio y de presentación a presentación para todas las capas que se renderizan. El tiempo present to present de un fotograma es el intervalo entre el fotograma actual y el anterior que se dibuja. Sigue estos pasos para usar el comando y recopilar los FPS de tu juego:
Ejecuta el comando con las marcas
enableyclearpara comenzar a capturar información:adb shell dumpsys SurfaceFlinger --timestats -clear -enableCuando el juego se ejecute durante el tiempo suficiente, vuelve a ejecutar el comando con la marca
dumppara volcar la información:adb shell dumpsys SurfaceFlinger --timestats -dumpLa información volcada proporciona los fotogramas totales y el histograma de
presentToPresentpara todas las capas renderizadas por SurfaceFlinger. Para encontrar la sección de tu juego, filtra porlayerName:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833Puedes calcular la velocidad de fotogramas lenta de la sesión según la información de cada capa.
Por ejemplo, el porcentaje de fotogramas lentos de 20 FPS = (suma de valores de 54 ms a 1,000 ms) / totalFrames × 100
totalFrames = 274 ... presentToPresent histogram: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0En el volcado, también se muestran los FPS promedio de cada capa:
... averageFPS = 30.179 ...Después de recopilar toda la información, inhabilita timestats con la marca
disable:adb shell dumpsys SurfaceFlinger --timestats -disable
Causas y soluciones de los fotogramas lentos
Existen muchos motivos por los que un fotograma puede presentarse o renderizarse en la pantalla durante más tiempo que el objetivo. Es posible que tu juego esté vinculado a la CPU o la GPU, que el dispositivo se esté sobrecalentando y activando un estado térmico de limitación o que haya una discrepancia entre la velocidad de fotogramas del juego y la frecuencia de actualización de la pantalla del dispositivo.
Usa Android Frame Pacing (Swappy), Vulkan y ADPF para abordar estos problemas y mejorar el rendimiento de tu juego.
¿Qué es Swappy?
La biblioteca de Android Frame Pacing, también conocida como Swappy, forma parte de las bibliotecas de AGDK. Swappy permite que los juegos de OpenGL y Vulkan logren una renderización eficaz y un ritmo de fotogramas correcto en Android.
La organización de fotogramas es la sincronización de la lógica y el bucle de renderización de un juego con el subsistema de visualización de un SO y el hardware de visualización subyacente. El subsistema de visualización de Android se diseñó para evitar artefactos visuales (conocidos como desgarros) que pueden ocurrir cuando el hardware de la pantalla cambia a un fotograma nuevo a mitad de una actualización. Para evitar estos artefactos, el subsistema de visualización hace lo siguiente:
- Almacena en búfer los fotogramas anteriores de forma interna.
- Detecta envíos de fotogramas tardíos.
- Repite la visualización de fotogramas anteriores cuando se detectan fotogramas retrasados.
Obtén información sobre cómo Mir 2 usó Swappy para reducir su tasa de sesiones lentas del 40% al 10%.
Cómo usar Swappy en proyectos nativos
Consulta las siguientes guías para integrar la biblioteca de Android Frame Pacing en tu juego:
- Cómo integrar Android Frame Pacing en tu procesador OpenGL
- Integra Android Frame Pacing a tu procesador de Vulkan
Cómo usar Swappy en el motor de juegos Unity
Unity integró Android Frame Pacing en su motor. Para habilitar esta función en Unity 2019.2 o versiones posteriores, marca la casilla de verificación Optimized Frame Pacing en configuración del proyecto > Player > Settings para Android > Resolution and Presentation:

Como alternativa, habilita de forma programática la opción Optimized Frame Pacing en tu código lógico para permitir que Unity distribuya los fotogramas de manera uniforme y, así, reducir la variación en la velocidad de fotogramas y crear una experiencia de juego más fluida.
Cómo usar Swappy en el motor de juego Unreal
Unreal 4.25 y versiones posteriores integran la biblioteca de Android Frame Pacing, que forma parte del Android Game Development Kit. En el artículo Sincronización de fotogramas para dispositivos móviles, se explica cómo habilitar la biblioteca de Android Frame Pacing y cómo controlar la sincronización de fotogramas desde el código C++.
Qué es Vulkan
Vulkan es una API de gráficos 3D multiplataforma moderna que se diseñó para minimizar la abstracción entre el hardware de gráficos del dispositivo y tu juego. Vulkan es la principal API de gráficos de bajo nivel de Android que reemplaza a OpenGL ES. OpenGL ES aún es compatible con Android, pero ya no se encuentra en desarrollo activo de funciones.
Vulkan ofrece las siguientes ventajas en comparación con OpenGL ES:
- Arquitectura más eficiente con menor sobrecarga de CPU en el controlador de gráficos
- Nuevas estrategias de optimización para mejorar el rendimiento de la CPU
- Nuevas funciones de gráficos que no están disponibles en OpenGL ES, como las APIs desvinculadas y el trazado de rayos
Cómo usar Vulkan en proyectos de Android nativos
El codelab Cómo empezar a usar Vulkan en Android te guía para configurar tu canalización de renderización de Vulkan y, luego, renderizar un triángulo texturizado y rotativo en la pantalla. Usa el codelab para aprender a renderizar los gráficos de tu juego.
Cómo usar Vulkan en el motor de juegos Unity
Para habilitar la selección automática de dispositivos en Unity, sigue los pasos para configurar la API de Auto Graphics.
Como alternativa, puedes habilitar Vulkan de forma manual si inhabilitas la API de Auto Graphics y colocas Vulkan en la prioridad más alta de la lista de APIs de gráficos. Si usas Unity 2021.1 o una versión anterior, esta es la única manera de utilizar Vulkan.
Usa el complemento del motor de Unity de VkQuality para proporcionar recomendaciones de la API de gráficos en el momento del lanzamiento para que tu juego las use en dispositivos específicos.
Cómo usar Vulkan en el motor de juego Unreal
Para habilitar la API de gráficos de Vulkan, navega a Configuración del proyecto > Platforms > Android > Build y selecciona Support Vulkan. Cuando seleccionas Support Vulkan y Support OpenGL ES3.2, Unreal usa Vulkan de forma predeterminada. Si el dispositivo no es compatible con Vulkan, Unreal recurrirá a OpenGL ES 3.2.
Si usas funciones específicas de Vulkan que se sabe que tienen un comportamiento incorrecto en ciertos dispositivos, puedes personalizar tu archivo BaseDeviceProfile.ini para excluirlos. Para aprender a personalizar BaseDeviceProfile.ini, consulta
Cómo personalizar perfiles de dispositivos y escalabilidad
para Android. Dado que los controladores de dispositivos nuevos pueden corregir dispositivos defectuosos conocidos, mantén actualizado el archivo BaseDeviceProfile.ini para obtener todas las optimizaciones.
¿Qué es la ADPF?
El framework de rendimiento dinámico de Android (ADPF) optimiza los juegos según las funciones dinámicas de administración térmica, de CPU y de GPU en Android. Aunque el enfoque es en los juegos, también puedes usar las funciones para otras apps de alto rendimiento.
ADPF es un conjunto de APIs que permiten que los juegos y las apps de alto rendimiento interactúen de forma más directa con los sistemas térmicos y de alimentación de los dispositivos Android. Con estas APIs, puedes supervisar el comportamiento dinámico en sistemas Android y optimizar el rendimiento del juego en un nivel sostenible que no sobrecaliente los dispositivos.
Estas son las funciones principales de ADPF:
- API de Thermal: Supervisa el estado térmico de un dispositivo para que la aplicación pueda ajustar de forma proactiva la carga de trabajo antes de que sea insostenible.
- API de CPU Performance Hint: Proporciona sugerencias de rendimiento que le permiten a Android elegir la configuración de rendimiento adecuada (por ejemplo, el punto de funcionamiento o el núcleo de la CPU) para la carga de trabajo.
- API de Game Mode y API de Game State: Habilita la optimización del juego priorizando las características de rendimiento o duración de batería, según la configuración del usuario y los parámetros específicos del juego.
- Modo de rendimiento fijo: Habilita el modo de rendimiento fijo en un dispositivo durante las comparativas para obtener mediciones que no se ven afectadas por la sincronización dinámica de la CPU.
- Modo de eficiencia energética: Indica a la sesión que los subprocesos de la sesión de sugerencia de rendimiento se pueden programar de forma segura para priorizar la eficiencia energética sobre el rendimiento. Disponible en Android 15 (nivel de API 35).
Cómo usar ADPF en proyectos de Android nativos
El codelab Cómo integrar funciones de adaptabilidad a tu juego nativo te guía para integrar funciones de ADPF en tu juego con pasos que puedes seguir a tu propio ritmo. Al final del codelab, habrás integrado las siguientes funciones:
- API de Thermal: Escucha la condición térmica del dispositivo y reacciona antes de que el dispositivo entre en un estado de limitación térmica.
- API de Game Mode: Comprende las preferencias de optimización de los jugadores (maximizar el rendimiento o preservar la batería) y realiza los ajustes necesarios.
- API de Game State: Permite que el sistema conozca el estado de tu juego (carga, reproducción, IU, etc.) y que pueda ajustar los recursos según corresponda (aumentar la E/S, la CPU, la GPU, etc.).
- API de Performance Hint: Permite que el sistema conozca tu modelo de subprocesos y tu carga de trabajo para que pueda asignar recursos según corresponda.
Cómo usar ADPF en el motor de juegos Unity
Adaptive Performance de Unity es una herramienta para desarrolladores de juegos que buscan optimizar sus juegos en dispositivos móviles, en particular para el diverso ecosistema de Android. Adaptive Performance permite que tu juego se adapte a las características térmicas y de rendimiento del dispositivo en tiempo real, lo que garantiza una experiencia de juego fluida y eficiente.
Proveedor de Adaptive Performance para Android: Te guía por los pasos para implementar ADPF en Unity. Consulta también Rendimiento adaptable de Unity de ADPF y proveedor de Android.
Cómo usar ADPF en el motor de juego Unreal
- Descarga el complemento.
- Copia el complemento en la carpeta de complementos del proyecto.
- Habilita el complemento de ADPF para Unreal Engine en el editor de Unreal.
- Reinicia el editor de Unreal.
- Compila y prepara el juego.
El complemento del framework de rendimiento dinámico de Android (ADPF) para Unreal Engine proporciona un rendimiento estable y evita la limitación térmica. Descarga el complemento desde GitHub. Este complemento cambia las funciones configurando los valores de la consola de Unreal. Para obtener más detalles, consulta el complemento de ADPF para Unreal Engine.