Android incluye algunas opciones para desarrolladores en el dispositivo que te ayudan a visualizar los casos en que tu app podría experimentar dificultades a la hora de renderizar su IU; por ejemplo, si realiza una renderización mayor a la necesaria, o si ejecuta operaciones extensas de subprocesos y GPU. En esta página, se describe el método para depurar la superposición de la GPU y generar perfiles para su renderización.
Si deseas obtener más información sobre las opciones para desarrolladores integradas en el dispositivo, incluido el modo de habilitarlas, consulta Cómo configurar opciones para desarrolladores integradas en el dispositivo.
Velocidad de procesamiento de Profile GPU
La herramienta Profile GPU Rendering muestra, en forma de histograma de desplazamiento, una representación visual del tiempo que se necesita para renderizar los fotogramas de una ventana de IU en relación con una comparativa de 16.67 ms por fotograma.
En las GPU menos potentes, la tasa de relleno disponible (la velocidad a la que la GPU puede rellenar el búfer de fotogramas) puede ser bastante baja. A medida que aumenta la cantidad de píxeles requeridos para dibujar un fotograma, la GPU puede tardar más en procesar comandos nuevos, lo que hace que el resto del sistema espere hasta que la GPU pueda ordenarse.
La herramienta de generación de perfiles te ayuda a identificar los casos en que el rendimiento de la GPU se ve afectado cuando intenta dibujar píxeles o sobrecargado debido a una superposición voluminosa.
Cómo habilitar el generador de perfiles
Antes de comenzar, asegúrate de usar un dispositivo que ejecute Android 4.1 (nivel de API 16) o una versión posterior, y de habilitar las opciones para desarrolladores. Para comenzar a generar perfiles de la renderización de la GPU del dispositivo mientras usas tu app, haz lo siguiente:
- En tu dispositivo, dirígete a Configuración y presiona Opciones para desarrolladores.
- En la sección Supervisión, selecciona Representación GPU del perfil o Perfil procesamiento HWUI, según la versión de Android que se ejecute en el dispositivo.
- En el diálogo de Profile GPU Rendering, elige En pantalla como barras para superponer los gráficos en la pantalla de tu dispositivo.
- Abre la app para la que desees generar perfiles.
Cómo inspeccionar el resultado
En la imagen ampliada del gráfico de Profile GPU Rendering que se muestra en la Figura 1, puedes ver la sección de color, como se ve en Android 6.0 (nivel de API 23).
Figura 1: Gráfico ampliado de Profile GPU Rendering
A continuación, se muestran algunos aspectos que debes tener en cuenta sobre el resultado:
- Para cada aplicación visible, la herramienta muestra un gráfico.
- Cada barra vertical del eje horizontal representa un fotograma, y la altura de cada una representa la cantidad de tiempo (en milisegundos) que tardó en renderizarse.
- La línea verde horizontal representa 16.67 milisegundos. Para alcanzar los 60 fotogramas por segundo, la barra vertical de cada fotograma debe permanecer debajo de esta línea. Cada vez que la sobrepasa una barra, aumentan las posibilidades de que haya pausas en las animaciones.
- La herramienta destaca los marcos que exceden el umbral de 16.67 milisegundos haciendo más ancha y menos transparente la barra correspondiente.
- Cada barra tiene componentes de colores que corresponden a una etapa de la canalización de procesamiento. La cantidad de componentes varía según el nivel de API del dispositivo.
En la siguiente tabla, se proporcionan descripciones de cada segmento de una barra vertical en el resultado del generador de perfiles cuando se usa un dispositivo con Android 6.0 o una versión posterior.
| Componente de barra | Etapa de procesamiento | Descripción |
|---|---|---|
| Intercambio de búferes | Representa el tiempo que espera la CPU para que la GPU termine su trabajo. Si se alarga la barra, significa que el procesamiento de la app en la GPU es demasiado intensivo. | |
| Emisión de comandos | Representa el tiempo que tarda el renderizador 2D de Android en enviar comandos a OpenGL para dibujar y volver a dibujar las listas de visualización. La altura de esta barra es directamente proporcional a la suma del tiempo que tarda en ejecutarse cada lista de visualización (una mayor cantidad de listas de visualización equivale a una barra roja más larga). | |
| Sincronización y carga | Representa el tiempo necesario para subir información de mapa de bits a la GPU. Un segmento largo indica que la app tarda bastante en cargar una cantidad de gráficos considerable. | |
| Dibuja |
Representa el tiempo que se usa para registrar comandos de dibujo, como drawLine. En Compose, esta fase a veces puede incluir operaciones de diseño y medición. Si esta barra es alta, captura un registro del sistema y examínalo con Perfetto para obtener un desglose detallado.
|
|
| Medición/diseño | Representa la cantidad de tiempo dedicado a posicionar y determinar el tamaño de los componentes de la IU durante la fase de diseño, lo que incluye la ejecución de modificadores de medición y posición. Un segmento grande indica cálculos complejos dentro de estos modificadores o un árbol de diseño demasiado profundo que requiere un nuevo cálculo frecuente. | |
| Manejo de entradas y animación |
Representa la cantidad de tiempo que se tardó en evaluar las llamadas a la API de animación o en controlar la entrada del puntero y sus devoluciones de llamada. Si este segmento es grande, podría indicar que una animación personalizada o una devolución de llamada de entrada dedica demasiado tiempo al procesamiento. El cálculo del estado y la asignación de datos mientras se desplaza por un LazyColumn o LazyRow también suelen ocurrir durante este segmento y son una fuente más común de demoras en este segmento.
|
|
| Retraso de sincronización vertical/tiempo misceláneo | Representa el tiempo que tarda la app en ejecutar operaciones entre dos fotogramas consecutivos. Podría ser un indicador de que existe demasiado procesamiento en el subproceso de IU, que podría descargarse en un subproceso diferente. |
Tabla 1: Barras de componentes en Android 6.0 y versiones posteriores.
Para obtener más información sobre cómo interpretar los datos provistos por la herramienta de generación de perfiles, lee Cómo realizar análisis con Profile GPU Rendering.