Penelusuran trace

Gunakan SQL untuk menemukan status tertentu dalam rekaman aktivitas Perfetto Winscope. Gunakan penampil Penelusuran global di UI Winscope untuk menjalankan kueri dan memvisualisasikan hasil tabel:

tab penampil penelusuran

Gambar 1. Tab Penelusuran penonton.

Penampil Penelusuran memungkinkan Anda menulis dan menjalankan kueri SQL kustom pada rekaman aktivitas Perfetto, serta mengakses kueri terbaru dan tersimpan. Winscope menyediakan tampilan SQL khusus untuk membantu menelusuri rekaman aktivitas SurfaceFlinger dan Transaksi.

Gunakan konvensi berikut untuk semua tampilan:

  • Untuk kolom property dan flat_property:

    • Nama properti menggunakan snake case, misalnya visible_region dari LayerProto.
    • Notasi titik digunakan untuk mewakili properti bertingkat, misalnya, visible_region.rect.

    • Kolom berulang di property dibedakan dengan tanda kurung siku:

      Misalnya, dalam dua instance kolom berulang visible_region.rect, kolom top direpresentasikan oleh visible_region.rect[0].top dan visible_region.rect[1].top.

    • Kolom berulang di flat_property tidak dapat dibedakan:

      Misalnya, dalam dua instance kolom berulang visible_region.rect, kolom top direpresentasikan oleh visible_region.rect.top di kedua instance.

  • Untuk kolom value dan previous_value:

    • Nilai boolean direpresentasikan oleh '0' (False) atau '1' (True).

Tampilan SQL SurfaceFlinger

Data proto SurfaceFlinger menggunakan format berikut:

Untuk menelusuri data lapisan, gunakan tampilan sf_layer_search. Tampilan ini mencakup kolom berikut:

Kolom Deskripsi
state_id ID unik entri yang menjadi bagian dari lapisan
ts Stempel waktu entri tempat lapisan berada
layer_id ID lapisan
parent_id ID lapisan induk
layer_name Nama lapisan
property Nama properti yang memperhitungkan kolom berulang
flat_property Nama properti tidak memperhitungkan kolom berulang
value Nilai properti dalam format string
previous_value Nilai properti dari entri sebelumnya dalam format string

Untuk menelusuri data root hierarki, gunakan tampilan sf_hierarchy_root_search. Tampilan ini menyertakan kolom berikut:

Kolom Deskripsi
state_id ID unik entri
ts Stempel waktu entri
property Nama properti yang memperhitungkan kolom berulang
flat_property Nama properti tidak memperhitungkan kolom berulang
value Nilai properti dalam format string
previous_value Nilai properti dari entri sebelumnya dalam format string

Contoh kueri

  • Temukan semua frame tempat lapisan IME memiliki batas layar yang valid:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'IME%'
      AND property='screen_bounds.bottom'
      AND value<='24000'
    
  • Temukan semua frame tempat lapisan Taskbar color.a (alpha) berubah:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'Taskbar%'
      AND property='color.a'
      AND value!=previous_value
    
  • Temukan semua frame dengan batas bawah Wallpaper kurang dari atau sama dengan 2400:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name LIKE 'Wallpaper%'
      AND property='bounds.bottom'
      AND cast_int!(value) <= 2400
    
  • Cantumkan semua properti untuk layar dengan stack lapisan yang valid:

    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, ']')
        ),
        '%'
      )
    

Tampilan SQL transaksi

Data proto transaksi menggunakan format TransactionTraceEntry.

Untuk menelusuri data transaksi, gunakan tampilan transactions_search. Tampilan ini menyertakan kolom berikut:

Kolom Deskripsi
state_id ID unik entri yang menjadi milik properti proto
ts Stempel waktu entri yang menjadi milik properti proto
transaction_id ID Transaksi jika tersedia
property Nama properti yang memperhitungkan kolom berulang
flat_property Nama properti tidak memperhitungkan kolom berulang
value Nilai properti dalam format string

Contoh kueri

  • Temukan frame tempat transaksi diterapkan untuk mengubah posisi x lapisan menjadi -54.0:

    SELECT ts, transaction_id, value FROM transactions_search
      WHERE flat_property='transactions.layer_changes.x'
      AND value='-54.0'
    
  • Temukan frame tempat lapisan ImeContainer ditambahkan:

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

Tampilan SQL transisi

Data proto transisi menggunakan format ShellTransition.

Untuk menelusuri data transisi, gunakan tampilan transitions_search. Tampilan ini menyertakan kolom berikut:

Kolom Deskripsi
ts Waktu pengiriman - kembali ke waktu pengiriman jika tersedia, jika tidak 0
transition_id ID transisi
property Nama properti yang memperhitungkan kolom berulang
flat_property Nama properti tidak memperhitungkan kolom berulang
value Nilai properti dalam format string

Contoh kueri

Temukan properti transisi yang ditangani oleh 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

Tampilan SQL ViewCapture

Data proto ViewCapture menggunakan format View.

Untuk menelusuri data ViewCapture, gunakan tampilan viewcapture_search. Tampilan ini menyertakan kolom berikut:

Kolom Deskripsi
state_id ID unik status yang menjadi bagian dari tampilan
ts Stempel waktu status yang dimiliki tampilan
package_name Nama paket
window_name Nama jendela
class_name Melihat nama kelas
property Nama properti yang memperhitungkan kolom berulang
flat_property Nama properti tidak memperhitungkan kolom berulang
value Nilai properti dalam format string
previous_value Nilai properti dari status sebelumnya dalam format string

Contoh kueri

Temukan semua status saat SearchContainerView dipindahkan ke arah y:

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

Tabel SQL ProtoLog

Data proto ProtoLog menggunakan format ProtoLogMessage. Tampilan ini mencakup kolom berikut:

Kolom Deskripsi
ts Stempel waktu log
level Level log
tag Mencatat tag grup
message Pesan log
stacktrace Stacktrace (jika tersedia)
location Lokasi kode tempat pesan berasal

Contoh kueri

  • Temukan semua log dengan pesan yang berisi transition:

    SELECT ts, message, location FROM protolog
      WHERE message LIKE '%transition%'
    
  • Temukan semua log yang berisi ID transaksi yang valid:

    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, '%');
    

Menjalankan kueri

Saat Anda menggunakan panel kiri, penelusuran rekaman aktivitas akan dimulai. Proses ini memerlukan waktu beberapa detik. Saat dimulai, linimasa tidak tersedia.

Setelah penelusuran rekaman aktivitas diinisialisasi, tulis kueri di kotak penelusuran, lalu klik Jalankan Kueri Penelusuran atau tekan Enter pada keyboard untuk menjalankannya.

Setelah selesai, tabel hasil akan ditampilkan di panel tengah. Kueri Anda akan muncul di bawah kotak penelusuran, dengan kolom untuk menyimpan kueri di antara sesi.

Anda dapat mengakses kueri tersimpan dengan mengklik tab Tersimpan di panel kiri, dan mengakses kueri yang baru saja dijalankan dengan mengklik tab Terbaru:

panel kiri penampil penelusuran

Gambar 2. Panel kiri penampil penelusuran.

Hasil

Semua kueri menampilkan hasil dalam tabel, yang ditampilkan dalam tampilan yang dapat di-scroll dengan perilaku interaktif yang mirip dengan penampil rekaman aktivitas berbasis log, seperti Transaksi dan ProtoLog:

hasil penampil penelusuran

Gambar 3. Hasil penampil penelusuran.

Jika tabel yang dihasilkan berisi kolom ts, nilai dalam kolom tersebut akan ditafsirkan sebagai stempel waktu dan ditambahkan ke overlay linimasa sebagai baris entri baru. Klik baris ini dan gunakan tombol panah kiri dan kanan untuk beralih antar-entri:

linimasa penelusuran

Gambar 4. Linimasa penelusuran.