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:
- Descargue la fuente de Android .
Navegue a la carpeta Winscope:
cd development/tools/winscope
Instale dependencias usando:
npm install
Para ver una lista de comandos disponibles, ejecute:
npm run
Cree todos los objetivos de producción y prueba utilizando:
npm run build:prod
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:
- Habilitar opciones de desarrollador .
- Seleccione Seguimiento del sistema en Opciones de desarrollador .
- Habilite Recopilar seguimientos de Winscope .
- En Varios :
- Habilite Adjuntar grabaciones a informes de errores .
- Habilite Mostrar mosaico de configuración rápida .
- Navegue hasta donde necesita reproducir el error.
Para iniciar la captura, abra Configuración rápida y seleccione Registrar seguimiento :
Figura 1. Menú de configuración rápida con Record Trace.
Ejecute solo los pasos necesarios para reproducir el error.
Para detener la captura, abra Configuración rápida y seleccione Detener seguimiento .
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:
En la pantalla Recopilar seguimientos , haga clic en Proxy ADB :
Figura 2. Captura de rastros en Winscope.
Inicie el proxy Winscope ADB Connect para capturar rastros directamente desde su navegador.
Ejecute el comando:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Para iniciar la captura, en la pantalla Recopilar seguimientos , seleccione los objetivos y la configuración y haga clic en Iniciar seguimiento :
Figura 3. Recopilar seguimientos en Winscope.
Para detener la captura, haga clic en Finalizar seguimiento :
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 :
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) oall
(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:
Cargue sus rastros guardados usando el panel de la derecha. Puede eliminar seguimientos cargados o cargar más seguimientos.
Figura 6. Cargar seguimientos en Winscope.
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.
Figura 7. Ver seguimientos en Winscope.
Utilice la interfaz de usuario en el panel superior de la ventana para cambiar el nombre y descarga tu rastro cargado o para subir uno nuevo.
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 izquierdo y correcto 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 zoom o alejar (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 arriba (esquina inferior derecha).
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:
Figura 9. Línea de tiempo ampliada en Winscope.
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:
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ían y alejar en las capas para una mejor inspección.
- El botón de reinicio (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.
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:
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:
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:
Figura 14. Seguimiento de transiciones en Winscope.