Rastrear transições de janela

WinScope fornece a infraestrutura e ferramentas para registrar e analisar os estados do WindowManager e do SurfaceFlinger durante e após as transições das janelas. O WinScope registra todos os estados de serviço do sistema pertinentes em um arquivo de rastreamento, que você pode usar para reproduzir e percorrer as transições.

Capturar rastros

Capture rastreamentos por meio de configurações rápidas ou adb em dispositivos que executam userdebug ou eng builds.

Configurações rápidas

Para capturar rastros das configurações rápidas :

  1. Ative as opções do desenvolvedor .
  2. Vá para Opções do desenvolvedor > Blocos de desenvolvedor de configurações rápidas .
  3. Ative o rastreamento do WinScope .
  4. Abra Configurações rápidas .
  5. Toque em Winscope Trace para ativar o rastreamento.
  6. Execute transições de janela no dispositivo.
  7. Depois de terminar, abra Configurações rápidas e toque em Winscope Trace para desativar o rastreamento.

Os rastreamentos são gravados em /data/misc/wmtrace/wm_trace.winscope e /data/misc/wmtrace/layers_trace.winscope . Os rastreamentos também são incluídos em relatórios de bugs.

adb

Ao capturar rastreamentos por meio adb , capture os rastreamentos WindowManager e SurfaceFlinger separadamente.

Rastreamentos do WindowManager

Para capturar rastros do WindowManager:

  1. Habilitar rastreamento:
    adb shell cmd window tracing start
  2. Desativar rastreamento:
    adb shell cmd window tracing stop
  3. Pegue o arquivo de rastreamento:
    adb pull /data/misc/wmtrace/wm_trace.winscope wm_trace.winscope

Opcionalmente, você pode alterar a configuração de log padrão de várias configurações para rastreamentos do WindowManager:

  • Defina a frequência do log (para a transação ou quadro):
    adb shell cmd window tracing [frame | transaction]
  • Configure o nível detalhado para entradas de log:
    adb shell cmd window tracing level [all | trim | critical]
  • Defina o tamanho máximo do buffer (em KB):
    adb shell cmd window tracing size size-value
  • Despeja o status do buffer, nível de log, capacidade restante e número de elementos:
    adb shell cmd window tracing status

Rastros do SurfaceFlinger

Para capturar rastreamentos do SurfaceFlinger:

  1. Habilitar rastreamento:
    adb shell su root service call SurfaceFlinger 1025 i32 1
  2. Desativar rastreamento:
    adb shell su root service call SurfaceFlinger 1025 i32 0
  3. Pegue o arquivo de rastreamento:
    adb pull /data/misc/wmtrace/layers_trace.winscope layers_trace.winscope

Opcionalmente, você pode alterar a configuração de log padrão de várias configurações para rastreamentos do SurfaceFlinger:

  • Defina o tamanho máximo do buffer (em KB):
    adb shell su root service call SurfaceFlinger 1029 i32 size-value
  • Configure o nível detalhado para entradas de log:
    adb shell su root service call SurfaceFlinger 1033 i32 flags

Transações

Para capturar transações:

  1. Habilitar rastreamento:
    adb shell su root service call SurfaceFlinger 1020 i32 1
  2. Desativar rastreamento:
    adb shell su root service call SurfaceFlinger 1020 i32 0
  3. Pegue o arquivo de rastreamento:
    adb pull /data/misc/wmtrace/transaction_trace.winscope

Mais arquivos de mesclagem de transações estão disponíveis em `/data/misc/wmtrace/` com a nomenclatura `transaction_merges_*.winscope`.

Gerar dumps de estado

WinScope lê um instantâneo dos estados WindowManager e SurfaceFlinger de relatórios de bugs. Os relatórios de erros armazenam os estados como arquivos proto separados dentro da pasta proto . Para gerar dumps de estado usando adb , execute os comandos a seguir.

Gerenciador de janelas

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

SurfaceFlinger

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

Analisar rastros

Para analisar um arquivo de rastreamento, use o aplicativo web WinScope. Crie o aplicativo a partir do código-fonte ou abra-o no diretório pré-construído.

  1. Baixe artefatos pré-construídos do repositório de origem do Android:
    curl 'https://android.googlesource.com/platform/prebuilts/misc/+/main/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
  2. Abra os artefatos baixados em um navegador da web.
  3. Após a abertura do WinScope, selecione OPEN FILE para carregar um arquivo de rastreamento.

Utilize o WinScope

Depois de abrir um arquivo de rastreamento no WinScope, você pode analisar o rastreamento de diversas maneiras.

Captura de tela do WinScope
Figura 1. Analisando um rastreamento no WinScope
  • Linha do tempo — Mostra a sequência de eventos no rastreamento. Use as teclas de seta ou clique em cada entrada para navegar pela linha do tempo.
  • Tela — Fornece uma representação visual de cada janela visível na tela. Clique em uma janela para selecionar a janela de origem na hierarquia.
  • Gravação de tela — Mostra a tela do dispositivo sincronizada com o traçado. Navega junto com a linha do tempo.
  • Hierarquia — Representa cada janela conhecida pelo sistema. Algumas janelas não contêm buffers, mas existem para definir políticas nos filhos da janela. As janelas visíveis são marcadas com o ícone V
  • Propriedades — Mostra informações de estado da entrada selecionada na hierarquia.