İz arama

Winscope Perfetto izlerinde belirli durumları bulmak için SQL'i kullanın. Sorgu çalıştırmak ve tablosal sonuçları görselleştirmek için Winscope kullanıcı arayüzündeki genel Arama görüntüleyiciyi kullanın:

Arama görüntüleyici sekmesi

1.şekil Arama görüntüleyici sekmesi.

Arama görüntüleyici, Perfetto izlerinde özel SQL sorguları yazıp çalıştırmanıza ve son sorgulara ve kayıtlı sorgulara erişmenize olanak tanır. Winscope, SurfaceFlinger, Transactions, Transitions ve ViewCapture izlemelerinde arama yapmaya yardımcı olmak için özel SQL görünümleri sağlar.

Tüm görünümler için aşağıdaki kuralları kullanın:

  • property ve flat_property sütunları için:

    • Mülk adları, snake case biçimindedir. Örneğin, visible_region from LayerProto.
    • Nokta gösterimi, iç içe yerleştirilmiş özellikleri temsil eder. Örneğin, visible_region.rect.

    • property içindeki yinelenen alanlar köşeli parantezlerle ayırt edilir:

      Örneğin, yinelenen alan visible_region.rect'nın iki örneğinde, top alanı visible_region.rect[0].top ve visible_region.rect[1].top ile temsil edilir.

    • flat_property içindeki yinelenen alanlar ayırt edilemiyor:

      Örneğin, tekrar eden alanın iki örneğinde visible_region.rect, top alanı her iki örnekte de visible_region.rect.top ile temsil edilir.

  • value ve previous_value sütunlarında, boole değerleri 0 (False) veya 1 (True) ile gösterilir.

Winscope, izlemeye özgü tablolardaki verileri Perfetto args tablosuyla birleştirerek bu görünümleri oluşturur. Bu tabloları doğrudan sorgulayabilirsiniz. args tablosundaki key, flat_key ve display_value sütunları sırasıyla property, flat_property ve value görünüm sütunlarına benzer.

args tablosu:

Sütun Açıklama
arg_set_id Bir dizi bağımsız değişkeni ilişkilendirmek için kullanılır.
flat_key Tekrarlanan alanlar dikkate alınmadan, proto mesajındaki özellik adı
key Yinelenen alanlar dikkate alınarak proto mesajındaki mülk adı
value_type Mülk değeri türü
int_value Değer türü tam sayıysa özellik değeri
string_value Değer türü dize ise özellik değeri
real_value Değer türü gerçekse özellik değeri
display_value Dizeye dönüştürülmüş özellik değeri

SurfaceFlinger SQL görünümleri

SurfaceFlinger proto verileri şu biçimleri kullanır:

Katman verilerinde arama yapmak için sf_layer_search görünümünü kullanın. Bu görünümde şu sütunlar yer alır:

Sütun Açıklama
state_id Katmanın ait olduğu girişin satır kimliği
ts Katmanın ait olduğu girişin zaman damgası
layer_id Katman kimliği
parent_id Üst öğenin katman kimliği
layer_name Katman adı
property Yinelenen alanları hesaba katan mülk adı
flat_property Mülk adı, yinelenen alanları hesaba katmıyor
value Dize biçimindeki özellik değeri
previous_value Dize biçimindeki önceki girişteki özellik değeri

Hiyerarşi kökü verilerini aramak için sf_hierarchy_root_search görünümünü kullanın. Bu görünümde şu sütunlar yer alır:

Sütun Açıklama
state_id Girişin satır kimliği
ts Girişin zaman damgası
property Yinelenen alanları hesaba katan mülk adı
flat_property Mülk adı, yinelenen alanları hesaba katmıyor
value Dize biçimindeki özellik değeri
previous_value Dize biçimindeki önceki girişteki özellik değeri

Örnek sorgular

  • IME katmanının geçerli ekran sınırlarına sahip olduğu tüm kareleri bulun:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'IME%'
      AND property='screen_bounds.bottom'
      AND value<='24000'
    
  • Taskbar katmanının color.a (alfa) değiştiği tüm kareleri bulun:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'Taskbar%'
      AND property='color.a'
      AND value!=previous_value
    
  • Wallpaper alt sınırının 2.400'den küçük veya 2.400'e eşit olduğu tüm kareleri bulun:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name LIKE 'Wallpaper%'
      AND property='bounds.bottom'
      AND cast_int!(value) <= 2400
    
  • Geçerli bir katman yığınına sahip ekranlar için tüm özellikleri listeleyin:

    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, ']')
        ),
        '%'
      )
    
  • Geri kaydırma hareketinin göründüğü tüm kareleri bulma

    SELECT DISTINCT STATE.ts FROM sf_layer_search STATE
      WHERE STATE.layer_name LIKE 'EdgeBackGestureHandler%'
    

Veri tabloları

SurfaceFlinger görünümleri, aşağıdaki temel tablolar kullanılarak oluşturulur.

surfaceflinger_layers_snapshot:

Sütun Açıklama
id Girişin satır kimliği
ts Girişin zaman damgası
arg_set_id args tablosundaki satırları bu girişle ilişkilendirmek için kullanılan kimlik

surfaceflinger_layer:

Sütun Açıklama
id Katmanın satır kimliği
snapshot_id Katmanın ait olduğu surfaceflinger_layers_snapshot girişinin satır kimliği
arg_set_id args tablosundaki satırları bu katmanla ilişkilendirmek için kullanılan kimlik

İşlemler SQL görünümü

İşlemler proto verileri, TransactionTraceEntry biçimini kullanır.

İşlemler izleme verilerinde arama yapmak için transactions_search görünümünü kullanın. Bu görünümde şu sütunlar yer alır:

Sütun Açıklama
state_id Proto özelliğinin ait olduğu girişin satır kimliği
ts Proto özelliğinin ait olduğu girişin zaman damgası
transaction_id Varsa işlem kimliği
property Yinelenen alanları hesaba katan mülk adı
flat_property Mülk adı, yinelenen alanları hesaba katmıyor
value Dize biçimindeki özellik değeri

Örnek sorgular

  • İşlemin uygulandığı kareyi bulun.Bu karede, katman x konumunu -54,0 olarak değiştirin:

    SELECT ts, transaction_id, value FROM transactions_search
      WHERE flat_property='transactions.layer_changes.x'
      AND value='-54.0'
    
  • ImeContainer katmanının eklendiği kareyi bulun:

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

Veri tabloları

İşlemler SQL görünümü, aşağıdaki temel tablolar kullanılarak oluşturulur.

surfaceflinger_transactions:

Sütun Açıklama
id Girişin satır kimliği
ts Girişin zaman damgası
arg_set_id args tablosundaki satırları bu girişle ilişkilendirmek için kullanılan kimlik
vsync_id Bu girişteki tüm işlemlerle ilişkili VSync kimliği

android_surfaceflinger_transaction:

Sütun Açıklama
id İşlemin satır kimliği
snapshot_id İşlemin ait olduğu surfaceflinger_transactions girişinin satır kimliği
arg_set_id args tablosundaki satırları bu işlemle ilişkilendirmek için kullanılan kimlik
transaction_id Proto mesajından alınan işlem kimliği
pid İşlem PID'si, proto mesajından alınır.
uid İşlem UID'si proto mesajından alınır.
layer_id İşlemle ilişkili katmanın kimliği (varsa)
display_id İşlemle ilişkili ekranın kimliği (varsa)
flags_id android_surfaceflinger_transaction_flag ile ilişkili işaretleri almak için kullanılan kimlik
transaction_type İşlem türü

android_surfaceflinger_transaction_flag:

Sütun Açıklama
flags_id android_surfaceflinger_transaction içindeki bir satırda bulunan değere karşılık gelir.
flag Çevrilmiş işaret dizesi

Tek tek işlemler, işlem türlerine göre farklı proto mesaj biçimlerinden args tablosuna eklenir:

  • LAYER_ADDED: LayerCreationArgs biçimi
  • LAYER_CHANGED: LayerState biçimi
  • DISPLAY_ADDED: DisplayState biçimi
  • DISPLAY_CHANGED: DisplayState biçimi
  • LAYER_DESTROYED: Bağımsız değişken yok
  • LAYER_HANDLE_DESTROYED: Bağımsız değişken yok
  • DISPLAY_REMOVED: Bağımsız değişken yok
  • NOOP: Bağımsız değişken yok

Geçişler SQL görünümü

Geçişler proto verileri, ShellTransition biçimini kullanır.

Geçişler verilerini aramak için transitions_search görünümünü kullanın. Bu görünümde şu sütunlar yer alır:

Sütun Açıklama
ts Dağıtma süresi; varsa gönderme süresine, aksi takdirde 0 değerine geri döner.
transition_id Proto mesajdan alınan geçiş kimliği
property Yinelenen alanları hesaba katan mülk adı
flat_property Mülk adı, yinelenen alanları hesaba katmıyor
value İşlem UID'si proto mesajından alınır.

Örnek sorgular

DefaultMixedHandler tarafından işlenen geçişlerin özelliklerini bulma:

  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

Veri tabloları

Geçişler görünümü, aşağıdaki temel tablolar kullanılarak oluşturulur.

window_manager_shell_transitions:

Sütun Açıklama
id Geçişin satır kimliği
ts Dağıtma süresi; varsa gönderme süresine, aksi takdirde 0 değerine geri döner.
transition_id Proto mesajdan alınan geçiş kimliği
arg_set_id args tablosundaki satırları bu geçişle ilişkilendirmek için kullanılan kimlik
transition_type Geçiş türü, proto mesajından alınır.
send_time_ns Geçiş için proto mesajından alınan gönderme süresi
dispatch_time_ns Proto mesajından alınan geçiş gönderme süresi
duration_ns Başlangıç ve bitiş zamanları varsa geçiş süresi
handler Geçiş işleyicisi: window_manager_shell_transition_handlers dilinden çeviri alma
status Geçiş durumu: played, merged veya aborted
flags Proto mesajdan alınan geçiş işaretleri

window_manager_shell_transition_handlers:

Sütun Açıklama
handler_id window_manager_shell_transitions tablosunun handler sütunundaki değere karşılık gelen kimlik
handler_name Dize çevirisi

android_window_manager_shell_transition_participants:

Sütun Açıklama
transition_id Ham proto mesajdan alınan geçiş kimliği
layer_id SurfaceFlinger katmanı katılımcısının kimliği
window_id WindowManager kapsayıcı katılımcısının kimliği

ViewCapture SQL görünümü

ViewCapture proto verileri, View biçimini kullanır.

ViewCapture verilerini aramak için viewcapture_search görünümünü kullanın. Bu görünümde şu sütunlar yer alır:

Sütun Açıklama
state_id Görünümün ait olduğu eyaletin satır kimliği
ts Görünümün ait olduğu durumun zaman damgası
package_name Paket adı
window_name Pencere adı
class_name Sınıf adını görüntüleme
property Yinelenen alanları hesaba katan mülk adı
flat_property Mülk adı, yinelenen alanları hesaba katmıyor
value Dize biçimindeki özellik değeri
previous_value Dize biçiminde önceki durumdaki özellik değeri

Örnek sorgular

SearchContainerView y yönünde hareket ettiğinde tüm durumları bulma:

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

Veri tabloları

ViewCapture görünümü, aşağıdaki temel tablolar kullanılarak oluşturulur.

android_viewcapture:

Sütun Açıklama
id Girişin satır kimliği
ts Girişin zaman damgası
arg_set_id args tablosundaki satırları bu girişle ilişkilendirmek için kullanılan kimlik

android_viewcapture_view:

Sütun Açıklama
id Görünümün satır kimliği
snapshot_id Görünümün ait olduğu android_viewcapture girişinin satır kimliği
arg_set_id args tablosundaki satırları bu görünümle ilişkilendirmek için kullanılan kimlik

ProtoLog SQL tablosu

ProtoLog proto verileri, ProtoLogMessage biçimini kullanır. Bu görünümde şu sütunlar yer alır:

Sütun Açıklama
ts Günlüğün zaman damgası
level Günlük kaydı düzeyi
tag Günlük kaydı grubu etiketi
message Günlük mesajı
stacktrace Yığın izleme (varsa)
location Mesajın kaynağı olan kod konumu

Örnek sorgular

  • transition içeren bir mesajın bulunduğu tüm günlükleri bulun:

    SELECT ts, message, location FROM protolog
      WHERE message LIKE '%transition%'
    
  • Geçerli işlem kimlikleri içeren tüm günlükleri bulun:

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

Sorgu çalıştırma

Arama görüntüleyicinin solundaki GLOBAL SEARCH (Genel Arama) panelini kullanarak arama sorguları çalıştırabilirsiniz.

GLOBAL SEARCH (Genel Arama) paneliyle ilk kez etkileşimde bulunduğunuzda iz arama başlatılır ve Winscope, yardımcı SQL görünümlerini oluşturur. Bu işlem birkaç saniye sürer. İz arama başlatılırken zaman çizelgesi kullanılamaz.

Sorgu başlatmak için arama kutusuna bir sorgu yazın ve Arama Sorgusunu Çalıştır'ı tıklayın veya klavyenizde Enter tuşuna basın.

İşlem tamamlandığında sonuç tablosu orta panelde gösterilir. Sorgunuz, arama kutusunun altında görünür. Sorguyu oturumlar arasında kaydetmek için bir alan da gösterilir.

Sol paneldeki Kaydedilenler sekmesini tıklayarak kaydedilen sorgulara, Son sekmesini tıklayarak da yakın zamanda çalıştırılan sorgulara erişebilirsiniz:

Arama görüntüleyicinin sol paneli

Şekil 2. Arama görüntüleyicinin sol paneli.

Sonuçlar

Tüm sorgular, aşağıdaki gibi günlük tabanlı izleme görüntüleyicilere benzer etkileşimli davranışlarla kaydırılabilir bir görünümde gösterilen, tablolandırılmış sonuçlar döndürür:

arama görüntüleyici sonuçları

3.Şekil Arama görüntüleyici sonuçları.

Elde edilen tabloda ts sütunu varsa bu sütundaki değerler zaman damgaları olarak yorumlanır ve zaman çizelgesi yer paylaşımına yeni bir giriş satırı olarak eklenir. Bu satırı tıklayın ve girişler arasında gezinmek için sol ve sağ ok tuşlarını kullanın:

arama zaman çizelgesi

Şekil 4. Zaman çizelgesinde arama yapma