Winscope เป็นเครื่องมือบนเว็บที่ช่วยให้ผู้ใช้บันทึก เล่นซ้ำ และวิเคราะห์สถานะของบริการระบบต่างๆ ทั้งระหว่างและหลังภาพเคลื่อนไหวและการเปลี่ยนฉาก Winscope จะบันทึกสถานะบริการของระบบที่เกี่ยวข้องทั้งหมดลงในไฟล์การติดตาม เมื่อใช้ UI ของ Winscope กับไฟล์การติดตาม คุณสามารถตรวจสอบสถานะของบริการเหล่านี้สำหรับเฟรมภาพเคลื่อนไหวแต่ละเฟรมได้ ไม่ว่าจะมีการบันทึกหน้าจอหรือไม่ก็ตาม โดยเล่นซ้ำ เลื่อนไปทีละขั้น และแก้ไขข้อบกพร่องผ่านการเปลี่ยนผ่าน
บริการของระบบที่สร้างการติดตามที่โหลดลงใน Winscope ได้มีดังนี้
- Flinger
- ผู้จัดการหน้าต่าง
- WMShell
- IME
- ปืนยิงลูกระเบิด
เรียกใช้โปรแกรมดูการติดตาม Winscope
Winscope Tracing เป็นส่วนหนึ่งของบริการบนแพลตฟอร์ม ส่วนนี้อธิบายขั้นตอนที่จำเป็นในการดาวน์โหลด สร้าง และเรียกใช้ผู้ดูการติดตาม Winscope
ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าพีซีให้เรียกใช้ Winscope Tracer
- ดาวน์โหลดซอร์สโค้ด 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 เมนูการตั้งค่าด่วนที่มี "บันทึกการติดตาม"
ดำเนินการเฉพาะขั้นตอนที่จำเป็นเพื่อจำลองข้อบกพร่อง
หากต้องการหยุดจับภาพ ให้เปิดการตั้งค่าด่วนแล้วเลือกหยุดการติดตาม
แชร์บันทึกที่บันทึกไว้โดยใช้ตัวเลือกใดตัวเลือกหนึ่งที่ระบุไว้ เช่น Gmail, ไดรฟ์ หรือ BetterBug
จับภาพการติดตามผ่าน Winscope
คุณสามารถบันทึกการติดตามโดยใช้ Winscope สำหรับการพัฒนาและการแก้ไขข้อบกพร่องในเครื่องได้ Winscope ใช้ adb ซึ่งรองรับการเชื่อมต่ออุปกรณ์ผ่าน USB หรือ Wi-Fi
ใน Winscope
ในหน้าจอรวบรวมการติดตาม ให้คลิก ADB Proxy
รูปที่ 2 บันทึกการติดตามใน Winscope
เปิดพร็อกซี Winscope ADB Connect เพื่อบันทึกการติดตามจากเบราว์เซอร์โดยตรง
เรียกใช้คําสั่งต่อไปนี้
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
หากต้องการเริ่มการบันทึก ให้เลือกเป้าหมายและการกําหนดค่าในหน้าจอรวบรวมการติดตาม แล้วคลิกเริ่มการติดตาม
รูปที่ 3 รวบรวมการติดตามใน Winscope
หากต้องการหยุดการจับภาพ ให้คลิกสิ้นสุดการติดตาม
รูปที่ 4 สิ้นสุดการติดตามใน Winscope
ในขณะที่เครื่องมืออัปโหลดการติดตามใน UI ของ Winscope ข้อความการดึงข้อมูลและการแยกวิเคราะห์ไฟล์ Proto จะปรากฏขึ้นบนหน้าจอ
สร้าง State Dump โดยใช้ Winscope
ในการรับสถานะดัมพ์โดยใช้ Winscope ในหน้าจอรวบรวมการติดตาม ให้เลือกแท็บดัมพ์แล้วคลิกสถานะดัมพ์
รูปที่ 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
บันทึกการติดตาม 1 ครั้งต่อเฟรมดังนี้
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
ตัวแก้ไขวิธีการป้อนข้อมูล
คำสั่งต่อไปนี้ใช้สำหรับการติดตามตัวแก้ไขวิธีการป้อนข้อมูล (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 \
สร้าง State Dump โดยใช้ 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
เมื่อคุณจับภาพการติดตามแล้ว ให้วิเคราะห์การติดตามใน Winscope โดยทำดังนี้
อัปโหลดร่องรอยที่บันทึกไว้โดยใช้แผงทางด้านขวา คุณสามารถนำการติดตามที่อัปโหลดออกหรืออัปโหลดการติดตามเพิ่มเติมก็ได้
รูปที่ 6 อัปโหลดการติดตามใน Winscope
คลิกดูการติดตามเพื่อแสดงภาพการติดตามที่อัปโหลด แท็บสำหรับการติดตามแต่ละรายการจะปรากฏในแผงด้านบนของหน้าต่าง หากไฟล์ที่อัปโหลดมีการติดตามที่เกี่ยวข้อง ภาพแบบลอยของการติดตามการบันทึกหน้าจอจะวางซ้อนบนหน้าจอ
รูปที่ 7 ดูการติดตามใน Winscope
ใช้ UI ในแผงด้านบนสุดของหน้าต่างเพื่อเปลี่ยนชื่อ และดาวน์โหลดการติดตามที่อัปโหลด หรืออัปโหลดรายการใหม่
ไปยังส่วนต่างๆ ของร่องรอยเมื่อเวลาผ่านไปโดยใช้เครื่องมือแถบเลื่อนเวลาในแผงด้านล่างของหน้าต่าง ถ้าต้องการดูเวลาเพิ่มเติม ให้ใช้คุณลักษณะต่อไปนี้ ดังแสดงในรูปที่ 8
- หากต้องการไปยังเวลาหรือเหตุการณ์ที่เฉพาะเจาะจง ให้ใช้เคอร์เซอร์ (แถบเลื่อนเวลา) หรือ และลูกศร ขวาในช่องแสดงเวลา (มุมซ้ายล่าง) หรือลูกศรซ้ายและขวาบนแป้นพิมพ์
- หากต้องการแสดงการติดตามที่มีการกำหนดรหัสสีที่เลือกบนไทม์ไลน์ ให้ใช้เมนูแบบเลื่อนลง (ทางด้านซ้ายของแถบเลื่อนเวลา) โดยค่าเริ่มต้น ระบบจะแสดงร่องรอย 3 รายการล่าสุดที่ดูโดยใช้แท็บร่องรอยบนไทม์ไลน์
- หากต้องการดูการติดตามแบบละเอียดของการติดตามทั้งหมด ให้ใช้เครื่องมือซูมเข้า หรือซูมออก (ใต้แถบเลื่อนเวลา) หรือเลื่อนแป้นพิมพ์ ใช้ปุ่มรีเซ็ตเพื่อรีเซ็ตระดับการซูม
- หากต้องการดูมุมมองแบบขยายของการกระจายร่องรอยตามช่วงเวลา ให้คลิกลูกศรขึ้น (มุมขวาล่าง)
รูปที่ 8 การนำทางเวลาใน Winscope
ในมุมมองขยาย (รูปที่ 9) ให้เลือกและซูมเข้าในกรอบเวลาที่เจาะจงเพื่อการตรวจสอบที่ดีขึ้น ดังนี้
รูปที่ 9 ไทม์ไลน์แบบขยายใน Winscope
หากต้องการตรวจสอบการติดตาม คุณดูสถานะของอุปกรณ์ขณะบันทึกหน้าจอได้ หากต้องการตรวจสอบการติดตามที่เจาะจง ให้คลิกแท็บการติดตามที่เกี่ยวข้องในแผงด้านบนของเครื่องมือ
สำหรับการติดตาม Surface Flinger แผง 3 แผงจะแสดงมุมมองที่แตกต่างกันของการติดตามในระยะเวลาที่กำหนด ดังที่แสดงในรูปที่ 10 ดังนี้
รูปที่ 10 การติดตาม Surface Flinger ใน Winscope
มุมมองเลเยอร์: มุมมอง 3 มิติของเลเยอร์ในการวางซ้อนสี่เหลี่ยมผืนผ้า องค์ประกอบ UI ต่อไปนี้จะปรับรูปสี่เหลี่ยมเพื่อแสดงองค์ประกอบกราฟิกในแง่ของตำแหน่ง ขนาด การแปลง และลำดับ z
- แถบเลื่อนการหมุน (ด้านซ้ายบนของมุมมองเลเยอร์) จะหมุนสี่เหลี่ยมผืนผ้าที่วางซ้อนกันเพื่อดูในมุมที่เลือก
- แถบเลื่อนระยะห่าง (ด้านขวาบนของมุมมองเลเยอร์) จะปรับระยะห่างระหว่างเลเยอร์เพื่อสร้างมุมมองแบบผสมที่เลือก
- เครื่องมือซูม (ด้านขวาบนของมุมมองเลเยอร์) จะซูมเข้า และซูมออก เข้าไปในเลเยอร์เพื่อการตรวจสอบที่ดีขึ้น
- ปุ่มรีเซ็ต (ด้านขวาบนของมุมมองเลเยอร์) จะคืนค่าการตั้งค่ากล้องเป็นมุมมองเดิม
- ลากรูปสี่เหลี่ยมเพื่อทำให้การซูมง่ายขึ้น
มุมมองลําดับชั้น: ลําดับชั้นทั้งหมดของเลเยอร์
- มองเห็นได้เท่านั้น (ด้านขวาบนของมุมมองลําดับชั้น) เมื่อเลือกตัวเลือกนี้ ระบบจะซ่อนเลเยอร์มองไม่เห็นจากลําดับชั้นเพื่อช่วยแสดงภาพองค์ประกอบบนหน้าจอ
- แนวราบ (ด้านขวาบนของมุมมองลำดับชั้น) หากเลือก จะแสดงลำดับชั้นเป็นรายการเลเยอร์ที่แยกเป็นหลายรายการ
- ระบบจะเลือกแสดงความแตกต่าง (ด้านซ้ายบนของมุมมองลำดับชั้น) เมื่อมีการเปลี่ยนสถานะเท่านั้น เมื่อเลือกไว้ เครื่องมือจะเปรียบเทียบสถานะปัจจุบันกับสถานะก่อนหน้า องค์ประกอบใหม่จะไฮไลต์เป็นสีเขียว องค์ประกอบที่ถูกลบจะไฮไลต์เป็นสีแดง และองค์ประกอบที่แก้ไขแล้วจะถูกไฮไลต์ด้วยสีน้ำเงิน
มุมมองพร็อพเพอร์ตี้: พร็อพเพอร์ตี้ของเลเยอร์ที่คุณเลือก แผงด้านบนของมุมมองคุณสมบัติมีข้อมูลเกี่ยวกับคุณสมบัติหลักเท่านั้น เช่น ทัศนวิสัย เรขาคณิต และบัฟเฟอร์ แผงด้านล่างของมุมมองพร็อพเพอร์ตี้มีการดัมพ์ Proto ของพร็อพเพอร์ตี้ทั้งหมด
- ช่องทำเครื่องหมายแสดงความแตกต่าง (ด้านซ้ายบนของมุมมองคุณสมบัติ) จะทำงานเหมือนกับในมุมมองลำดับชั้น
- แสดงค่าเริ่มต้น (ด้านซ้ายบนของมุมมองพร็อพเพอร์ตี้) หากเลือก จะแสดงค่า Proto เริ่มต้นใน Proto Dump
โดยค่าเริ่มต้น ค่าเหล่านี้จะไม่ปรากฏใน Proto Dump ระบบจะนำค่าโปรโตเริ่มต้นมาจากคำจำกัดความของช่องโปรโต
หากช่อง Pro ไม่ได้มีการตั้งค่าเริ่มต้นที่ไม่ใช่ค่าว่าง ค่า Proto เริ่มต้นที่แสดงจะเป็นดังนี้
- สตริง: Null
- ตัวเลข: 0
- ค่าบูลีน: เท็จ
- วัตถุ: Null
การเลือกระหว่างมุมมอง 3 มุมมองและการบันทึกหน้าจอจะซิงค์กัน กล่าวคือ ร่องรอยทั้งหมดจะอัปเดตพร้อมกันเมื่อคุณไปยังจุดอื่น หากต้องการดูคุณสมบัติของเลเยอร์ ให้เลือกเลเยอร์โดยคลิกเลเยอร์นั้นในมุมมองลําดับชั้น หรือคลิกสี่เหลี่ยมผืนผ้าที่เกี่ยวข้องในมุมมองพร็อพเพอร์ตี้ สี่เหลี่ยมผืนผ้าสีม่วงบ่งบอกว่ามีการติดตามการดูแนบอยู่กับเลเยอร์นี้ เมื่อดับเบิลคลิกเลเยอร์สีม่วง UI จะเปลี่ยนเป็นแท็บการติดตามมุมมองที่เกี่ยวข้อง
สําหรับการติดตาม Window Manager แผง 3 แผงจะแสดงมุมมองการติดตามที่แตกต่างกันในช่วงเวลาหนึ่งๆ ดังที่แสดงในรูปที่ 11
- มุมมองหน้าต่าง: มุมมอง 3 มิติของเลเยอร์
- มุมมองลำดับชั้น: ลำดับชั้นทั้งหมดของเลเยอร์
- มุมมองคุณสมบัติมี Proto Dump ของพร็อพเพอร์ตี้ทั้งหมด
การเลือกระหว่างมุมมอง 3 มุมมองและการบันทึกหน้าจอจะซิงค์กัน กล่าวคือ ร่องรอยทั้งหมดจะอัปเดตพร้อมกันเมื่อคุณไปยังจุดอื่น
รูปที่ 11 ติดตาม Window Manager ใน Winscope
สำหรับการติดตามธุรกรรม ธุรกรรมระหว่าง Surface Flinger และ Window Manager จะแสดงในรูปแบบตารางซึ่งสามารถค้นหาได้จากรหัส ประเภท และข้อความที่แสดง รวมถึงมุมมองพร็อพเพอร์ตี้ที่แสดง Proto Dump การเลือกระหว่าง 2 มุมมองและการบันทึกหน้าจอจะซิงค์กัน
รูปที่ 12 การติดตามธุรกรรมใน Winscope
สำหรับการติดตาม ProtoLog ข้อมูลจะแสดงในรูปแบบตาราง ซึ่งค้นหาได้โดยใช้แท็ก ไฟล์ต้นฉบับ และข้อความ
รูปที่ 13 การติดตาม ProtoLog ใน Winscope
สำหรับการติดตามการเปลี่ยน รายการการเปลี่ยนพร้อมรหัส ประเภท เวลาส่ง ระยะเวลา และสถานะจะแสดงพร้อมกับคุณสมบัติของการเปลี่ยนที่เลือก ดังนี้
รูปที่ 14 การติดตามทรานซิชันใน Winscope