En esta guía, se describe el proceso para analizar y optimizar el rendimiento de los juegos en dispositivos Android y brindar una experiencia del usuario fluida. Abarca la identificación de cuellos de botella en el rendimiento, la distinción entre problemas de CPU y GPU, y la verificación de los resultados de la optimización.
Sin importar qué tan divertido o atractivo sea un juego, si no se ejecuta bien en dispositivos móviles, los jugadores no lo disfrutarán y no tendrá tanto éxito. Incluso los juegos divertidos pueden tener problemas, como una baja velocidad de fotogramas por segundo (FPS) o que el dispositivo se caliente demasiado. Estos problemas hacen que los jugadores se sientan insatisfechos. Por lo tanto, mejorar el rendimiento del juego es fundamental, y debes comprender cómo optimizarlo.
El proceso de optimización del rendimiento incluye los siguientes pasos:
Medir el rendimiento general del juego Cuantifica la degradación del rendimiento por escena para identificar anomalías.
Verificación de límites de CPU y GPU Determina la causa subyacente, ya sea que dependa de la CPU o de la GPU.
Herramientas: Unreal Insight, Unity Profiler, Perfetto y herramientas de medición del rendimiento
Optimización de la CPU. Rectifica los cuellos de botella de rendimiento identificados.
Herramientas: Unreal Insight, Unity Profiler, Perfetto y Simpleperf
Optimización de la GPU. Rectifica los cuellos de botella de rendimiento identificados.
Herramientas: RenderDoc, Arm Mobile Studio, AGI y herramientas específicas del proveedor
Pruebas A/B: Realiza pruebas A/B para validar rigurosamente la eficacia de las optimizaciones implementadas.
Herramientas: Unreal Insight, Unity Profiler, Perfetto y herramientas de medición del rendimiento, bloqueo de frecuencia de CPU o GPU, y RenderDoc.
Este proceso iterativo (1 a 5) se mantiene hasta que se alcanzan correctamente los FPS y los parámetros térmicos objetivo.
Requisitos previos
Tener una compilación del juego lista para probar en un dispositivo con Android
Instala las siguientes herramientas:
Analiza el rendimiento integral del juego
Debes verificar el rendimiento general del juego y detectar cualquier degradación o anomalía del rendimiento basada en la escena. Antes de optimizar tu juego, verifica su rendimiento actual. Dado que los juegos incluyen muchas IU y escenas, analiza las escenas con un uso elevado de la CPU o la GPU, o los diseños que tienen un rendimiento inesperado, para supervisar la degradación del rendimiento y el uso de la CPU o la GPU por escena.
- Cuantifica la degradación del rendimiento: Usa herramientas de medición del rendimiento para medir el rendimiento general del juego. Mide el rendimiento por escena para identificar áreas específicas con degradación o anomalías.
- Identifica escenas problemáticas: Analiza los datos para encontrar escenas con un uso alto de CPU o GPU, o en las que los diseños de pantalla no producen el rendimiento esperado.
- Recopila datos de seguimiento: Usa herramientas de seguimiento para recopilar datos de rendimiento detallados de las escenas problemáticas identificadas.
Identifica los cuellos de botella de la CPU o la GPU
Si el juego no alcanza los FPS objetivo, determina si está limitado por la CPU o la GPU. Analizar el comportamiento de la CPU y la GPU es fundamental para encontrar oportunidades de optimización, incluso cuando el dispositivo se calienta o usa demasiada energía durante el juego. Puedes usar varios métodos para averiguar si el sistema está limitado por la CPU o la GPU.
Analiza los datos de registro: Usa tu herramienta preferida para analizar los datos de registro:
- Unreal Insight (Unreal Engine): Analiza el registro para ver los tiempos de
GameThread,RenderThreadyRHIThread.- Si
GameThreadoRenderThreadsuperan el límite de tiempo de fotogramas (por ejemplo, 33.3 ms para 30 FPS), el juego está vinculado a la CPU. - Si
RHIThreadmuestra una ejecución prolongada o representa la mayor parte del tiempo de fotogramas, el juego está limitado por la GPU.
- Si
Figura 2. Registro de la información de Unreal con GameThread, RenderThread y RHIThread (haz clic para ampliar) - Generador de perfiles de Unity (Unity): Si el subproceso principal consume una cantidad considerable de tiempo en marcadores como
Gfx.WaitForPresentOnGfxThreadmientras que el subproceso de renderización muestraGfx.PresentFrameo<GraphicsAPIName>.WaitForLastPresent, el juego está vinculado a la GPU.
Figura 3. Ejemplo de vinculación de GPU para Unity Profiler (haz clic para ampliar). - Perfetto: Analiza las asignaciones de núcleos de CPU y los detalles de ejecución de subprocesos. Este análisis facilita la identificación de cuellos de botella en el rendimiento a través de la revisión detallada de la información de ejecución de subprocesos.
Sobrecarga de la CPU: El registro indica que la carga de trabajo en
GameThreadyRenderThread, junto con la sincronización vertical, es responsable de las demoras en elQueuePresentdel subproceso de RHI, lo que indica una situación vinculada a la CPU.
Figura 4. Registros de Perfetto con detalles de ejecución de la CPU (haz clic para ampliar). Sobrecarga de la GPU: Si el tiempo de finalización de la GPU supera el límite de tiempo de procesamiento de fotogramas (por ejemplo, 25 ms), el juego está vinculado a la GPU. El registro indica que la finalización de la GPU supera los 25 ms, lo que significa una situación vinculada a la GPU.
Figura 5. Registros de Perfetto con detalles de la sobrecarga de la GPU (haz clic para ampliar).
- Unreal Insight (Unreal Engine): Analiza el registro para ver los tiempos de
Usa los comandos de estadísticas de Unreal Engine:
stat unit: Compara el tiempo asignado a los subprocesos de Game, Draw y RHI. Si los tiempos de juego y de dibujo son bajos, pero el tiempo de RHI supera constantemente el límite de tiempo de fotogramas, el juego está vinculado a la GPU. Por ejemplo, si los FPS requeridos son 30 (equivalente a 33.33 ms por fotograma) y los subprocesos de juego y de dibujo permanecen de forma constante dentro de un rango de 10 a 15 ms, pero el RHI supera de forma constante los 30 ms, esto sugiere un escenario vinculado a la GPU.
Figura 6: La unidad de estadísticas facilita la estimación de las condiciones vinculadas a la GPU. stat VulkanRHI: Verifica las duraciones de Queue Submit y Queue Present.
Figura 7. Stat VulkanRHI facilita la estimación de las condiciones vinculadas a la GPU (haz clic para ampliar). stat slow: Analiza el tiempo asignado a los subprocesos de Game, Render y RHI para identificar los impedimentos.
Verifica las métricas de rendimiento: Usa los resultados de tu análisis integral del rendimiento del juego. En Android:
- Vinculado a la CPU: Uso de CPU (normalizado) superior al 15%, con bajo uso de GPU y FPS bajos.
- Vinculado a la GPU: El uso de la GPU es superior al 90%.
Por lo general, si los FPS y el uso de la GPU son bajos, mientras que el uso de la CPU supera el 15%, la situación se puede considerar limitada por la CPU.
Figura 8: Métricas de rendimiento con el uso de CPU y GPU.
Optimiza el rendimiento de la CPU
Si el análisis indica que el juego está vinculado a la CPU, investiga más a fondo para identificar los subprocesos o las APIs específicos que causan el cuello de botella.
Para obtener orientación detallada, consulta Sugerencias para optimizar la CPU y la GPU en Android.
Optimiza el rendimiento de la GPU
Si el análisis indica que el juego está limitado por la GPU, investiga más a fondo con depuradores de fotogramas para analizar la canalización de renderización y las llamadas de dibujo.
Para obtener orientación detallada, consulta Sugerencias para optimizar la CPU y la GPU en Android.
Verifica la eficacia de la optimización
- Realiza pruebas A/B: Crea una compilación con las optimizaciones implementadas.
- Mide el rendimiento: Usa las mismas herramientas y métodos del análisis inicial para medir el rendimiento de la compilación optimizada.
- Compara los resultados: Compara los nuevos datos de rendimiento con los datos iniciales para confirmar que se resolvieron los cuellos de botella identificados y que se cumplen los objetivos térmicos y de FPS.
- Itera: Repite los pasos de análisis y optimización hasta que se logre el rendimiento deseado.