Estimar los tiempos de procesamiento de fotogramas de la CPU y la GPU (tiempos de fotogramas) es esencial para comprender el rendimiento de tu app y ubicar los cuellos de botella. Cuando creas un perfil de una app con AGI, System Profiler proporciona datos de seguimiento que puedes usar para estimar los tiempos de fotogramas.
Tiempos de CPU
En AGI, puedes ver los tiempos de fotogramas de la CPU totales y activos en el seguimiento de la CPU de un perfil del sistema.
Tiempo de CPU total
Para medir el tiempo total de CPU empleado,
selecciona el período
que incluye el tiempo entre los eventos sucesivos de envío de fotogramas. Los eventos de envío de fotogramas son eglSwapBuffers (para OpenGL) y vkQueuePresentKHR (para Vulkan).
eglSwapBuffer.
vkQueuePresentKHR.Esta medición es una estimación del tiempo total de CPU,pero no necesariamente representa el tiempo de CPU activo. Por ejemplo, en las apps vinculadas a la GPU, la CPU puede esperar a que la GPU complete su trabajo antes de enviar un fotograma nuevo. Esto suele suceder cuando un evento dequeueBuffer, eglSwapBuffer (para OpenGL) o vkQueuePresent (para Vulkan) ocupa una gran parte del tiempo de CPU.
El tiempo de espera se incluye en el tiempo total de CPU, pero no en el tiempo de CPU activo.
dequeueBuffer y eglSwapBuffer eventos.
Tiempo de CPU activo
El tiempo de CPU activo determina cuándo la CPU ejecuta el código de la app sin estar en estado inactivo.
Para medir el tiempo de CPU activo, consulta los segmentos Running justo encima de los eventos de la CPU. Cuenta todas las partes del seguimiento entre los dos eventos de envío de fotogramas que se encuentran en el estado Running. Asegúrate de incluir los subprocesos de trabajo.
Otra forma de medir el tiempo de CPU activo es ver los segmentos de la app en los seguimientos de la CPU. Estos segmentos indican cuándo se ejecuta la CPU y corresponden a los segmentos Running.
Para identificar los segmentos de la app, puedes agregar ATrace marcadores a tu app. Esto mostrará los marcadores en el seguimiento de la CPU de System Profiler.
Estima los tiempos de fotogramas de la GPU
Para estimar los tiempos de fotogramas de la GPU, puedes usar segmentos o contadores de GPU en System Profiler. La estimación es más precisa cuando se usan segmentos de GPU.
Segmentos de GPU
Si System Profiler tiene información de segmentos de GPU disponible, puedes obtener información muy precisa sobre la latencia de fotogramas de la GPU midiendo la cantidad total de tiempo que tu app dedica a trabajar en tareas asociadas con un solo fotograma.
Dispositivos Mali
En los dispositivos Mali, los segmentos de GPU tienen seguimientos de fragment, non-fragment y en ocasiones supplementary non-fragment. Para los fotogramas menos complejos, el trabajo de fragmentos y no fragmentos es secuencial, por lo que se puede distinguir el trabajo de un fotograma de otro buscando espacios entre el trabajo activo de la GPU.
Como alternativa, si estás familiarizado con el trabajo que se envía a la GPU, identificar el patrón de los pases de renderizado enviados proporciona información sobre cuándo comienza y termina un fotograma.
Para las apps que tienen un flujo de trabajo de GPU más paralelizado, puedes obtener los tiempos de fotogramas de la GPU buscando todos los fotogramas que tengan el mismo submissionID en el panel Selection para cada segmento.
En el caso de las apps basadas en Vulkan, se pueden usar varios envíos para componer un fotograma. Haz un seguimiento de los IDs de envío con el seguimiento Vulkan Events, que contiene un segmento para cada envío. Si seleccionas un segmento de envío, se destacarán todos los segmentos de actividad de la GPU que correspondan al envío.
Dispositivos Adreno
En los dispositivos Adreno, los segmentos de GPU aparecen en el seguimiento GPU Queue 0 y siempre se representan de forma secuencial, por lo que puedes observar todos los segmentos que representan los pases de renderizado de un fotograma y usarlos para medir los tiempos de fotogramas de la GPU.
De manera similar al caso de Mali descrito anteriormente, si la app usa Vulkan, el seguimiento Vulkan Events proporciona información sobre el trabajo que se envía para ejecutar el fotograma. Para destacar los pases de renderizado, haz clic en los segmentos Vulkan Events asociados con el fotograma.
Hay algunos casos en los que los límites de fotogramas de la GPU son más difíciles de distinguir debido a que la app está muy vinculada a la GPU. En estos casos, si estás familiarizado con el trabajo que se envía a la GPU, puedes identificar el patrón con el que se ejecutan los pases de renderizado y determinar los límites de fotogramas a partir de esa información.
Contadores de GPU
Si la información de los segmentos de GPU no está disponible en un seguimiento, puedes estimar la latencia de fotogramas de la GPU con los seguimientos de GPU counter.
Dispositivos Mali
En los dispositivos Mali, puedes usar el seguimiento GPU utilization para estimar la latencia de fotogramas de la GPU de una app que no es intensiva en la GPU. Cuando las apps son menos intensivas en la GPU, tienen períodos regulares de actividad alta y baja de la GPU, en lugar de una actividad alta constante. Para estimar los tiempos de fotogramas de la GPU con el seguimiento GPU utilization, mide la duración de los períodos de actividad alta en el seguimiento.
Si la app es más intensiva en la GPU, el uso de la GPU puede ser muy alto de manera constante. En este caso, puedes usar los seguimientos de fragment queue utilization y non-fragment queue utilization para supervisar la actividad de la GPU y estimar los tiempos de fotogramas de la GPU. Si buscas patrones en los seguimientos de fragment y non-fragment , puedes obtener una estimación aproximada de dónde están los límites de un fotograma y usarla para medir la latencia de fotogramas de la GPU.
Dispositivos Adreno
En los dispositivos Adreno, si la app no es intensiva en la GPU, puedes estimar los tiempos de fotogramas de la GPU de la misma manera que con los dispositivos Mali en la sección anterior.
Si la app es más intensiva en la GPU y la aplicación tiene un porcentaje de uso de la GPU alto de manera constante, puedes usar los seguimientos de Vertex Instructions / Second y Fragment Instructions / Second para estimar los tiempos de fotogramas de la GPU. Si buscas patrones en los niveles de actividad de estos seguimientos, puedes obtener una estimación aproximada de dónde están los límites de un fotograma y usarla para medir la latencia de fotogramas de la GPU.
Estos otros seguimientos pueden proporcionar información similar:
- Vertices Shaded / Second
- Fragments Shaded / Second
- % Time Shading Vertices
- % Time Shading Fragments