Wyszukiwanie w logach czasu

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:

karta Wyświetlacz wyszukiwania

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 propertyflat_property:

    • Nazwy usług są zapisane w alfabecie łamanym, np. visible_regionLayerProto.
    • 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 pole top jest reprezentowane przez visible_region.rect[0].topvisible_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 pole top jest reprezentowane przez visible_region.rect.top w obu przypadkach.

  • W przypadku kolumn valueprevious_value:

    • Wartości logiczne to '0' (False) lub '1' (True).

Widoki SQL usługi SurfaceFlinger

Dane proto usługi SurfaceFlinger używają tych formatów:

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:

panel po lewej stronie w wyszukiwarce

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:

Wyniki w wyszukiwarce

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:

oś czasu wyszukiwania

Rysunek 4. Oś czasu wyszukiwania.