Pesquisa de trace

Use o SQL para encontrar estados específicos nos rastros do Perfetto do Winscope. Use o visualizador global de pesquisa na interface do Winscope para executar consultas e visualizar resultados tabelas:

guia "Visualizador de pesquisa"

Figura 1. Guia "Visualizador de pesquisa".

O Visualizador de pesquisa permite escrever e executar consultas SQL personalizadas em rastros do Perfetto e acessar consultas recentes e salvas. O Winscope oferece visualizações SQL especializadas para ajudar na pesquisa de rastros de SurfaceFlinger e Transações.

Use as seguintes convenções para todas as visualizações:

  • Para as colunas property e flat_property:

    • Os nomes das propriedades são escritos em letras maiúsculas, por exemplo, visible_region de LayerProto.
    • Uma notação de ponto é usada para representar propriedades aninhadas, por exemplo, visible_region.rect.

    • Os campos repetidos em property são diferenciados com colchetes:

      Por exemplo, em duas instâncias do campo repetido visible_region.rect, o campo top é representado por visible_region.rect[0].top e visible_region.rect[1].top.

    • Os campos repetidos em flat_property não podem ser distinguidos:

      Por exemplo, em duas instâncias de campo repetido visible_region.rect, o campo top é representado por visible_region.rect.top em ambas as instâncias.

  • Para as colunas value e previous_value:

    • Os valores booleanos são representados por '0' (False) ou '1' (True).

Visualizações SQL do SurfaceFlinger

Os dados de proto do SurfaceFlinger usam estes formatos:

Para pesquisar dados de camadas, use a visualização sf_layer_search. Essa visualização inclui estas colunas:

Coluna Descrição
state_id ID exclusivo da entrada à qual a camada pertence
ts Carimbo de data/hora da entrada à qual a camada pertence
layer_id ID da camada
parent_id ID da camada do pai
layer_name Nome da camada
property O nome da propriedade contabiliza campos repetidos
flat_property O nome da propriedade não considera campos repetidos.
value Valor da propriedade em formato de string
previous_value Valor da propriedade da entrada anterior em formato de string

Para pesquisar dados raiz da hierarquia, use a visualização sf_hierarchy_root_search. Essa visualização inclui estas colunas:

Coluna Descrição
state_id ID exclusivo da entrada
ts Carimbo de data/hora da entrada
property O nome da propriedade contabiliza campos repetidos
flat_property O nome da propriedade não considera campos repetidos.
value Valor da propriedade em formato de string
previous_value Valor da propriedade da entrada anterior em formato de string

Exemplos de consultas

  • Encontre todos os frames em que a camada IME tem limites de tela válidos:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'IME%'
      AND property='screen_bounds.bottom'
      AND value<='24000'
    
  • Encontre todos os frames em que a camada Taskbar color.a (alpha) muda:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'Taskbar%'
      AND property='color.a'
      AND value!=previous_value
    
  • Encontre todos os frames em que o limite inferior de Wallpaper é menor ou igual a 2400:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name LIKE 'Wallpaper%'
      AND property='bounds.bottom'
      AND cast_int!(value) <= 2400
    
  • Liste todas as propriedades para telas com uma pilha de camadas válida:

    SELECT STATE.* FROM sf_hierarchy_root_search STATE_WITH_DISPLAY_ON
    INNER JOIN sf_hierarchy_root_search STATE
      ON STATE.state_id = STATE_WITH_DISPLAY_ON.state_id
      AND STATE_WITH_DISPLAY_ON.flat_property='displays.layer_stack'
      AND STATE_WITH_DISPLAY_ON.value!='4294967295'
      AND STATE.property LIKE CONCAT(
        SUBSTRING(
            STATE_WITH_DISPLAY_ON.property,
            0,
            instr(STATE_WITH_DISPLAY_ON.property, ']')
        ),
        '%'
      )
    

Visualização SQL de transações

Os dados proto de transações usam o formato TransactionTraceEntry.

Para pesquisar dados de transações, use a visualização transactions_search. Essa visualização inclui estas colunas:

Coluna Descrição
state_id ID exclusivo da entrada à qual a propriedade proto pertence
ts Carimbo de data/hora da entrada à qual a propriedade proto pertence
transaction_id ID da transação, se disponível
property O nome da propriedade contabiliza campos repetidos
flat_property O nome da propriedade não considera campos repetidos.
value Valor da propriedade em formato de string

Exemplos de consultas

  • Encontre o frame em que uma transação foi aplicada para mudar a posição da camada x para -54,0:

    SELECT ts, transaction_id, value FROM transactions_search
      WHERE flat_property='transactions.layer_changes.x'
      AND value='-54.0'
    
  • Encontre o frame em que a camada ImeContainer foi adicionada:

    SELECT ts FROM transactions_search
      WHERE flat_property='added_layers.name'
      AND value='ImeContainer'
    

Visualização de SQL de transições

Os dados proto de transições usam o formato ShellTransition.

Para pesquisar dados de transições, use a visualização transitions_search. Essa visualização inclui estas colunas:

Coluna Descrição
ts Tempo de envio: volta para o horário de envio, se disponível, ou 0
transition_id ID da transição
property O nome da propriedade contabiliza campos repetidos
flat_property O nome da propriedade não considera campos repetidos.
value Valor da propriedade em formato de string

Exemplos de consultas

Encontre as propriedades das transições processadas pelo DefaultMixedHandler:

  SELECT
    PROPS.ts,
    PROPS.transition_id,
    PROPS.property,
    PROPS.value
  FROM transitions_search HANDLER_MATCH
  INNER JOIN transitions_search PROPS
    ON HANDLER_MATCH.transition_id = PROPS.transition_id
  WHERE HANDLER_MATCH.property = 'handler'
    AND HANDLER_MATCH.value LIKE "%DefaultMixedHandler"
  ORDER BY PROPS.transition_id, PROPS.property

Visualizar visualização SQL

Os dados do proto ViewCapture usam o formato View.

Para pesquisar dados de ViewCapture, use a visualização viewcapture_search. Essa visualização inclui estas colunas:

Coluna Descrição
state_id ID exclusivo do estado ao qual a visualização pertence
ts Carimbo de data/hora do estado a que a visualização pertence
package_name Nome do pacote
window_name Nome da janela
class_name Mostrar o nome da turma
property O nome da propriedade contabiliza campos repetidos
flat_property O nome da propriedade não considera campos repetidos.
value Valor da propriedade em formato de string
previous_value Valor da propriedade do estado anterior em formato de string

Exemplos de consultas

Encontre todos os estados quando SearchContainerView se move na direção y:

  SELECT * FROM viewcapture_search
  WHERE class_name LIKE '%SearchContainerView'
    AND flat_property='translation_y'
    AND value!=previous_value

Tabela SQL do ProtoLog

Os dados proto do ProtoLog usam o formato ProtoLogMessage. Essa visualização inclui as seguintes colunas:

Coluna Descrição
ts Carimbo de data/hora do registro
level Nível de registro
tag Tag de grupo de registro
message Mensagem de registro
stacktrace Stacktrace (se disponível)
location Local do código de origem da mensagem

Exemplos de consultas

  • Encontre todos os registros com uma mensagem que contenha transition:

    SELECT ts, message, location FROM protolog
      WHERE message LIKE '%transition%'
    
  • Encontre todos os registros que contêm IDs de transação válidos:

    CREATE PERFETTO VIEW valid_tx_ids AS
      SELECT DISTINCT transaction_id FROM transactions_search
      WHERE transaction_id IS NOT NULL AND transaction_id != '0';
    
    SELECT TRANS.transaction_id, message FROM valid_tx_ids TRANS
    INNER JOIN protolog LOGS
      ON LOGS.message LIKE CONCAT('%', TRANS.transaction_id, '%');
    

Executar consultas

Quando você usa o painel esquerdo, a pesquisa de rastros é iniciada. Isso leva alguns segundos. Enquanto ele é iniciado, a linha do tempo não está disponível.

Depois que a pesquisa de rastro for inicializada, digite uma consulta na caixa de pesquisa e clique em Executar consulta de pesquisa ou pressione Enter no teclado para executá-la.

Quando terminar, a tabela de resultados vai aparecer no painel do meio. Sua consulta aparece abaixo da caixa de pesquisa, com um campo para salvar a consulta entre as sessões.

Para acessar as consultas salvas, clique na guia Salvos no painel à esquerda. Para acessar as consultas executadas recentemente, clique na guia Recentes:

painel esquerdo do visualizador de pesquisa

Figura 2. Painel esquerdo do visualizador de pesquisa.

Resultados

Todas as consultas retornam resultados tabulados, mostrados em uma visualização rolável com comportamento interativo semelhante aos visualizadores de rastreamento baseados em registros, como Transactions e ProtoLog:

resultados do visualizador de pesquisa

Figura 3. Pesquisar resultados do visualizador.

Se a tabela resultante tiver uma coluna ts, os valores nessa coluna serão interpretados como carimbos de data/hora e adicionados à sobreposição da linha do tempo como uma nova linha de entradas. Clique nessa linha e use as setas para a esquerda e direita para navegar entre as entradas:

linha do tempo da pesquisa

Figura 4. Linha do tempo da pesquisa.