การใช้การเปลี่ยน Shell ได้รวมและประมวลผลวิธีการแสดงภาพเคลื่อนไหวภายในระบบ ซึ่งช่วยให้ดึงข้อมูลแบบรวมศูนย์เกี่ยวกับภาพเคลื่อนไหวที่กำหนดเวลาให้แสดงได้
การติดตามการเปลี่ยนผ่านจะมีข้อมูลเกี่ยวกับการเปลี่ยนผ่านทั้งหมดที่เกิดขึ้นภายในเชลล์ WindowManager (WM) ซึ่งมาจากทั้งฝั่งเซิร์ฟเวอร์ระบบและเชลล์ การติดตามนี้จะเปิดใช้อย่างถาวรใน Droidfood และฝังอยู่ในรายงานข้อบกพร่องโดยอัตโนมัติ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการรวบรวมร่องรอยได้ที่การเปลี่ยน Shell
เครื่องมือดูการเปลี่ยนของ Winscope จะแสดงข้อมูลนี้สําหรับการติดตามการเปลี่ยนซึ่งมีทั้งข้อมูลฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ โปรแกรมดูประกอบด้วยมุมมองบันทึกตารางที่มีข้อมูลระดับสูงเกี่ยวกับการเปลี่ยนผ่านทางด้านซ้าย และมุมมองแบบละเอียดสําหรับการเปลี่ยนผ่านแต่ละรายการทางด้านขวา
รูปที่ 1 การวิเคราะห์การติดตามการเปลี่ยน Shell
มุมมองตาราง
มุมมองตารางประกอบด้วยข้อมูลต่อไปนี้
- รหัส: รหัสการเปลี่ยนที่สร้างเพื่อการแก้ไขข้อบกพร่องเท่านั้น
- ประเภท: ประเภทการเปลี่ยนตามที่ระบุใน
Transitions.java
- เวลาส่ง: การประทับเวลาที่ส่งการเปลี่ยนจากเซิร์ฟเวอร์ไปยังเชลล์เพื่อจัดการ
- เวลาส่ง: การประทับเวลาที่ระบบส่งทรานซิชันไปยังตัวแฮนเดิลเพื่อเริ่มเล่น
- ระยะเวลา: เวลาที่ใช้ในการเปลี่ยนจากเริ่มเล่นจนจบ
- สถานะ: หากการเปลี่ยนสถานะเป็นดังนี้
- PLAYED:: เล่นแล้ว
- ยกเลิก: ยกเลิกก่อนเล่น การเปลี่ยนสามารถยกเลิกได้จากฝั่งเชลล์หรือ WM
- ผสานแล้ว: ผสานโดยตัวแฮนเดิลการเปลี่ยนรูปแบบเข้ากับการเปลี่ยนรูปแบบอื่นที่เล่นอยู่ (ตัวแฮนเดิลจะเป็นผู้ตัดสินใจว่าจะจัดการกับกรณีนี้อย่างไร)
มุมมองแบบละเอียด
นอกจากรายละเอียดในมุมมองตารางแล้ว มุมมองการเปลี่ยนโดยละเอียดในส่วนการเปลี่ยนที่เลือกจะมีข้อมูลต่อไปนี้
handler
: แฮนเดิลการเปลี่ยนที่จัดการภาพเคลื่อนไหวนี้createTimeNs
: การประทับเวลาที่สร้างการเปลี่ยนผ่านฝั่งเซิร์ฟเวอร์ WMfinishTimeNs
: การประทับเวลาเมื่อฝั่งเซิร์ฟเวอร์ WM ได้รับการแจ้งเตือนว่าการเปลี่ยนผ่านทำงานเสร็จแล้วฝั่งเชลล์endTransactionId
: ธุรกรรม SurfaceFlinger สุดท้ายที่รวมอยู่ในการเปลี่ยนไปใช้startTransactionId
: ธุรกรรม SurfaceFlinger เริ่มต้นที่รวมอยู่ในการเปลี่ยนไปใช้นี้targets
: รายชื่อผู้เข้าร่วมการเปลี่ยนผ่านtype
: ประเภทการเปลี่ยนตามที่ระบุไว้ในTransitions.java
เป้าหมาย
เป้าหมายคือองค์ประกอบที่เกี่ยวข้องกับการเปลี่ยน (ปกติคือกิจกรรมหรืองาน) สําหรับเป้าหมายแต่ละรายการ เราจะบันทึกข้อมูลต่อไปนี้
layerId
: เลเยอร์ที่มีภาพเคลื่อนไหว (จากลําดับชั้น SurfaceFlinger)mode
: ประเภทภาพเคลื่อนไหวที่แสดงในเลเยอร์นี้windowId
: หน้าต่างที่เคลื่อนไหว (จากลําดับชั้น WindowManager)flags
: มีการใช้ Flag ชุดใหม่กับเลเยอร์