การค้นหาการติดตาม

ใช้ SQL เพื่อค้นหาสถานะที่เฉพาะเจาะจงในการติดตามของ Winscope Perfetto ใช้เครื่องมือดูการค้นหาทั่วโลกใน UI ของ Winscope เพื่อเรียกใช้การค้นหาและแสดงผลลัพธ์เป็นตาราง

แท็บผู้ดูการค้นหา

รูปที่ 1 แท็บผู้ชมการค้นหา

เครื่องมือดูการค้นหาช่วยให้คุณเขียนและเรียกใช้การค้นหา SQL ที่กําหนดเองในร่องรอย Perfetto และเข้าถึงการค้นหาล่าสุดและที่บันทึกไว้ Winscope มีมุมมอง SQL เฉพาะทางเพื่อช่วยในการค้นหาร่องรอยของ SurfaceFlinger และธุรกรรม

ใช้รูปแบบต่อไปนี้สำหรับมุมมองทั้งหมด

  • สำหรับคอลัมน์ property และ flat_property

    • ชื่อพร็อพเพอร์ตี้อยู่ในรูปแบบ Snake Case เช่น visible_region from LayerProto
    • รูปแบบจุดใช้เพื่อแสดงพร็อพเพอร์ตี้ที่ฝังอยู่ เช่น 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 อินสแตนซ์

  • สำหรับคอลัมน์ 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 มีค่าน้อยกว่าหรือเท่ากับ 2400

    SELECT 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 ไทม์ไลน์การค้นหา