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:
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
veflat_property
sütunları için:- Mülk adları, snake case biçimindedir. Örneğin,
visible_region
fromLayerProto
. 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
vevisible_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 devisible_region.rect.top
ile temsil edilir.
- Mülk adları, snake case biçimindedir. Örneğin,
value
veprevious_value
sütunlarında, boole değerleri0
(False
) veya1
(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 verileri
LayerProto
biçimindedir.Hiyerarşi kökü verileri
LayersSnapshotProto
biçimindedir.
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ıncolor.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çimiLAYER_CHANGED
:LayerState
biçimiDISPLAY_ADDED
:DisplayState
biçimiDISPLAY_CHANGED
:DisplayState
biçimiLAYER_DESTROYED
: Bağımsız değişken yokLAYER_HANDLE_DESTROYED
: Bağımsız değişken yokDISPLAY_REMOVED
: Bağımsız değişken yokNOOP
: 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:
Ş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:
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:
Şekil 4. Zaman çizelgesinde arama yapma