İz arama

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

arama görüntüleyici sekmesi

Şekil 1. İzleyici arama sekmesi.

Arama görüntüleyici, Perfetto izlemelerinde özel SQL sorguları yazıp çalıştırmanıza ve son ve kayıtlı sorgulara erişmenize olanak tanır. Winscope, SurfaceFlinger ve İşlemler izlemelerini aramaya 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ı küçük harflerle yazılır (ör. visible_region from LayerProto).
    • İç içe yerleştirilmiş özellikleri temsil etmek için nokta gösterimi kullanılır (ör. visible_region.rect).

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

      Örneğin, yinelenen visible_region.rect alanı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 edilemez:

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

  • value ve previous_value sütunları için:

    • Boole değerleri '0' (False) veya '1' (True) ile temsil edilir.

SurfaceFlinger SQL görünümleri

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

Katman verilerini aramak için sf_layer_search görünümünü kullanın. Bu görünüm aşağıdaki sütunları içerir:

Sütun Açıklama
state_id Katmanın ait olduğu girişin benzersiz 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ı hesaplamıyor
value Dize biçiminde mülk değeri
previous_value Önceki girişteki dize biçimindeki ö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üm şu sütunları içerir:

Sütun Açıklama
state_id Girişin benzersiz kimliği
ts Girişin zaman damgası
property Yinelenen alanları hesaba katan mülk adı
flat_property Mülk adı, yinelenen alanları hesaplamıyor
value Dize biçiminde mülk değeri
previous_value Önceki girişteki dize biçimindeki ö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ğerinin 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'ten az veya buna 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, ']')
        ),
        '%'
      )
    

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

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

İşlem verilerinde arama yapmak için transactions_search görünümünü kullanın. Bu görünüm şu sütunları içerir:

Sütun Açıklama
state_id Proto mülkünün ait olduğu girişin benzersiz kimliği
ts Proto mülkünün 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ı hesaplamıyor
value Dize biçiminde mülk değeri

Örnek sorgular

  • Katman x konumunu -54,0 olarak değiştirmek için bir işlemin uygulandığı kareyi bulun:

    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'
    

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

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

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

Sütun Açıklama
ts Gönderim süresi: Varsa gönderim süresine, yoksa 0 değerine ayarlanır.
transition_id Geçiş kimliği
property Yinelenen alanları hesaba katan mülk adı
flat_property Mülk adı, yinelenen alanları hesaplamıyor
value Dize biçiminde mülk değeri

Örnek sorgular

DefaultMixedHandler tarafından yönetilen geçişlerin özelliklerini bulun:

  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

ViewCapture SQL görünümü

ViewCapture proto verileri View biçimini kullanır.

Görüntü yakalama verilerini aramak için viewcapture_search görünümünü kullanın. Bu görünüm şu sütunları içerir:

Sütun Açıklama
state_id Görünümün ait olduğu eyaletin benzersiz kimliği
ts Görünümün ait olduğu eyaletin 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ı hesaplamıyor
value Dize biçiminde mülk değeri
previous_value Önceki durumdaki mülk değeri (dize biçiminde)

Örnek sorgular

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

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

ProtoLog SQL tablosu

ProtoLog proto verileri ProtoLogMessage biçimini kullanır. Bu görünüm şu sütunları içerir:

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 oluşturulduğu kod konumu

Örnek sorgular

  • transition içeren bir mesaj içeren tüm günlükleri bulma:

    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

Sol paneli kullandığınızda izleme araması başlar. Bu işlem birkaç saniye sürer. Zaman çizelgesi, yayın sırasında kullanılamaz.

İzleme araması başlatıldıktan sonra arama kutusuna bir sorgu yazın ve Arama Sorgusunu Çalıştır'ı tıklayın veya klavyenizde Enter tuşuna basarak sorguyu çalıştırın.

İşlem tamamlandığında, sonuçlar tablosu orta panelde gösterilir. Sorgunuz, arama kutusunun altında görünür ve oturumlar arasında sorguyu kaydedebileceğiniz bir alan bulunur.

Kayıtlı sorgulara sol paneldeki Kayıtlı sekmesini, yakın zamanda çalıştırılan sorgulara ise Son sekmesini tıklayarak erişebilirsiniz:

arama görüntüleyici sol paneli

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

Sonuçlar

Tüm sorgular, Transactions ve ProtoLog gibi günlük tabanlı izleyicilere benzer etkileşimli davranışa sahip, kaydırılabilir bir görünümde tablo halinde sonuçlar döndürür:

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

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

Elde edilen tabloda ts sütunu varsa bu sütundaki değerler zaman damgası 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ızı kullanın:

arama zaman çizelgesi

Şekil 4. Arama zaman çizelgesi.