Seguimiento de transiciones de ventanas usando Winscope

Winscope es una herramienta web que permite a los usuarios grabar, reproducir y analizar los estados de varios servicios del sistema durante y después de animaciones y transiciones. Winscope registra todos los estados de servicio del sistema pertinentes en un archivo de seguimiento. Al utilizar la interfaz de usuario de Winscope con el archivo de seguimiento, puede inspeccionar el estado de estos servicios para cada fotograma de animación, con o sin grabación de pantalla, reproduciendo, avanzando y depurando las transiciones.

Los servicios del sistema que producen seguimientos que se pueden cargar en Winscope son los siguientes:

  • SuperficieFlinger
  • Administrador de ventanas
  • wmshell
  • YO ME
  • Lanzacohetes

Ejecute el visor de seguimiento de Winscope

El rastreo de Winscope es parte de los servicios de la plataforma. Esta sección describe los pasos necesarios para descargar, compilar y ejecutar el visor de seguimiento de Winscope.

Siga estos pasos para configurar su PC para ejecutar el rastreador Winscope:

  1. Descargue la fuente de Android .
  2. Navegue a la carpeta Winscope:

    cd development/tools/winscope
    
  3. Instale dependencias usando:

    npm install
    

    Para ver una lista de comandos disponibles, ejecute: npm run

  4. Cree todos los objetivos de producción y prueba utilizando:

    npm run build:prod
    
  5. Ejecute Winscope usando:

    npm run start
    

Capturar rastros

Puede capturar rastros en el dispositivo , a través de Winscope o mediante los comandos de Android Debug Bridge (adb) .

Capturar rastros en el dispositivo.

Capture rastros en el dispositivo para recopilar datos al presentar errores por problemas de animación. Todos los seguimientos de la interfaz de usuario se registran con este método, ya que la configuración no se puede personalizar.

En su dispositivo Android:

  1. Habilitar opciones de desarrollador .
  2. Seleccione Seguimiento del sistema en Opciones de desarrollador .
  3. Habilite Recopilar seguimientos de Winscope .
  4. En Varios :
    1. Habilite Adjuntar grabaciones a informes de errores .
    2. Habilite Mostrar mosaico de configuración rápida .
  5. Navegue hasta donde necesita reproducir el error.
  6. Para iniciar la captura, abra Configuración rápida y seleccione Registrar seguimiento :

    quick_setting_winscope

    Figura 1. Menú de configuración rápida con Record Trace.

  7. Ejecute solo los pasos necesarios para reproducir el error.

  8. Para detener la captura, abra Configuración rápida y seleccione Detener seguimiento .

  9. Comparta el registro capturado usando una de las opciones enumeradas, como Gmail, Drive o BetterBug.

Capturar rastros a través de Winscope

Puede capturar seguimientos utilizando Winscope para el desarrollo local y la depuración. Winscope usa adb , que admite la conexión de dispositivos a través de USB o Wi-Fi.

En Winscope:

  1. En la pantalla Recopilar seguimientos , haga clic en Proxy ADB :

    capture_traces_winscope

    Figura 2. Captura de rastros en Winscope.

  2. Inicie el proxy Winscope ADB Connect para capturar rastros directamente desde su navegador.

  3. Ejecute el comando:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Para iniciar la captura, en la pantalla Recopilar seguimientos , seleccione los objetivos y la configuración y haga clic en Iniciar seguimiento :

    collect_traces_winscope

    Figura 3. Recopilar seguimientos en Winscope.

  5. Para detener la captura, haga clic en Finalizar seguimiento :

    end_trace_winscope

    Figura 4. Finalizar seguimiento en Winscope.

A medida que la herramienta carga los seguimientos en la interfaz de usuario de Winscope, aparecen en la pantalla los mensajes Obteniendo y analizando archivos Proto .

Generar el volcado de estado usando Winscope

Para realizar un volcado de estado usando Winscope, en la pantalla Recopilar seguimientos , seleccione la pestaña Volcado y luego haga clic en Estado de volcado :

dump-winscope

Figura 5. Estado del volcado en Winscope.

Capturar rastros a través de comandos adb

Ejecute adb root antes de ejecutar los comandos adb shell para cada uno de los siguientes seguimientos. Al final del seguimiento, los archivos de seguimiento están disponibles en /data/misc/wmtrace . Para copiar un archivo o directorio y sus subdirectorios desde un dispositivo, consulte Copiar archivos hacia y desde un dispositivo . Consulte adb para obtener más información.

Seguimientos de WindowManager

Para capturar rastros de WindowManager:

  • Habilitar seguimiento:

    adb shell wm tracing start
    
  • Desactivar seguimiento:

    adb shell wm tracing stop
    
  • Guarde los datos de registro en un archivo mientras ejecuta una captura de seguimiento:

    adb shell wm tracing save-for-bugreport
    
  • Registrar seguimiento una vez por fotograma:

    adb shell wm tracing frame
    
  • Registre cada transacción:

    adb shell wm tracing transaction
    
  • Establezca el tamaño máximo de registro (en KB):

    adb shell wm tracing size
    
  • Estado de seguimiento de impresión:

    adb shell wm tracing status
    
  • Establezca el nivel de registro en critical (solo ventanas visibles con información reducida), trim (todas las ventanas con información reducida) o all (todas las ventanas e información):

    adb shell wm tracing level
    

ProtoRegistro

Los siguientes comandos se utilizan para el sistema ProtoLog .

En el proceso system_server :

  • Iniciar ProtoLog:

    adb shell cmd window logging start
    
  • Detener ProtoLog:

    adb shell cmd window logging stop
    
  • Habilite ProtoLog para grupos de registros determinados:

    adb shell cmd window logging enable [group...]
    
  • Deshabilite ProtoLog para grupos de registros determinados:

    adb shell cmd window logging disable [group...]
    
  • Habilite el registro de Logcat para grupos de registros determinados:

    adb shell cmd window logging enable-text [group...]
    
  • Deshabilite el registro de Logcat para grupos de registros determinados:

    adb shell cmd window logging disable-text [group...]
    

En WMShell:

  • Iniciar ProtoLog:

    adb shell dumpsys activity service SystemUIService WMShell
    

Seguimiento de transición

Los siguientes comandos se utilizan para el seguimiento de transiciones:

En el proceso system_server :

  • Iniciar un seguimiento:

    adb shell cmd window shell tracing start
    
  • Detener un rastro:

    adb shell cmd window shell tracing stop
    
  • Inicie un seguimiento en WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
    
  • Detener un seguimiento en WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
    

Editor de métodos de entrada

Los siguientes comandos se utilizan para el seguimiento del Editor de métodos de entrada (IME):

  • Inicie el seguimiento de IME para clientes de método de entrada (IM), servicio de método de entrada (IMS) y servicio de administración de método de entrada (IMMS):

    adb shell ime tracing start
    
  • Comience a rastrear clientes IME, IMS e IMMS:

    adb shell ime tracing stop
    

Capas de SurfaceFlinger

El rastreo de capas de SurfaceFlinger utiliza el rastreo de Perfetto para la captura. Consulte Configuración de seguimiento para obtener información de configuración.

Vea el siguiente ejemplo de una configuración para el seguimiento de capas de SurfaceFlinger:

unique_session_name: "surfaceflinger_layers_active"
buffers: {
    size_kb: 63488
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.layers"
        surfaceflinger_layers_config: {
            mode: MODE_ACTIVE
            trace_flags: TRACE_FLAG_INPUT
            trace_flags: TRACE_FLAG_COMPOSITION
            trace_flags: TRACE_FLAG_HWC
            trace_flags: TRACE_FLAG_BUFFERS
            trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
        }
    }
}

Consulte el siguiente comando de ejemplo para generar seguimiento para capas de SurfaceFlinger:

adb shell -t perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

Transacciones de SurfaceFlinger

El seguimiento de transacciones de SurfaceFlinger utiliza el seguimiento de Perfetto para la captura. Consulte Configuración de seguimiento para obtener información de configuración.

Consulte el siguiente ejemplo de una configuración de Perfetto para el seguimiento activo de SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_active"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_ACTIVE
        }
    }
}
write_into_file: true
file_write_period_ms: 100

Consulte el siguiente ejemplo de una configuración de Perfetto para el seguimiento continuo de SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_CONTINUOUS
        }
    }
}

Consulte el siguiente comando de ejemplo para generar seguimiento para transacciones de SurfaceFlinger:

    adb shell perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

Generar volcado de estado usando adb

Winscope lee una instantánea de los estados de WindowManager y SurfaceFlinger de los informes de errores. Los informes de errores almacenan los estados como archivos proto separados dentro de la carpeta proto . Para generar los volcados de estado usando adb, ejecute los siguientes comandos.

Para el administrador de ventanas:

adb exec-out dumpsys window --proto > window_dump.winscope

Para SurfaceFlinger:

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

Analizar rastros

Para depurar estados transitorios e inválidos que causan problemas de animación, Winscope agrega diferentes archivos de seguimiento, proporciona búsqueda y visualización en cuadros y líneas de tiempo, y presenta mensajes protobuf de manera coherente. El análisis de rastros en Winscope ayuda a identificar la capa, el marco y el estado exactos en los que se produjo el error.

Utilice Winscope

Cuando haya capturado los rastros , analice los rastros en Winscope:

  1. Cargue sus rastros guardados usando el panel de la derecha. Puede eliminar seguimientos cargados o cargar más seguimientos.

    upload_traces_winscope

    Figura 6. Cargar seguimientos en Winscope.

  2. Haga clic en Ver seguimientos para visualizar los seguimientos cargados. Las pestañas para cada rastro aparecen en el panel superior de la ventana. Si el archivo cargado contiene los seguimientos relevantes, se superpone en la pantalla una vista flotante del seguimiento de grabación de pantalla.

    view_traces_winscope

    Figura 7. Ver seguimientos en Winscope.

    Utilice la interfaz de usuario en el panel superior de la ventana para cambiar el nombreeditar nombre y descarga tu rastro cargadodescargar_traza o para subir uno nuevo.

  3. Navegue a través de los rastros a lo largo del tiempo usando la herramienta de control deslizante de tiempo en el panel inferior de la ventana. Para navegación temporal adicional, utilice las siguientes funciones, como se muestra en la Figura 8:

    • Para navegar a un momento o suceso en particular, use el cursor (control deslizante de tiempo) o el botón izquierdoflecha_izquierda_hora y correctoflecha_hora_derecha flechas en el cuadro de visualización de la hora (esquina inferior izquierda), o flechas izquierda y derecha en su teclado.
    • Para mostrar los trazos codificados por colores seleccionados en la línea de tiempo, use el menú desplegable (a la izquierda del control deslizante de tiempo). De forma predeterminada, los últimos tres seguimientos vistos mediante las pestañas de seguimiento se muestran en la línea de tiempo.
    • Para obtener una vista granular de todos los seguimientos cargados, utilice el zoomzoom_in_time o alejarzoom_out_time (debajo del control deslizante de tiempo) o desplácese con el teclado. Utilice el botón de reinicio para restablecer el nivel de zoom.
    • Para obtener una vista ampliada de la distribución del seguimiento a lo largo del tiempo, haga clic en la flecha hacia arribaflecha_up_time (esquina inferior derecha).

    time_nav_winscope

    Figura 8. Navegación temporal en Winscope.

    En la vista ampliada (Figura 9), seleccione y amplíe períodos de tiempo específicos para una mejor inspección:

    expand_time_winscope

    Figura 9. Línea de tiempo ampliada en Winscope.

  4. Para examinar los rastros, puede ver el estado del dispositivo con la grabación de pantalla. Para examinar un seguimiento en particular, haga clic en la pestaña de seguimiento correspondiente en el panel superior de la herramienta.

    • Para el trazo Surface Flinger , tres paneles muestran diferentes vistas del trazo en un período de tiempo determinado, como se muestra en la Figura 10:sf_trace

      Figura 10. Trazo de Surface Flinger en Winscope.

      • Vista de capas : una vista 3D de las capas en superposiciones rectangulares. Los siguientes elementos de la interfaz de usuario ajustan los rectángulos para representar los elementos gráficos en términos de su posición, tamaño, transformación y orden z:

        • El control deslizante Rotación (arriba a la izquierda de la vista Capas) gira los rectángulos en capas para verlos en los ángulos elegidos.
        • El control deslizante Espaciado (arriba a la derecha de la vista Capas) ajusta el espacio entre las capas para crear la vista compuesta elegida.
        • Las herramientas de zoom (arriba a la derecha de la vista Capas) amplíanzoom_in_time y alejarzoom_out_time en las capas para una mejor inspección.
        • El botón de reiniciorestablecer_sf (arriba a la derecha de la vista Capas) restaura la configuración de la cámara a la vista original.
        • Arrastre los rectángulos para facilitar un mejor zoom.
      • Vista de jerarquía : una jerarquía completa de las capas.

        • Solo visible (arriba a la derecha de la vista Jerarquía), cuando se selecciona, oculta capas invisibles de la jerarquía para ayudar a visualizar los elementos en la pantalla.
        • Plano (arriba a la derecha de la vista Jerarquía), cuando se selecciona, muestra la jerarquía como una lista aplanada de capas.
        • Mostrar diferencia (arriba a la izquierda de la vista Jerarquía) se selecciona solo cuando hay una transición de estado. Cuando se selecciona, la herramienta compara el estado actual con el anterior. Un elemento nuevo se resalta en verde, un elemento eliminado se resalta en rojo y un elemento modificado se resalta en azul.
      • Vista de propiedades : Propiedades de la capa seleccionada. El panel superior de la vista Propiedades contiene información solo sobre propiedades clave, como Visibilidad , Geometría y Zona de influencia . El panel inferior de la vista Propiedades contiene un volcado de prototipos de todas las propiedades.

        • La casilla de verificación Mostrar diferencias (arriba a la izquierda de la vista Propiedades) se comporta como en la vista Jerarquía .
        • Mostrar valores predeterminados (arriba a la izquierda de la vista Propiedades), cuando se selecciona, muestra los valores de proto predeterminados en Proto Dump. De forma predeterminada, estos valores no aparecen en el volcado de prototipos. Los valores de proto predeterminados se toman de la definición del campo de proto. Si un campo proto no tiene un valor predeterminado no nulo establecido, los valores proto predeterminados que se muestran son:
          • Cadenas: nula
          • Números: 0
          • Valores booleanos: falso
          • Objetos: nulo

      La selección entre las tres vistas y la grabación de pantalla está sincronizada, es decir, todos los rastros se actualizan sincrónicamente cuando navega a un punto diferente en el tiempo. Para ver las propiedades de una capa, seleccione la capa haciendo clic en ella en la vista Jerarquía o haciendo clic en el rectángulo respectivo en la vista Propiedades. Un rectángulo morado indica que hay un seguimiento de vista adjunto a esta capa. Al hacer doble clic en una capa violeta, la interfaz de usuario navega para cambiar a la pestaña de seguimiento de vista correspondiente.

    • Para el seguimiento del Administrador de ventanas , tres paneles muestran diferentes vistas del seguimiento en un período de tiempo determinado, como se muestra en la Figura 11:

      • Vista de Windows : Una vista 3D de las capas.
      • Vista de jerarquía : una jerarquía completa de las capas.
      • La vista de propiedades contiene un volcado de prototipos de todas las propiedades.

      La selección entre las tres vistas y la grabación de pantalla está sincronizada, es decir, todos los rastros se actualizan sincrónicamente cuando navega a un punto diferente en el tiempo.

      wm_trace

      Figura 11. Seguimiento del Administrador de ventanas en Winscope.

    • Para los seguimientos de transacciones , las transacciones entre Surface Flinger y Window Manager se presentan en formato de tabla que se puede buscar por ID, tipo y texto mostrados, junto con una vista de propiedades que muestra el volcado de prototipos. La selección entre las dos vistas y la grabación de pantalla se sincroniza:

      transaction_trace

      Figura 12. Seguimiento de transacciones en Winscope.

    • Para los seguimientos de ProtoLog , la información se presenta en un formato de tabla, que se puede buscar por etiquetas, archivos fuente y texto:

      protolog_trace

      Figura 13. Seguimiento de ProtoLog en Winscope.

    • Para los seguimientos de transiciones , se muestra una lista de transiciones con ID, tipo, hora de envío, duración y estado junto con las propiedades de la transición seleccionada:

      transitions_trace

      Figura 14. Seguimiento de transiciones en Winscope.