Używanie SQL do znajdowania określonych stanów w śladach Winscope Perfetto. Użyj globalnego widoku wyszukiwania w interfejsie Winscope, aby wykonywać zapytania i wizualizować wyniki w postaci tabeli:
Rysunek 1. Karta Widok wyszukiwania.
Wyszukiwarka umożliwia tworzenie i wykonywanie niestandardowych zapytań SQL na podstawie dzienników Perfeto oraz uzyskiwanie dostępu do niedawnych i zapisanych zapytań. Winscope udostępnia widoki SQL, które ułatwiają wyszukiwanie w ścieżkach SurfaceFlinger i Transactions.
W przypadku wszystkich widoków stosuj te konwencje:
W przypadku kolumn
property
iflat_property
:- Nazwy usług są zapisane w alfabecie łamanym, np.
visible_region
zLayerProto
. Właściwości zagnieżdżone, np.
visible_region.rect
, są reprezentowane za pomocą kropki.Powtórzone pola w sekcji
property
są wyróżnione nawiasami kwadratowymi:Na przykład w 2 przypadkach pola powtarzanego
visible_region.rect
poletop
jest reprezentowane przezvisible_region.rect[0].top
ivisible_region.rect[1].top
.Powtórzone pola w
flat_property
są nie do odróżnienia:Na przykład w 2 przypadkach powtarzalnego pola
visible_region.rect
poletop
jest reprezentowane przezvisible_region.rect.top
w obu przypadkach.
- Nazwy usług są zapisane w alfabecie łamanym, np.
W przypadku kolumn
value
iprevious_value
:- Wartości logiczne to
'0'
(False
) lub'1'
(True
).
- Wartości logiczne to
Widoki SQL usługi SurfaceFlinger
Dane proto usługi SurfaceFlinger używają tych formatów:
Dane warstwy są w formacie
LayerProto
.Dane wierzchołka hierarchii są w formacie
LayersSnapshotProto
.
Aby wyszukiwać dane warstwy, użyj widoku sf_layer_search
. Ten widok zawiera te kolumny:
Kolumna | Opis |
---|---|
state_id |
Unikalny identyfikator wpisu, do którego należy warstwa |
ts |
Sygnatura czasowa wpisu, do którego należy warstwa |
layer_id |
Identyfikator warstwy |
parent_id |
Identyfikator warstwy nadrzędnej |
layer_name |
Nazwa warstwy |
property |
Nazwa usługi uwzględniająca pola powtarzane |
flat_property |
Nazwa usługi nie uwzględnia powtarzających się pól |
value |
Wartość właściwości w formacie ciągu znaków |
previous_value |
Wartość właściwości z poprzedniego wpisu w formacie ciągu znaków. |
Aby wyszukiwać dane wierzchołka hierarchii, użyj widoku sf_hierarchy_root_search
. Ten widok zawiera te kolumny:
Kolumna | Opis |
---|---|
state_id |
Unikalny identyfikator wpisu |
ts |
Sygnatura czasowa wpisu |
property |
Nazwa usługi uwzględniająca pola powtarzalne |
flat_property |
Nazwa usługi nie uwzględnia powtarzających się pól |
value |
Wartość właściwości w formacie ciągu znaków |
previous_value |
Wartość właściwości z poprzedniego wpisu w formacie ciągu znaków. |
Przykładowe zapytania
Znajdź wszystkie klatki, na których warstwa
IME
ma prawidłowe granice ekranu:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'IME%' AND property='screen_bounds.bottom' AND value<='24000'
Znajdź wszystkie klatki, w których warstwa
Taskbar
color.a
(alfa) ulega zmianie:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'Taskbar%' AND property='color.a' AND value!=previous_value
Znajdź wszystkie klatki, w których dolna granica
Wallpaper
jest mniejsza lub równa 2400:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name LIKE 'Wallpaper%' AND property='bounds.bottom' AND cast_int!(value) <= 2400
Wyświetla wszystkie właściwości dla wyświetlaczy z prawidłowym zestawem warstw:
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, ']') ), '%' )
Widok transakcji w kodzie SQL
Dane proto transakcji są w formacie TransactionTraceEntry
.
Aby wyszukiwać dane transakcji, użyj widoku transactions_search
. Ten widok zawiera te kolumny:
Kolumna | Opis |
---|---|
state_id |
Unikalny identyfikator wpisu, do którego należy właściwość proto |
ts |
Sygnatura czasowa wpisu, do którego należy właściwość proto |
transaction_id |
Identyfikator transakcji (jeśli jest dostępny) |
property |
Nazwa usługi uwzględniająca pola powtarzane |
flat_property |
Nazwa usługi nie uwzględnia powtarzających się pól |
value |
Wartość właściwości w formacie ciągu znaków |
Przykładowe zapytania
Znajdź ramkę, w której zastosowano transakcję, aby zmienić pozycję warstwy X na -54,0:
SELECT ts, transaction_id, value FROM transactions_search WHERE flat_property='transactions.layer_changes.x' AND value='-54.0'
Znajdź kadr, w którym dodano warstwę
ImeContainer
:SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
Widok SQL przejścia
Dane proto przejścia są w formacie ShellTransition
.
Aby wyszukiwać dane o przechodzeniu między stronami, użyj widoku transitions_search
. Ten widok zawiera te kolumny:
Kolumna | Opis |
---|---|
ts |
Czas wysyłki – przyjmuje wartość czasu wysyłki, jeśli jest dostępny, w przeciwnym razie 0 . |
transition_id |
Identyfikator przejścia |
property |
Nazwa usługi uwzględniająca pola powtarzane |
flat_property |
Nazwa usługi nie uwzględnia powtarzających się pól |
value |
Wartość właściwości w formacie ciągu znaków |
Przykładowe zapytania
Znajdź właściwości przejść obsługiwane przez 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
Widok „Zapisywanie” w sekcji SQL
Dane proto ViewCapture są w formacie View
.
Aby wyszukiwać dane z usługi ViewCapture, użyj widoku viewcapture_search
. Ten widok zawiera te kolumny:
Kolumna | Opis |
---|---|
state_id |
Unikalny identyfikator stanu, do którego należy widok |
ts |
Sygnatura czasowa stanu, do którego należy widok |
package_name |
Nazwa pakietu |
window_name |
Nazwa okna |
class_name |
Wyświetlanie nazwy zajęć |
property |
Nazwa usługi uwzględniająca pola powtarzane |
flat_property |
Nazwa usługi nie uwzględnia powtarzających się pól |
value |
Wartość właściwości w formacie ciągu znaków |
previous_value |
Wartość właściwości z poprzedniego stanu w formacie ciągu znaków |
Przykładowe zapytania
Znajdź wszystkie stany, gdy SearchContainerView
przesunie się w kierunku osi y:
SELECT * FROM viewcapture_search
WHERE class_name LIKE '%SearchContainerView'
AND flat_property='translation_y'
AND value!=previous_value
Tabela ProtoLog SQL
Dane proto w ProtoLog są w formacie ProtoLogMessage
. Ten widok zawiera te kolumny:
Kolumna | Opis |
---|---|
ts |
Sygnatura czasowa dziennika |
level |
Poziom rejestrowania |
tag |
Tag grupy logowania |
message |
Komunikat logu |
stacktrace |
Zrzut stosu (jeśli jest dostępny) |
location |
Miejsce pochodzenia kodu |
Przykładowe zapytania
Znajdź wszystkie dzienniki z komunikatem zawierającym
transition
:SELECT ts, message, location FROM protolog WHERE message LIKE '%transition%'
Znajdź wszystkie dzienniki zawierające prawidłowe identyfikatory transakcji:
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, '%');
Uruchamianie zapytań
Gdy korzystasz z panelu po lewej stronie, rozpoczyna się wyszukiwanie z wykorzystaniem śledzenia. To zajmie kilka sekund. Podczas uruchamiania oś czasu jest niedostępna.
Po zainicjowaniu wyszukiwania ścieżki wpisz zapytanie w polu wyszukiwania i kliknij Uruchom zapytanie wyszukiwania lub naciśnij Enter na klawiaturze.
Po zakończeniu procesu w panelu środkowym pojawi się tabela wyników. Zapytanie pojawi się pod polem wyszukiwania wraz z polem do zapisywania zapytań między sesjami.
Zapisane zapytania możesz wyświetlić, klikając w panelu po lewej stronie kartę Zapisane, a ostatnio uruchomione – klikając kartę Ostatnie:
Rysunek 2. W panelu po lewej stronie przeglądarki wyszukiwania.
Wyniki
Wszystkie zapytania zwracają wyniki w postaci tabeli wyświetlanej w widoku przewijanym z funkcjami interaktywnymi podobnymi do tych dostępnych w programach do wyświetlania dzienników, takich jak Transaction i ProtoLog:
Rysunek 3. Wyniki w przeglądarce wyszukiwania.
Jeśli tabela wynikowa zawiera kolumnę ts
, wartości w tej kolumnie są interpretowane jako sygnatury czasowe i dodawane do nakładki osi czasu jako nowy wiersz wpisów. Kliknij ten wiersz i za pomocą klawiszy strzałek w lewo i w prawo przechodź między wpisami:
Rysunek 4. Oś czasu wyszukiwania.