หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

การติดตามการเปลี่ยนหน้าต่าง

WinScope มีโครงสร้างพื้นฐานและเครื่องมือในการบันทึกและวิเคราะห์สถานะของ WindowManager และ SurfaceFlinger ระหว่างและหลังการเปลี่ยนหน้าต่าง WinScope บันทึกสถานะบริการระบบที่เกี่ยวข้องทั้งหมดไปยังไฟล์การติดตามซึ่งคุณสามารถใช้เพื่อเล่นซ้ำและทำตามขั้นตอนการเปลี่ยนได้

การจับร่องรอย

จับภาพการติดตามผ่าน การตั้งค่าด่วน หรือ adb บนอุปกรณ์ที่เรียกใช้ userdebug หรือ eng builds

การตั้งค่าด่วน

ในการจับภาพร่องรอยจาก การตั้งค่าด่วน :

  1. เปิดใช้งานตัวเลือกสำหรับนักพัฒนา
  2. ไปที่ ตัวเลือกสำหรับนักพัฒนา > ไทล์นักพัฒนาการตั้งค่าด่วน
  3. เปิดใช้งาน WinScope Trace
  4. เปิด การตั้งค่าด่วน
  5. แตะ Winscope Trace เพื่อเปิดใช้งานการติดตาม
  6. เรียกใช้การเปลี่ยนหน้าต่างบนอุปกรณ์
  7. หลังจากเสร็จสิ้นให้เปิด การตั้งค่าด่วน แล้วแตะ Winscope Trace เพื่อปิดใช้งานการติดตาม

การติดตามเขียนลงใน /data/misc/wmtrace/wm_trace.pb และ /data/misc/wmtrace/layers_trace.pb การติดตามจะรวมอยู่ในรายงานข้อบกพร่องด้วย

adb

เมื่อจับภาพการติดตามผ่าน adb ให้จับ WindowManager และ SurfaceFlinger การติดตามแยกกัน

ร่องรอย WindowManager

ในการจับภาพร่องรอยของ WindowManager:

  1. เปิดใช้งานการติดตาม:
    adb shell cmd window tracing start
  2. ปิดการใช้งานการติดตาม:
    adb shell cmd window tracing stop
  3. ใช้ไฟล์การติดตาม:
    adb pull /data/misc/wmtrace/wm_trace.pb wm_trace.pb

คุณสามารถเลือกที่จะเปลี่ยนการกำหนดค่าบันทึกเริ่มต้นของการตั้งค่าต่างๆสำหรับการติดตาม WindowManager:

  • ตั้งค่าความถี่ในการบันทึก (สำหรับธุรกรรมหรือเฟรม):
    adb shell cmd window tracing [frame | transaction]
  • กำหนดค่าระดับ verbose สำหรับรายการบันทึก:
    adb shell cmd window tracing level [all | trim | critical]
  • กำหนดขนาดบัฟเฟอร์สูงสุด (เป็น KB):
    adb shell cmd window tracing size size-value
  • ถ่ายโอนสถานะบัฟเฟอร์ระดับบันทึกความจุที่เหลือและจำนวนองค์ประกอบ:
    adb shell cmd window tracing status

การติดตาม SurfaceFlinger

ในการจับภาพการติดตาม SurfaceFlinger:

  1. เปิดใช้งานการติดตาม:
    adb shell su root service call SurfaceFlinger 1025 i32 1
  2. ปิดการใช้งานการติดตาม:
    adb shell su root service call SurfaceFlinger 1025 i32 0
  3. ใช้ไฟล์การติดตาม:
    adb pull /data/misc/wmtrace/layers_trace.pb layers_trace.pb

คุณสามารถเลือกที่จะเปลี่ยนการกำหนดค่าบันทึกเริ่มต้นของการตั้งค่าต่างๆสำหรับการติดตาม SurfaceFlinger:

  • กำหนดขนาดบัฟเฟอร์สูงสุด (เป็น KB):
    adb shell su root service call SurfaceFlinger 1029 i32 size-value
  • กำหนดค่าระดับ verbose สำหรับรายการบันทึก:
    adb shell su root service call SurfaceFlinger 1033 i32 flags

กำลังสร้างการถ่ายโอนข้อมูลของรัฐ

WinScope อ่านสแนปชอตของสถานะ WindowManager และ SurfaceFlinger จากรายงานข้อบกพร่อง รายงานข้อผิดพลาดจะจัดเก็บสถานะเป็นไฟล์โปรโตแยกต่างหากภายในโฟลเดอร์ proto ในการสร้างสถานะทิ้งโดยใช้ adb ให้เรียกใช้คำสั่งต่อไปนี้

WindowManager

adb exec-out dumpsys window --proto > window_dump.pb

SurfaceFlinger

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.pb

การวิเคราะห์ร่องรอย

ในการวิเคราะห์ไฟล์การติดตามให้ใช้เว็บแอป WinScope สร้างแอปได้จากแหล่งที่มาหรือเปิดจากไดเร็กทอรีที่สร้างไว้ล่วงหน้า

  1. ดาวน์โหลดสิ่งประดิษฐ์ที่สร้างไว้ล่วงหน้าจากที่เก็บซอร์ส Android:
    curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
  2. เปิดสิ่งประดิษฐ์ที่ดาวน์โหลดมาในเว็บเบราว์เซอร์
  3. หลังจาก WinScope เปิดขึ้นให้เลือก OPEN FILE เพื่อโหลดไฟล์การติดตาม

ใช้ WinScope

หลังจากเปิดไฟล์การติดตามใน WinScope คุณสามารถวิเคราะห์การติดตามได้หลายวิธี

ภาพหน้าจอ WinScope
รูปที่ 1. การ วิเคราะห์การติดตามใน WinScope
  • ไทม์ไลน์ - แสดงลำดับเหตุการณ์ในการติดตาม ใช้ปุ่มลูกศรหรือคลิกแต่ละรายการเพื่อเลื่อนดูไทม์ไลน์
  • หน้าจอ - แสดงภาพของทุกหน้าต่างที่มองเห็นได้บนหน้าจอ คลิกหน้าต่างเพื่อเลือกหน้าต่างต้นทางในลำดับชั้น
  • ลำดับชั้น - แสดงถึงแต่ละหน้าต่างที่ระบบรู้จัก บางหน้าต่างไม่มีบัฟเฟอร์ แต่มีไว้เพื่อกำหนดนโยบายเกี่ยวกับลูกของหน้าต่าง หน้าต่างที่มองเห็นได้จะมีไอคอน V
  • คุณสมบัติ - แสดงข้อมูลสถานะสำหรับรายการที่เลือกในลำดับชั้น