Cómo depurar bloqueos de animación

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 tu app o el sistema causan algún bloqueo. Sin embargo, existe una herramienta de generación de perfiles que puede ayudarte a identificar la posible fuente del comportamiento inadecuado.

Procesa en ChromeOS

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 la renderización de un fotograma tarda demasiado, 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 renderizar el siguiente fotograma, lo que causa aún más problemas. Esta situación es familiar para los desarrolladores de dispositivos móviles Android; cuando una app se ejecuta en ChromeOS, el contexto es aún más complicado.

Una app que se ejecuta en el escritorio no se renderiza directamente en el marco de visualización de 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 podría no ser necesario, pero suaviza 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. Puede haber un retraso desde el momento en que se renderiza un fotograma hasta el momento en que aparece en la pantalla. Según el hardware, el sistema puede usar búfer cuádruple para compensarlo. Incluso con un almacenamiento en búfer más profundo, la canalización gráfica puede fallar.

Seguimiento de gráficos ARC

ChromeOS tiene una herramienta de generación de perfiles que muestra cómo se filtran los búferes a través del sistema, cuándo se producen intercambios de memoria, qué tan ocupadas están la CPU o GPU y qué hace tu aplicación en un momento dado, como se muestra en la siguiente imagen:

Cómo configurar el generador de perfiles

Para usar el generador de perfiles, debes ejecutar M75 o una versión posterior. Para obtener mejores resultados, usa un dispositivo Intel.

Antes de usar el generador de perfiles, llena tu app con registros. Agrega Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); al código en los lugares que desees incluir un registro. Usa un Event que comience con el prefijo customTrace. El prefijo no aparece en el mensaje de seguimiento.

Para configurar el generador de perfiles, sigue estos pasos:

  1. Activa el modo de desarrollador.
  2. Activa la configuración de Chrome y habilita la herramienta de visualización de búferes gráficos de ARC.
  3. Navega a chrome://arc-graphics-tracing.

Cómo ejecutar el generador de perfiles

  1. Selecciona detener en bloqueo.
  2. Ejecuta la app para Android.
  3. Cuando la app para Android esté activa y enfocada, presiona Control + Mayúsculas + G.

Cuando se produce algún bloqueo, aparece una ventana del navegador. Usa las teclas W y S para ampliar y reducir el cronograma.