Winscope เป็นเครื่องมือเว็บที่ให้ผู้ใช้สามารถบันทึก เล่นซ้ำ และวิเคราะห์สถานะของบริการระบบต่างๆ ในระหว่างและหลังภาพเคลื่อนไหวและการเปลี่ยนภาพ Winscope บันทึกสถานะบริการระบบที่เกี่ยวข้องทั้งหมดลงในไฟล์การติดตาม เมื่อใช้ Winscope UI กับไฟล์การติดตาม คุณสามารถตรวจสอบสถานะของบริการเหล่านี้สำหรับเฟรมภาพเคลื่อนไหวแต่ละเฟรม ไม่ว่าจะมีหรือไม่มีการบันทึกหน้าจอ โดยการเล่นซ้ำ การก้าว และการดีบักผ่านการเปลี่ยนภาพ
บริการของระบบที่สร้างการติดตามที่สามารถโหลดลงใน Winscope มีดังนี้:
- SurfaceFlinger
- ตัวจัดการหน้าต่าง
- WMShell
- IME
- ตัวเปิด
เรียกใช้โปรแกรมดูการติดตาม Winscope
การติดตาม Winscope เป็นส่วนหนึ่งของบริการบนแพลตฟอร์ม ส่วนนี้จะสรุปขั้นตอนที่จำเป็นในการดาวน์โหลด สร้าง และเรียกใช้ Winscope Trace Viewer
ทำตามขั้นตอนเหล่านี้เพื่อตั้งค่าพีซีของคุณให้เรียกใช้ตัวติดตาม Winscope:
- ดาวน์โหลดแหล่งที่มาของ Android
นำทางไปยังโฟลเดอร์ Winscope:
cd development/tools/winscope
ติดตั้งการพึ่งพาโดยใช้:
npm install
หากต้องการดูรายการคำสั่งที่ใช้ได้ ให้รัน:
npm run
สร้างเป้าหมายผลิตภัณฑ์และทดสอบทั้งหมดโดยใช้:
npm run build:prod
เรียกใช้ Winscope โดยใช้:
npm run start
จับร่องรอย
คุณสามารถจับภาพการติดตามบน อุปกรณ์ ผ่าน Winscope หรือผ่านคำสั่ง Android Debug Bridge (adb)
จับร่องรอยบนอุปกรณ์
จับร่องรอยบนอุปกรณ์เพื่อรวบรวมข้อมูลเมื่อแจ้งจุดบกพร่องสำหรับปัญหาแอนิเมชั่น การติดตาม UI ทั้งหมดจะถูกบันทึกด้วยวิธีนี้ เนื่องจากไม่สามารถปรับแต่งการกำหนดค่าได้
บนอุปกรณ์ Android ของคุณ:
- เปิดใช้งานตัวเลือกสำหรับนักพัฒนา
- เลือก การติดตามระบบภายใต้ตัวเลือกนักพัฒนา
- เปิดใช้งาน การรวบรวมการติดตาม Winscope
- ภายใต้ เบ็ดเตล็ด :
- เปิดใช้งาน แนบการบันทึกไปยังรายงานข้อบกพร่อง
- เปิดใช้งาน การแสดงไทล์การตั้งค่าด่วน
- นำทางไปยังตำแหน่งที่คุณต้องการสร้างจุดบกพร่องอีกครั้ง
หากต้องการเริ่มจับภาพ ให้เปิดการตั้งค่าด่วนแล้วเลือก บันทึกการติดตาม :
รูปที่ 1 เมนูการตั้งค่าด่วนพร้อม Record Trace
ดำเนินการ เฉพาะขั้นตอนที่จำเป็น เพื่อสร้างจุดบกพร่องอีกครั้ง
หากต้องการหยุดการบันทึก ให้เปิดการตั้งค่าด่วน และเลือก หยุดการติดตาม
แชร์บันทึกที่บันทึกไว้โดยใช้ตัวเลือกใดตัวเลือกหนึ่งที่แสดงไว้ เช่น Gmail, ไดรฟ์ หรือ BetterBug
จับร่องรอยผ่าน Winscope
คุณสามารถบันทึกการติดตามโดยใช้ Winscope สำหรับการพัฒนาและการดีบักในเครื่อง Winscope ใช้ adb ซึ่งรองรับการเชื่อมต่ออุปกรณ์ผ่าน USB หรือ Wi-Fi
บนวินสโคป:
ในหน้าจอ Collect Traces คลิก ADB Proxy :
รูปที่ 2 จับร่องรอยบน Winscope
เปิดใช้พร็อกซี Winscope ADB Connect เพื่อบันทึกการติดตามโดยตรงจากเบราว์เซอร์ของคุณ
รันคำสั่ง:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
เพื่อเริ่มการจับภาพ ในหน้าจอ Collect Traces ให้เลือกเป้าหมายและการกำหนดค่า และคลิก Start Trace :
รูปที่ 3 รวบรวมร่องรอยบน Winscope
หากต้องการหยุดการจับภาพ คลิก สิ้นสุดการติดตาม :
รูปที่ 4 สิ้นสุดการติดตามบน Winscope
ขณะที่เครื่องมืออัปโหลดการติดตามบน UI ของ Winscope ข้อความ การดึงข้อมูล และ การแยกวิเคราะห์ไฟล์ Proto จะปรากฏบนหน้าจอ
สร้างดัมพ์สถานะโดยใช้ Winscope
หากต้องการถ่ายโอนข้อมูลสถานะโดยใช้ Winscope บนหน้าจอ Collect Traces ให้เลือกแท็บ Dump จากนั้นคลิก Dump state :
รูปที่ 5 สถานะการถ่ายโอนข้อมูลบน Winscope
จับร่องรอยผ่านคำสั่ง adb
รัน adb root
ก่อนรันคำสั่ง adb shell
สำหรับการติดตามแต่ละรายการต่อไปนี้ ที่ส่วนท้ายของการติดตาม ไฟล์การติดตามจะพร้อมใช้งานใน /data/misc/wmtrace
หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยจากอุปกรณ์ โปรดดู คัดลอกไฟล์ไปยังและจากอุปกรณ์ ดู adb สำหรับข้อมูลเพิ่มเติม
ติดตาม WindowManager
หากต้องการบันทึกการติดตาม WindowManager:
เปิดใช้งานการติดตาม:
adb shell wm tracing start
ปิดการใช้งานการติดตาม:
adb shell wm tracing stop
บันทึกข้อมูลการบันทึกลงในไฟล์ขณะเรียกใช้การจับการติดตาม:
adb shell wm tracing save-for-bugreport
บันทึกการติดตามหนึ่งครั้งต่อเฟรม:
adb shell wm tracing frame
บันทึกแต่ละธุรกรรม:
adb shell wm tracing transaction
ตั้งค่าขนาดบันทึกสูงสุด (เป็น KB):
adb shell wm tracing size
สถานะการติดตามการพิมพ์:
adb shell wm tracing status
ตั้งค่าระดับการบันทึกเป็น
critical
(เฉพาะหน้าต่างที่มองเห็นได้โดยมีข้อมูลลดลง)trim
(หน้าต่างทั้งหมดที่มีข้อมูลลดลง) หรือall
(หน้าต่างและข้อมูลทั้งหมด):adb shell wm tracing level
โปรโตล็อก
คำสั่งต่อไปนี้ใช้สำหรับระบบ ProtoLog
ในกระบวนการ system_server
:
เริ่ม ProtoLog:
adb shell cmd window logging start
หยุด ProtoLog:
adb shell cmd window logging stop
เปิดใช้งาน ProtoLog สำหรับกลุ่มบันทึกที่กำหนด:
adb shell cmd window logging enable [group...]
ปิดการใช้งาน ProtoLog สำหรับกลุ่มบันทึกที่กำหนด:
adb shell cmd window logging disable [group...]
เปิดใช้งานการบันทึก Logcat สำหรับกลุ่มบันทึกที่กำหนด:
adb shell cmd window logging enable-text [group...]
ปิดใช้งานการบันทึก Logcat สำหรับกลุ่มบันทึกที่กำหนด:
adb shell cmd window logging disable-text [group...]
ใน WMShell:
เริ่ม ProtoLog:
adb shell dumpsys activity service SystemUIService WMShell
การติดตามการเปลี่ยนแปลง
คำสั่งต่อไปนี้ใช้สำหรับการติดตามการเปลี่ยนแปลง:
ในกระบวนการ system_server
:
เริ่มการติดตาม:
adb shell cmd window shell tracing start
หยุดการติดตาม:
adb shell cmd window shell tracing stop
เริ่มต้นการติดตามใน WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
หยุดการติดตามใน WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
ตัวแก้ไขวิธีการป้อนข้อมูล
คำสั่งต่อไปนี้ใช้สำหรับการติดตาม Input Method Editor (IME):
เริ่มการติดตาม IME สำหรับไคลเอนต์วิธีการป้อนข้อมูล (IM), บริการวิธีการป้อนข้อมูล (IMS) และบริการการจัดการวิธีการป้อนข้อมูล (IMMS):
adb shell ime tracing start
เริ่มการติดตามไคลเอ็นต์ IME, IMS และ IMMS:
adb shell ime tracing stop
ชั้น SurfaceFlinger
การติดตามเลเยอร์ SurfaceFlinger ใช้การติดตาม Perfetto ในการจับภาพ ดู การกำหนดค่าการติดตาม สำหรับข้อมูลการกำหนดค่า
ดูตัวอย่างการกำหนดค่าสำหรับการติดตามเลเยอร์ SurfaceFlinger ต่อไปนี้:
unique_session_name: "surfaceflinger_layers_active"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
ดูคำสั่งตัวอย่างต่อไปนี้เพื่อสร้างการติดตามสำหรับเลเยอร์ SurfaceFlinger:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
ธุรกรรม SurfaceFlinger
การติดตามธุรกรรม SurfaceFlinger ใช้การติดตาม Perfetto ในการจับภาพ ดู การกำหนดค่าการติดตาม สำหรับข้อมูลการกำหนดค่า
ดูตัวอย่างต่อไปนี้ของการกำหนดค่า Perfetto สำหรับ การติดตามที่ใช้งาน SurfaceFlinger :
unique_session_name: "surfaceflinger_transactions_active"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
write_into_file: true
file_write_period_ms: 100
ดูตัวอย่างการกำหนดค่า Perfetto สำหรับ การติดตามต่อเนื่องของ SurfaceFlinger ต่อไปนี้:
unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_CONTINUOUS
}
}
}
ดูคำสั่งตัวอย่างต่อไปนี้เพื่อสร้างการติดตามสำหรับธุรกรรม SurfaceFlinger:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
สร้างดัมพ์สถานะโดยใช้ adb
Winscope อ่านสแนปช็อตของสถานะ WindowManager และ SurfaceFlinger จากรายงานข้อบกพร่อง รายงานข้อบกพร่องจะจัดเก็บสถานะเป็นไฟล์โปรโตแยกกันภายในโฟลเดอร์ proto
หากต้องการสร้างดัมพ์สถานะโดยใช้ adb ให้รันคำสั่งต่อไปนี้
สำหรับ WindowManager:
adb exec-out dumpsys window --proto > window_dump.winscope
สำหรับ SurfaceFlinger:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
วิเคราะห์ร่องรอย
ในการแก้ไขข้อบกพร่องสถานะชั่วคราวและสถานะที่ไม่ถูกต้องซึ่งเป็นสาเหตุของปัญหาภาพเคลื่อนไหว Winscope จะรวมไฟล์การติดตามต่างๆ ให้การค้นหาและการแสดงภาพผ่านเฟรมและไทม์ไลน์ และนำเสนอข้อความ protobuf ในลักษณะที่สอดคล้องกัน การวิเคราะห์การติดตามใน Winscope ช่วยระบุเลเยอร์ เฟรม และสถานะของการเกิดจุดบกพร่องที่แน่นอน
ใช้วินสโคป
เมื่อคุณ บันทึกร่องรอยแล้ว ให้วิเคราะห์ร่องรอยบน Winscope:
อัปโหลดร่องรอยที่บันทึกไว้โดยใช้แผงทางด้านขวา คุณสามารถลบการติดตามที่อัปโหลดหรืออัปโหลดการติดตามเพิ่มเติมได้
รูปที่ 6. อัพโหลดการติดตามบน Winscope
คลิก ดูการติดตาม เพื่อดูภาพการติดตามที่อัปโหลด แท็บสำหรับแต่ละการติดตามจะปรากฏที่แผงด้านบนของหน้าต่าง หากไฟล์ที่อัปโหลดมีร่องรอยที่เกี่ยวข้อง มุมมองแบบลอยของการติดตามการบันทึกหน้าจอจะถูกซ้อนทับบนหน้าจอ
รูปที่ 7 ดูร่องรอยบน Winscope
ใช้ UI ที่แผงด้านบนสุดของหน้าต่างเพื่อเปลี่ยนชื่อ และดาวน์โหลดการติดตามที่คุณอัปโหลด หรือจะอัพโหลดอันใหม่
นำทางไปตามร่องรอยเมื่อเวลาผ่านไปโดยใช้เครื่องมือตัวเลื่อนเวลาที่แผงด้านล่างของหน้าต่าง สำหรับการนำทางในเวลาเพิ่มเติม ให้ใช้คุณสมบัติต่อไปนี้ ดังแสดงในรูปที่ 8:
- หากต้องการนำทางไปยังเวลาหรือเหตุการณ์ใดเหตุการณ์หนึ่ง ให้ใช้เคอร์เซอร์ (แถบเลื่อนเวลา) หรือทางซ้าย และถูกต้อง ลูกศรในกล่องแสดงเวลา (มุมซ้ายล่าง) หรือลูกศรซ้ายและขวาบนแป้นพิมพ์ของคุณ
- หากต้องการแสดงร่องรอยรหัสสีที่เลือกบนไทม์ไลน์ ให้ใช้เมนูแบบเลื่อนลง (ด้านซ้ายของแถบเลื่อนเวลา) ตามค่าเริ่มต้น การสืบค้นกลับสามรายการสุดท้ายที่ดูโดยใช้แท็บการติดตามจะแสดงบนไทม์ไลน์
- หากต้องการดูร่องรอยที่อัปโหลดทั้งหมดอย่างละเอียด ให้ใช้การซูมเข้า หรือซูมออก เครื่องมือ (ใต้แถบเลื่อนเวลา) หรือเลื่อนบนแป้นพิมพ์ ใช้ปุ่มรีเซ็ตเพื่อรีเซ็ตระดับการซูม
- หากต้องการขยายมุมมองการกระจายการติดตามในช่วงเวลาหนึ่ง ให้คลิกลูกศรขึ้น (มุมขวาล่าง).
รูปที่ 8 การนำทางเวลาบน Winscope
ในมุมมองแบบขยาย (รูปที่ 9) ให้เลือกและซูมเข้าในกรอบเวลาที่ต้องการเพื่อการตรวจสอบที่ดีขึ้น:
รูปที่ 9. ไทม์ไลน์ที่ขยายบน Winscope
หากต้องการตรวจสอบร่องรอย คุณสามารถดูสถานะอุปกรณ์ด้วยการบันทึกหน้าจอได้ หากต้องการตรวจสอบการติดตามเฉพาะ ให้คลิกแท็บการติดตามที่เกี่ยวข้องที่แผงด้านบนของเครื่องมือ
สำหรับการติดตาม Surface Flinger แผงสามแผงจะแสดงมุมมองที่แตกต่างกันของการติดตามในช่วงเวลาที่กำหนด ดังแสดงในรูปที่ 10:
รูปที่ 10 การติดตาม Surface Flinger บน Winscope
มุมมอง เลเยอร์ : มุมมอง 3 มิติของเลเยอร์ในการซ้อนทับแบบสี่เหลี่ยม องค์ประกอบ UI ต่อไปนี้จะปรับสี่เหลี่ยมเพื่อแสดงองค์ประกอบกราฟิกในแง่ของตำแหน่ง ขนาด การแปลง และลำดับ z:
- แถบเลื่อน การหมุน (ซ้ายบนของมุมมองเลเยอร์) จะหมุนสี่เหลี่ยมที่มีเลเยอร์เพื่อดูในมุมที่เลือก
- แถบเลื่อน ระยะห่าง (ด้านบนขวาของมุมมองเลเยอร์) ปรับระยะห่างระหว่างเลเยอร์เพื่อสร้างมุมมองคอมโพสิตที่เลือก
- เครื่องมือซูม (ด้านบนขวาของมุมมองเลเยอร์) ซูมเข้า และซูมออก ลงสู่ชั้นต่างๆ เพื่อการตรวจสอบที่ดีขึ้น
- ปุ่มรีเซ็ต (ด้านบนขวาของมุมมองเลเยอร์) คืนค่าการตั้งค่ากล้องเป็นมุมมองดั้งเดิม
- ลากสี่เหลี่ยมเพื่อให้ซูมได้ดีขึ้น
มุมมอง ลำดับชั้น : ลำดับชั้นแบบเต็มของเลเยอร์
- เมื่อเลือก แล้ว เฉพาะที่มองเห็นได้ (ด้านบนขวาของมุมมองลำดับชั้น) จะซ่อนเลเยอร์ที่มองไม่เห็นจากลำดับชั้นเพื่อช่วยให้เห็นภาพองค์ประกอบบนหน้าจอ
- แบบเรียบ (ด้านบนขวาของมุมมองลำดับชั้น) เมื่อเลือก จะแสดงลำดับชั้นเป็นรายการเลเยอร์แบบเรียบๆ
- แสดงความแตกต่าง (ซ้ายบนของมุมมองลำดับชั้น) จะถูกเลือกเฉพาะเมื่อมีการเปลี่ยนสถานะ เมื่อเลือก เครื่องมือจะเปรียบเทียบสถานะปัจจุบันกับสถานะก่อนหน้า องค์ประกอบใหม่จะถูกไฮไลต์ด้วยสีเขียว องค์ประกอบที่ถูกลบจะถูกไฮไลต์ด้วยสีแดง และองค์ประกอบที่แก้ไขจะถูกไฮไลต์ด้วยสีน้ำเงิน
มุมมอง คุณสมบัติ : คุณสมบัติของเลเยอร์ที่เลือก แผงด้านบนของมุมมอง คุณสมบัติ มีข้อมูลเกี่ยวกับคุณสมบัติหลักเท่านั้น เช่น การมองเห็น เรขาคณิต และ บัฟเฟอร์ แผงด้านล่างของมุมมอง คุณสมบัติ ประกอบด้วย Proto Dump ของคุณสมบัติทั้งหมด
- กล่องกา เครื่องหมายแสดงความแตกต่าง (ด้านซ้ายบนของมุมมองคุณสมบัติ) จะทำงานเหมือนกับในมุมมอง ลำดับชั้น
- แสดงค่าเริ่มต้น (ซ้ายบนของมุมมองคุณสมบัติ) เมื่อเลือก จะแสดงค่าโปรโตเริ่มต้นบน Proto Dump ตามค่าเริ่มต้น ค่าเหล่านี้จะไม่แสดงอยู่ใน Proto Dump ค่าโปรโตเริ่มต้นจะนำมาจากคำนิยามฟิลด์โปรโต หากฟิลด์โปรโตไม่ได้ตั้งค่าเริ่มต้นที่ไม่เป็นค่าว่าง ค่าโปรโตเริ่มต้นที่แสดงคือ:
- สตริง: Null
- ตัวเลข: 0
- ค่าบูลีน: เท็จ
- วัตถุ: Null
การเลือกระหว่างมุมมองทั้งสามและการบันทึกหน้าจอจะซิงโครไนซ์ กล่าวคือ การติดตามทั้งหมดจะอัปเดตพร้อมกันเมื่อคุณนำทางไปยังจุดเวลาอื่น หากต้องการดูคุณสมบัติของเลเยอร์ ให้เลือกเลเยอร์โดยคลิกในมุมมองลำดับชั้น หรือคลิกสี่เหลี่ยมตามลำดับในมุมมองคุณสมบัติ สี่เหลี่ยมสีม่วงแสดงว่ามีการติดตามมุมมองแนบอยู่กับเลเยอร์นี้ เมื่อดับเบิลคลิกเลเยอร์สีม่วง UI จะนำทางเพื่อเปลี่ยนไปยังแท็บการติดตามมุมมองที่เกี่ยวข้อง
สำหรับการติดตาม Window Manager สามพาเนลจะแสดงมุมมองที่แตกต่างกันของการติดตามในช่วงเวลาที่กำหนด ดังแสดงในรูปที่ 11:
- มุมมอง Windows : มุมมอง 3 มิติของเลเยอร์
- มุมมอง ลำดับชั้น : ลำดับชั้นแบบเต็มของเลเยอร์
- มุมมอง คุณสมบัติ ประกอบด้วย Proto Dump ของคุณสมบัติทั้งหมด
การเลือกระหว่างมุมมองทั้งสามและการบันทึกหน้าจอจะซิงโครไนซ์ กล่าวคือ การติดตามทั้งหมดจะอัปเดตพร้อมกันเมื่อคุณนำทางไปยังจุดเวลาอื่น
รูปที่ 11 การติดตาม Window Manager บน Winscope
สำหรับการติดตาม ธุรกรรม ธุรกรรม ระหว่าง Surface Flinger และ Window Manager จะแสดงในรูปแบบตารางซึ่งสามารถค้นหาได้ด้วยรหัสที่แสดง ประเภท และข้อความ พร้อมด้วยมุมมองคุณสมบัติที่แสดงโปรโตดัมพ์ การเลือกระหว่างสองมุมมองและการบันทึกหน้าจอจะซิงโครไนซ์:
รูปที่ 12 การติดตามธุรกรรมบน Winscope
สำหรับการติดตาม ProtoLog ข้อมูลจะถูกนำเสนอในรูปแบบตาราง ซึ่งสามารถค้นหาได้ด้วยแท็ก ไฟล์ต้นฉบับ และข้อความ:
รูปที่ 13 การติดตาม ProtoLog บน Winscope
สำหรับการติดตาม การเปลี่ยน ผ่าน รายการการเปลี่ยนผ่านพร้อมรหัส ประเภท เวลาที่ส่ง ระยะเวลา และสถานะจะแสดงพร้อมกับคุณสมบัติของการเปลี่ยนที่เลือก:
รูปที่ 14 การติดตามการเปลี่ยนภาพบน Winscope