ใช้ SQL เพื่อค้นหาสถานะที่เฉพาะเจาะจงในการติดตามของ Winscope Perfetto ใช้เครื่องมือดูการค้นหาทั่วโลกใน UI ของ Winscope เพื่อเรียกใช้การค้นหาและแสดงผลลัพธ์เป็นตาราง
รูปที่ 1 แท็บผู้ชมการค้นหา
เครื่องมือดูการค้นหาช่วยให้คุณเขียนและเรียกใช้การค้นหา SQL ที่กําหนดเองในร่องรอย Perfetto และเข้าถึงการค้นหาล่าสุดและที่บันทึกไว้ Winscope มีมุมมอง SQL เฉพาะทางเพื่อช่วยในการค้นหาร่องรอยของ SurfaceFlinger และธุรกรรม
ใช้รูปแบบต่อไปนี้สำหรับมุมมองทั้งหมด
สำหรับคอลัมน์
property
และflat_property
- ชื่อพร็อพเพอร์ตี้อยู่ในรูปแบบ Snake Case เช่น
visible_region
fromLayerProto
รูปแบบจุดใช้เพื่อแสดงพร็อพเพอร์ตี้ที่ฝังอยู่ เช่น
visible_region.rect
ฟิลด์ที่ซ้ำใน
property
จะแยกความแตกต่างด้วยวงเล็บเหลี่ยม ดังนี้ตัวอย่างเช่น ภายในอินสแตนซ์ 2 รายการของช่องที่ซ้ำกัน
visible_region.rect
ช่องtop
จะแสดงด้วยvisible_region.rect[0].top
และvisible_region.rect[1].top
ฟิลด์ที่ซ้ำใน
flat_property
จะแยกไม่ออก ดังนี้ตัวอย่างเช่น ภายในอินสแตนซ์ 2 รายการของช่องที่ซ้ำกัน
visible_region.rect
ช่องtop
จะแสดงโดยvisible_region.rect.top
ในทั้ง 2 อินสแตนซ์
- ชื่อพร็อพเพอร์ตี้อยู่ในรูปแบบ Snake Case เช่น
สำหรับคอลัมน์
value
และprevious_value
- ค่าบูลีนแสดงด้วย
'0'
(False
) หรือ'1'
(True
)
- ค่าบูลีนแสดงด้วย
มุมมอง SQL ของ SurfaceFlinger
ข้อมูลโปรโตคอลของ SurfaceFlinger ใช้รูปแบบต่อไปนี้
ข้อมูลเลเยอร์อยู่ในรูปแบบ
LayerProto
ข้อมูลรูทลําดับชั้นอยู่ในรูปแบบ
LayersSnapshotProto
หากต้องการค้นหาข้อมูลเลเยอร์ ให้ใช้มุมมอง sf_layer_search
มุมมองนี้มีคอลัมน์ต่อไปนี้
คอลัมน์ | คำอธิบาย |
---|---|
state_id |
รหัสที่ไม่ซ้ำกันของรายการที่เป็นของเลเยอร์ |
ts |
การประทับเวลาของรายการที่เป็นของเลเยอร์ |
layer_id |
รหัสเลเยอร์ |
parent_id |
รหัสเลเยอร์ของรายการหลัก |
layer_name |
ชื่อเลเยอร์ |
property |
ชื่อพร็อพเพอร์ตี้ที่พิจารณาช่องที่ซ้ำกัน |
flat_property |
ชื่อพร็อพเพอร์ตี้ไม่คำนึงถึงฟิลด์ที่ซ้ำกัน |
value |
ค่าพร็อพเพอร์ตี้ในรูปแบบสตริง |
previous_value |
ค่าพร็อพเพอร์ตี้จากรายการก่อนหน้าในรูปแบบสตริง |
หากต้องการค้นหาข้อมูลรูทของลําดับชั้น ให้ใช้มุมมอง sf_hierarchy_root_search
มุมมองนี้ประกอบด้วยคอลัมน์ต่อไปนี้
คอลัมน์ | คำอธิบาย |
---|---|
state_id |
รหัสที่ไม่ซ้ำกันของรายการ |
ts |
การประทับเวลาของรายการ |
property |
ชื่อพร็อพเพอร์ตี้ที่พิจารณาช่องที่ซ้ำกัน |
flat_property |
ชื่อพร็อพเพอร์ตี้ไม่คำนึงถึงฟิลด์ที่ซ้ำกัน |
value |
ค่าพร็อพเพอร์ตี้ในรูปแบบสตริง |
previous_value |
ค่าพร็อพเพอร์ตี้จากรายการก่อนหน้าในรูปแบบสตริง |
ตัวอย่างคำค้นหา
ค้นหาเฟรมทั้งหมดที่เลเยอร์
IME
มีขอบเขตหน้าจอที่ถูกต้องSELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'IME%' AND property='screen_bounds.bottom' AND value<='24000'
ค้นหาเฟรมทั้งหมดที่เลเยอร์
Taskbar
color.a
(อัลฟ่า) เปลี่ยนแปลงSELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'Taskbar%' AND property='color.a' AND value!=previous_value
ค้นหาเฟรมทั้งหมดที่ขอบล่างของ
Wallpaper
มีค่าน้อยกว่าหรือเท่ากับ 2400SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name LIKE 'Wallpaper%' AND property='bounds.bottom' AND cast_int!(value) <= 2400
แสดงรายการพร็อพเพอร์ตี้ทั้งหมดสำหรับจอแสดงผลที่มีกองเลเยอร์ที่ถูกต้อง
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, ']') ), '%' )
มุมมอง SQL ของธุรกรรม
ข้อมูลโปรโตคอลธุรกรรมใช้รูปแบบ TransactionTraceEntry
หากต้องการค้นหาข้อมูลธุรกรรม ให้ใช้มุมมอง transactions_search
มุมมองนี้จะมีคอลัมน์ต่อไปนี้
คอลัมน์ | คำอธิบาย |
---|---|
state_id |
รหัสที่ไม่ซ้ำกันของรายการที่เป็นของพร็อพเพอร์ตี้ proto |
ts |
การประทับเวลาของรายการที่เป็นของพร็อพเพอร์ตี้ proto |
transaction_id |
รหัสธุรกรรม (หากมี) |
property |
ชื่อพร็อพเพอร์ตี้ที่พิจารณาช่องที่ซ้ำกัน |
flat_property |
ชื่อพร็อพเพอร์ตี้ไม่คำนึงถึงฟิลด์ที่ซ้ำกัน |
value |
ค่าพร็อพเพอร์ตี้ในรูปแบบสตริง |
ตัวอย่างคำค้นหา
ค้นหาเฟรมที่มีการใช้ธุรกรรมเพื่อเปลี่ยนตำแหน่ง x ของเลเยอร์เป็น -54.0
SELECT ts, transaction_id, value FROM transactions_search WHERE flat_property='transactions.layer_changes.x' AND value='-54.0'
ค้นหาเฟรมที่เพิ่มเลเยอร์
ImeContainer
SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
มุมมอง SQL ของทรานซิชัน
ข้อมูลโปรโตคอลของทรานซิชันใช้รูปแบบ ShellTransition
หากต้องการค้นหาข้อมูลการเปลี่ยน ให้ใช้มุมมอง transitions_search
มุมมองนี้จะมีคอลัมน์ต่อไปนี้
คอลัมน์ | คำอธิบาย |
---|---|
ts |
เวลาการเลือกจ่ายงาน - กลับไปใช้เวลาส่งหากมี มิเช่นนั้นจะเป็น 0 |
transition_id |
รหัสการเปลี่ยน |
property |
ชื่อพร็อพเพอร์ตี้ที่พิจารณาช่องที่ซ้ำกัน |
flat_property |
ชื่อพร็อพเพอร์ตี้ไม่คำนึงถึงฟิลด์ที่ซ้ำกัน |
value |
ค่าพร็อพเพอร์ตี้ในรูปแบบสตริง |
ตัวอย่างคำค้นหา
ค้นหาพร็อพเพอร์ตี้ของทรานซิชันที่ 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
มุมมอง SQL ของ ViewCapture
ข้อมูลโปรโตคอล ViewCapture ใช้รูปแบบ
View
หากต้องการค้นหาข้อมูล ViewCapture ให้ใช้มุมมอง viewcapture_search
มุมมองนี้จะมีคอลัมน์ต่อไปนี้
คอลัมน์ | คำอธิบาย |
---|---|
state_id |
รหัสที่ไม่ซ้ำกันของรัฐที่มีมุมมองอยู่ |
ts |
การประทับเวลาของสถานะที่มุมมองอยู่ |
package_name |
ชื่อแพ็กเกจ |
window_name |
ชื่อหน้าต่าง |
class_name |
ดูชื่อชั้นเรียน |
property |
ชื่อพร็อพเพอร์ตี้ที่พิจารณาช่องที่ซ้ำกัน |
flat_property |
ชื่อพร็อพเพอร์ตี้ไม่คำนึงถึงฟิลด์ที่ซ้ำกัน |
value |
ค่าพร็อพเพอร์ตี้ในรูปแบบสตริง |
previous_value |
ค่าพร็อพเพอร์ตี้จากสถานะก่อนหน้าในรูปแบบสตริง |
ตัวอย่างคำค้นหา
ค้นหาสถานะทั้งหมดเมื่อ SearchContainerView
เคลื่อนที่ในแนวตั้ง
SELECT * FROM viewcapture_search
WHERE class_name LIKE '%SearchContainerView'
AND flat_property='translation_y'
AND value!=previous_value
ตาราง SQL ของ ProtoLog
ข้อมูลโปรโต ProtoLog ใช้รูปแบบ ProtoLogMessage
มุมมองนี้มีคอลัมน์ต่อไปนี้
คอลัมน์ | คำอธิบาย |
---|---|
ts |
การประทับเวลาของบันทึก |
level |
ระดับการบันทึก |
tag |
แท็กกลุ่มการบันทึก |
message |
ข้อความในบันทึก |
stacktrace |
สแต็กเทรซ (หากมี) |
location |
ตำแหน่งโค้ดที่เป็นต้นทางของข้อความ |
ตัวอย่างคำค้นหา
ค้นหาบันทึกทั้งหมดที่มีข้อความที่มี
transition
SELECT ts, message, location FROM protolog WHERE message LIKE '%transition%'
ค้นหาบันทึกทั้งหมดที่มีรหัสธุรกรรมที่ถูกต้อง
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, '%');
เรียกใช้การค้นหา
เมื่อคุณใช้แผงด้านซ้าย การค้นหาร่องรอยจะเริ่มขึ้น การดำเนินการนี้จะใช้เวลา 2-3 วินาที ขณะเริ่มใช้งาน ไทม์ไลน์จะใช้งานไม่ได้
หลังจากการค้นหาร่องรอยเริ่มต้นแล้ว ให้เขียนข้อความค้นหาในช่องค้นหา แล้วคลิกเรียกใช้ข้อความค้นหา หรือกด Enter บนแป้นพิมพ์เพื่อเรียกใช้
เมื่อเสร็จแล้ว ตารางผลลัพธ์จะแสดงในแผงกลาง คําค้นหาจะปรากฏใต้ช่องค้นหา โดยมีช่องสําหรับบันทึกคําค้นหาระหว่างเซสชัน
คุณสามารถเข้าถึงการค้นหาที่บันทึกไว้ได้โดยคลิกแท็บที่บันทึกไว้ในแผงด้านซ้าย และเข้าถึงการค้นหาที่เรียกใช้ล่าสุดได้โดยคลิกแท็บล่าสุด
รูปที่ 2 แผงด้านซ้ายของโปรแกรมดูการค้นหา
ผลลัพธ์
การค้นหาทั้งหมดจะแสดงผลลัพธ์เป็นตาราง ซึ่งแสดงในมุมมองที่เลื่อนได้โดยมีลักษณะการทำงานแบบอินเทอร์แอกทีฟคล้ายกับเครื่องมือดูการติดตามที่อิงตามบันทึก เช่น ธุรกรรมและ ProtoLog
รูปที่ 3 ผลการค้นหาในโปรแกรมดูการค้นหา
หากตารางที่แสดงผลมีคอลัมน์ ts
ระบบจะตีความค่าในคอลัมน์นั้นเป็นการประทับเวลาและเพิ่มลงในการวางซ้อนไทม์ไลน์เป็นแถวรายการใหม่ คลิกแถวนี้และใช้แป้นลูกศรซ้ายและขวาเพื่อไปยังรายการต่างๆ
รูปที่ 4 ไทม์ไลน์การค้นหา