Analiza y optimiza el rendimiento del juego

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:

  1. Medir el rendimiento general del juego Cuantifica la degradación del rendimiento por escena para identificar anomalías.

  2. 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

  3. Optimización de la CPU. Rectifica los cuellos de botella de rendimiento identificados.

    Herramientas: Unreal Insight, Unity Profiler, Perfetto y Simpleperf

  4. 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

  5. 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.

  6. Este proceso iterativo (1 a 5) se mantiene hasta que se alcanzan correctamente los FPS y los parámetros térmicos objetivo.

Requisitos previos

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.

  1. 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.
  2. 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.
  3. 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.

  1. 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, RenderThread y RHIThread.
      • Si GameThread o RenderThread superan el límite de tiempo de fotogramas (por ejemplo, 33.3 ms para 30 FPS), el juego está vinculado a la CPU.
      • Si RHIThread muestra una ejecución prolongada o representa la mayor parte del tiempo de fotogramas, el juego está limitado por la GPU.
    Cronograma de seguimiento de Unreal Insight que muestra los tiempos de ejecución de GameThread, RenderThread y RHIThread
    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.WaitForPresentOnGfxThread mientras que el subproceso de renderización muestra Gfx.PresentFrame o <GraphicsAPIName>.WaitForLastPresent, el juego está vinculado a la GPU.
    Cronograma del generador de perfiles de Unity que muestra el subproceso principal en espera de Gfx.WaitForPresentOnGfxThread
    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 GameThread y RenderThread, junto con la sincronización vertical, es responsable de las demoras en el QueuePresent del subproceso de RHI, lo que indica una situación vinculada a la CPU.

      Registro de Perfetto que muestra los tiempos de ejecución de GameThread, RenderThread y RHIThread
      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.

      Registro de Perfetto que muestra el bloque de finalización de la GPU en espera de la finalización de la GPU
      Figura 5. Registros de Perfetto con detalles de la sobrecarga de la GPU (haz clic para ampliar).
  2. 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.
    Superposición de la unidad de estadísticas que muestra los tiempos de ejecución de Frame, Game, Draw, GPU y RHIT
    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.
    Capa superpuesta de Stat VulkanRHI que muestra los contadores de ciclos para 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.
  3. 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.

    Tablas de métricas de rendimiento que destacan situaciones vinculadas a la CPU y a la GPU
    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

  1. Realiza pruebas A/B: Crea una compilación con las optimizaciones implementadas.
  2. Mide el rendimiento: Usa las mismas herramientas y métodos del análisis inicial para medir el rendimiento de la compilación optimizada.
  3. 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.
  4. Itera: Repite los pasos de análisis y optimización hasta que se logre el rendimiento deseado.

Consulta también