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:
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
eflat_property
:- Os nomes das propriedades são escritos em letras maiúsculas, por exemplo,
visible_region
deLayerProto
. 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 campotop
é representado porvisible_region.rect[0].top
evisible_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 campotop
é representado porvisible_region.rect.top
em ambas as instâncias.
- Os nomes das propriedades são escritos em letras maiúsculas, por exemplo,
Para as colunas
value
eprevious_value
:- Os valores booleanos são representados por
'0'
(False
) ou'1'
(True
).
- Os valores booleanos são representados por
Visualizações SQL do SurfaceFlinger
Os dados de proto do SurfaceFlinger usam estes formatos:
Os dados da camada estão no formato
LayerProto
.Os dados raiz da hierarquia estão no formato
LayersSnapshotProto
.
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:
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:
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:
Figura 4. Linha do tempo da pesquisa.