Uno de los problemas más difíciles que enfrentan los desarrolladores de apps es garantizar una animación fluida, sin problemas y sin interrupciones. Esto resulta especialmente difícil de depurar cuando el sistema también realiza tareas en segundo plano de uso intensivo de recursos. No hay una manera fácil de determinar si es tu app o el sistema lo que causa algún bloqueo. Sin embargo, existe una herramienta generadora de perfiles que puede ayudarte a identificar la posible fuente del mal comportamiento.
Procesamiento en el Sistema operativo Chrome
Una app refinada, como un juego, generalmente usa doble almacenamiento en búfer para mantener el tiempo de respuesta del usuario lo más bajo posible. Sin embargo, el rendimiento podría disminuir por varios motivos. Por ejemplo, si se tarda demasiado en procesar un fotograma, el resultado procesado no está listo para el próximo intercambio de búfer y, en consecuencia, se repite el fotograma anterior. Entonces, el procesador no puede comenzar a procesar el siguiente fotograma, lo que causa aún más problemas. Esta situación es familiar para los desarrolladores "puros" de Android. Cuando una app se ejecuta en el Sistema operativo Chrome, el contexto es aún más complicado.
Una app que se ejecuta en el escritorio no se procesa directamente en el fotograma que se ve en la pantalla, sino que convierte sus datos en una textura. Por lo general, hay muchas apps que procesan sus gráficos en una textura. El sistema construye la vista en la pantalla con un compositor para combinar todas las texturas en una sola imagen de escritorio.
El compositor trabaja de forma transparente en segundo plano. Sin embargo, presenta un retraso de un fotograma para maximizar el uso de la canalización de GPU. En un mundo ideal, esto no sería necesario, pero atenúa las fluctuaciones de rendimiento del sistema y ayuda a equilibrar una carga asimétrica.
Cuando el SO trabaja de manera intensiva, la GPU podría sufrir una sobrecarga, y podría producirse una demora adicional desde el momento en que se procesa un fotograma hasta que este aparece en la pantalla. El sistema puede usar un búfer cuádruple para compensarlo (depende del hardware), pero, incluso con un almacenamiento en búfer más profundo, la canalización gráfica aún podría fallar.
Seguimiento de gráficos ARC
El Sistema operativo Chrome tiene una herramienta generadora de perfiles que muestra cómo se filtran los búferes a través del sistema, cuándo ocurren intercambios de memoria, qué tan ocupadas están la CPU o GPU y qué hace la app en un momento determinado:
Configuración del generador de perfiles
Para usar el generador de perfiles, debes ejecutar el Sistema operativo Chrome M75 (o una versión posterior). Para obtener mejores resultados, te recomendamos utilizar un dispositivo Intel.
Antes de usar el generador de perfiles, deberías colocar registros en tu app.
Agrega Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>);
al código en los lugares que desees incluir un registro. El Event
que uses debe comenzar con el prefijo customTrace.
. El prefijo no aparecerá en el mensaje del registro.
Para configurar el generador de perfiles, sigue estos pasos:
- Activa el modo de desarrollador.
- Activa la configuración de Chrome y habilita la herramienta de visualización de búferes gráficos de ARC.
- Navega a
chrome://arc-graphics-tracing
.
Ejecución del generador de perfiles
- Marca la detención en bloqueos.
- Ejecuta la app para Android.
- Cuando la app para Android esté activa y enfocada, presiona
Ctrl+Shift+G
.
Cuando se produzca un bloqueo, aparecerá la ventana del navegador.
Usa las teclas w
y s
para hacer zoom y contraer el cronograma.