Seguimiento de transiciones de ventana

WinScope proporciona la infraestructura y las herramientas para registrar y analizar los estados de WindowManager y SurfaceFlinger durante y después de las transiciones de ventana. WinScope registra todos los estados de servicio del sistema pertinentes en un archivo de seguimiento, que puede usar para reproducir y recorrer las transiciones.

Captura de rastros

Capture rastros a través de Configuración rápida o adb en dispositivos que ejecutan compilaciones de usuario o eng.

Ajustes rápidos

Para capturar rastros desde Configuración rápida :

  1. Habilitar opciones de desarrollador .
  2. Vaya a Opciones de desarrollador > Mosaicos de desarrollador de configuración rápida .
  3. Habilite el seguimiento de WinScope .
  4. Abra Configuración rápida .
  5. Toque Winscope Trace para habilitar el rastreo.
  6. Ejecute transiciones de ventana en el dispositivo.
  7. Una vez que haya terminado, abra Configuración rápida y toque Winscope Trace para desactivar el rastreo.

Los seguimientos se escriben en /data/misc/wmtrace/wm_trace.winscope y /data/misc/wmtrace/layers_trace.winscope . Los rastros también se incluyen en los informes de errores.

adb

Al capturar seguimientos a través de adb , capture los seguimientos de WindowManager y SurfaceFlinger por separado.

Seguimientos de WindowManager

Para capturar seguimientos de WindowManager:

  1. Habilitar rastreo:
    adb shell cmd window tracing start
  2. Deshabilitar rastreo:
    adb shell cmd window tracing stop
  3. Tome el archivo de rastreo:
    adb pull /data/misc/wmtrace/wm_trace.winscope wm_trace.winscope

Opcionalmente, puede cambiar la configuración de registro predeterminada de varias configuraciones para los seguimientos de WindowManager:

  • Establezca la frecuencia de registro (para la transacción o marco):
    adb shell cmd window tracing [frame | transaction]
  • Configure el nivel detallado para las entradas de registro:
    adb shell cmd window tracing level [all | trim | critical]
  • Establezca el tamaño máximo del búfer (en KB):
    adb shell cmd window tracing size size-value
  • Volcar el estado del búfer, el nivel de registro, la capacidad restante y la cantidad de elementos:
    adb shell cmd window tracing status

Rastros de SurfaceFlinger

Para capturar trazos de SurfaceFlinger:

  1. Habilitar seguimiento:
    adb shell su root service call SurfaceFlinger 1025 i32 1
  2. Deshabilitar rastreo:
    adb shell su root service call SurfaceFlinger 1025 i32 0
  3. Tome el archivo de rastreo:
    adb pull /data/misc/wmtrace/layers_trace.winscope layers_trace.winscope

Opcionalmente, puede cambiar la configuración de registro predeterminada de varias configuraciones para los seguimientos de SurfaceFlinger:

  • Establezca el tamaño máximo del búfer (en KB):
    adb shell su root service call SurfaceFlinger 1029 i32 size-value
  • Configure el nivel detallado para las entradas de registro:
    adb shell su root service call SurfaceFlinger 1033 i32 flags

Actas

Para capturar transacciones:

  1. Habilitar seguimiento:
    adb shell su root service call SurfaceFlinger 1020 i32 1
  2. Deshabilitar rastreo:
    adb shell su root service call SurfaceFlinger 1020 i32 0
  3. Tome el archivo de rastreo:
    adb pull /data/misc/wmtrace/transaction_trace.winscope

Más archivos de combinación de transacciones están disponibles en `/data/misc/wmtrace/` con el nombre `transaction_merges_*.winscope`.

Generación de volcados de estado

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 mediante adb , ejecute los siguientes comandos.

Administrador de ventanas

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

Deflector de superficie

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

Análisis de rastros

Para analizar un archivo de seguimiento, use la aplicación web WinScope. Cree la aplicación desde la fuente o ábrala desde el directorio precompilado.

  1. Descargue artefactos preconstruidos del repositorio fuente de Android:
    curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
  2. Abra los artefactos descargados en un navegador web.
  3. Después de que se abra WinScope, seleccione ABRIR ARCHIVO para cargar un archivo de seguimiento.

Uso de WinScope

Después de abrir un archivo de rastreo en WinScope, puede analizar el rastreo de varias maneras.

Captura de pantalla de WinScope
Figura 1. Análisis de un seguimiento en WinScope
  • Línea de tiempo: muestra la secuencia de eventos en la traza. Utilice las teclas de flecha o haga clic en cada entrada para navegar por la línea de tiempo.
  • Pantalla : proporciona una representación visual de cada ventana visible en la pantalla. Haga clic en una ventana para seleccionar la ventana de origen en la jerarquía.
  • Grabación de pantalla : muestra la pantalla del dispositivo sincronizada con el seguimiento. Navega junto con la línea de tiempo.
  • Jerarquía : representa cada ventana conocida por el sistema. Algunas ventanas no contienen búfer, pero existen para establecer políticas en los elementos secundarios de la ventana. Las ventanas visibles están marcadas con el icono V
  • Propiedades : muestra información de estado para la entrada seleccionada en la jerarquía.