Transições da janela de rastreamento

O WinScope fornece a infraestrutura e as ferramentas para registrar e analisar os estados do WindowManager e do SurfaceFlinger durante e após as transições de janela. 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.

Capturando rastros

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

Configurações rápidas

Para capturar rastreamentos de Configurações rápidas :

  1. Ative as opções do desenvolvedor .
  2. Vá para Opções do desenvolvedor > Blocos do desenvolvedor de configurações rápidas .
  3. Ative o rastreamento do WinScope .
  4. Abra Configurações rápidas .
  5. Toque em Winscope Trace para habilitar o rastreamento.
  6. Execute transições de janela no dispositivo.
  7. Depois de terminar, abra as 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 nos relatórios de bugs.

adb

Ao capturar traços por meio de adb , capture os traços do WindowManager e do SurfaceFlinger separadamente.

Traços do WindowManager

Para capturar rastreamentos do WindowManager:

  1. Ativar rastreamento:
    adb shell cmd window tracing start
  2. Desabilitar 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 de 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
  • Despeje o status do buffer, nível de log, capacidade restante e número de elementos:
    adb shell cmd window tracing status

Traços do SurfaceFlinger

Para capturar traços do SurfaceFlinger:

  1. Ativar rastreamento:
    adb shell su root service call SurfaceFlinger 1025 i32 1
  2. Desabilitar 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. Ativar rastreamento:
    adb shell su root service call SurfaceFlinger 1020 i32 1
  2. Desabilitar 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 o nome `transaction_merges_*.winscope`.

Gerando dumps de estado

O WinScope lê um instantâneo dos estados WindowManager e SurfaceFlinger dos relatórios de bugs. Os relatórios de bug armazenam os estados como arquivos proto separados dentro da pasta proto . Para gerar os 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

Analisando traços

Para analisar um arquivo de rastreamento, use o aplicativo Web WinScope. Compile o aplicativo a partir da fonte ou abra-o no diretório pré-compilado.

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

Usando o WinScope

Depois de abrir um arquivo de rastreamento no WinScope, você pode analisar o rastreamento de várias 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 rastreamento. 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 para a entrada selecionada na hierarquia.