การ Dump ข้อมูลของ SurfaceFlinger จะให้ภาพรวมของ SurfaceFlinger ณ เวลาที่เฉพาะเจาะจง การติดตาม SurfaceFlinger จะแสดงลำดับสถานะตามลำดับเวลา ซึ่งให้ข้อมูลเชิงลึกที่มีคุณค่าเกี่ยวกับลักษณะที่หน้าต่างปรากฏบนหน้าจอและกำหนดว่าหน้าต่างใดจะได้รับการตอบสนองต่อการสัมผัสในตำแหน่งที่เฉพาะเจาะจง ข้อมูลนี้ ช่วยคุณแก้ปัญหาต่างๆ เช่น แอปไม่ตอบสนองต่อการสัมผัสของฉัน หรือ ฉันพบอาการหน้าจอกระพริบขณะดูวิดีโอ
ใน Winscope โปรแกรมดู SurfaceFlinger จะแสดงข้อมูลนี้สำหรับการติดตามที่คุณรวบรวมโดยใช้โหมดแอ็กทีฟหรือสร้างจากการติดตามธุรกรรมเมื่อสร้างรายงานข้อบกพร่อง (ค่ากำหนดเริ่มต้นคือการกำหนดค่า Droidfood) รวมถึงสำหรับการ Dump ข้อมูล
ดูข้อมูลเพิ่มเติมเกี่ยวกับการรวบรวมการติดตามได้ที่ SurfaceFlinger (เลเยอร์)
รูปที่ 1 การวิเคราะห์การติดตาม SurfaceFlinger
ด้านซ้ายของหน้าจอจะแสดงมุมมอง 3 มิติของเลเยอร์ มุมมอง Rects จะพิจารณาขอบเขตเลเยอร์ ลำดับ Z ความทึบแสง Z สัมพัทธ์ และมุมโค้ง
ชิปของลำดับชั้น
ส่วนกลางของแท็บจะแสดงลำดับชั้นของเลเยอร์พร้อมชิปสำหรับข้อมูลเพิ่มเติม เช่น ความสัมพันธ์ระดับบนสุดและระดับย่อยระหว่างเลเยอร์ ดังนี้
- V: ระบุเลเยอร์ที่มองเห็นได้
- RelZParent: ระบุเลเยอร์ที่มี RelZ เป็นเลเยอร์ย่อย
- RelZ: ระบุเลเยอร์ที่มี RelZParent และวาดในลำดับ Z เป็น ลำดับชั้น
- HWC: ระบุเลเยอร์ที่สร้างโดย Hardware Composer
- GPU: ระบุเลเยอร์ที่สร้างโดย GPU
ด้านขวาของหน้าจอจะแสดงรายการพร็อพเพอร์ตี้ ที่คัดสรรมาแล้ว รวมถึง การ Dump ข้อมูลโปรโตคอล ของพร็อพเพอร์ตี้เลเยอร์ทั้งหมดที่พร้อมใช้งาน ดูข้อมูลเพิ่มเติม เกี่ยวกับฟีเจอร์ของส่วนการ Dump ข้อมูลโปรโตคอลได้ที่ พร็อพเพอร์ตี้
พร็อพเพอร์ตี้ที่คัดสรรมาแล้ว
โปรแกรมดู SurfaceFlinger มีรายการพร็อพเพอร์ตี้ที่ดูแลจัดการมาแล้ว ซึ่งแสดงข้อมูลที่ใช้กันโดยทั่วไปในรูปแบบที่เป็นระเบียบมากขึ้น เพื่อให้การแก้ไขข้อบกพร่องง่ายขึ้น
รูปที่ 2 พร็อพเพอร์ตี้ SurfaceFlinger
รายการนี้มีหมวดหมู่ต่อไปนี้
การมองเห็น
บล็อกนี้มีข้อมูลเกี่ยวกับระดับการแชร์ของเลเยอร์และคำอธิบายว่าเหตุใดจึงมองไม่เห็น โดยมีข้อมูลต่อไปนี้
แฟล็ก: แฟล็กเหล่านี้ควบคุมระดับการแชร์ เช่น
HIDDENและOPAQUEเหตุผลที่มองไม่เห็น: คำอธิบายว่าเหตุใดเลเยอร์หรือพื้นผิวจึงมองไม่เห็นบนหน้าจอ (หากมี) เช่น ถูกซ่อนโดยตัวเลเยอร์เองหรือเลเยอร์ระดับบน หรือไม่มีบัฟเฟอร์ที่จะวาด
Occluded, Partially Occluded หรือ Covered:
- Occluded: ระบบคำนวณว่าเลเยอร์ปัจจุบันมองเห็นได้ แต่เลเยอร์ทึบแสงอีกเลเยอร์หนึ่งวาดทับเลเยอร์ปัจจุบัน ทำให้เลเยอร์ปัจจุบันมองไม่เห็น เลเยอร์เหนือเลเยอร์ Occluded เป็นเลเยอร์ทึบแสง นั่นคือมีการตั้งค่าแฟล็ก
OPAQUEหรือรูปแบบพิกเซลไม่มีอัลฟ่า หรือไม่มีการตั้งค่าอัลฟ่าในเลเยอร์ - Partially Occluded: เลเยอร์ปัจจุบันมองเห็นได้บางส่วนเนื่องจากเลเยอร์ทึบแสงที่วาดทับเลเยอร์ปัจจุบันไม่ได้ครอบคลุมเลเยอร์ปัจจุบันทั้งหมด เลเยอร์เหนือเลเยอร์ Partially Occluded เป็นเลเยอร์ทึบแสง นั่นคือมีการตั้งค่าแฟล็ก
OPAQUEหรือรูปแบบพิกเซลไม่มีอัลฟ่า หรือไม่มีการตั้งค่าอัลฟ่าในเลเยอร์ Covered: เลเยอร์ปัจจุบันถูกเลเยอร์ที่ไม่ทึบแสงครอบคลุมทั้งหมดหรือบางส่วน และอาจยังคงมองเห็นได้บนหน้าจอ เลเยอร์เหนือเลเยอร์ Covered ไม่ทึบแสง นั่นคือไม่ได้ตั้งค่าแฟล็ก
OPAQUEหรือรูปแบบพิกเซลมีอัลฟ่า หรือมีการตั้งค่าอัลฟ่าในเลเยอร์ อย่างไรก็ตาม สำหรับการติดตาม SurfaceFlinger ระบบจะแสดงเลเยอร์ Covered เป็นเลเยอร์ที่มองเห็นได้สำหรับเลเยอร์ที่อยู่ใต้ SurfaceFlinger
รูปที่ 3 เลเยอร์ Covered ใน SurfaceFlinger
- Occluded: ระบบคำนวณว่าเลเยอร์ปัจจุบันมองเห็นได้ แต่เลเยอร์ทึบแสงอีกเลเยอร์หนึ่งวาดทับเลเยอร์ปัจจุบัน ทำให้เลเยอร์ปัจจุบันมองไม่เห็น เลเยอร์เหนือเลเยอร์ Occluded เป็นเลเยอร์ทึบแสง นั่นคือมีการตั้งค่าแฟล็ก
เรขาคณิตและเอฟเฟ็กต์
ส่วนนี้อธิบายเรขาคณิตและเอฟเฟ็กต์ที่ขอและคำนวณสำหรับเลเยอร์ปัจจุบัน
ส่วนที่ขอ จะแสดงพร็อพเพอร์ตี้ที่ตั้งค่าในเลเยอร์ ในทางตรงกันข้าม ส่วนที่คำนวณ จะแสดงพร็อพเพอร์ตี้ที่ใช้กับเลเยอร์ ความแตกต่างนี้เกิดขึ้นเนื่องจากเรขาคณิตและเอฟเฟ็กต์จะส่งต่อลงไปตามลำดับชั้นและรับค่ามาจากองค์ประกอบระดับบน
ในรูปที่ 2 เลเยอร์ขอให้ตั้งค่ารัศมีมุม เป็น 0 พิกเซล อย่างไรก็ตาม เลเยอร์ระดับบนเลเยอร์หนึ่งตั้งค่ารัศมีมุม เป็น 97.419 พิกเซล ซึ่งเป็นค่าที่ใช้
บัฟเฟอร์
พร็อพเพอร์ตี้ต่อไปนี้จะแสดงข้อมูลว่าเลเยอร์มีบัฟเฟอร์ ขนาด และการแปลงหรือไม่
- หมายเลขเฟรม: ตัวเลขที่เพิ่มขึ้นเรื่อยๆ โดยเริ่มเมื่อมีการสร้างแอป
- เฟรมปลายทาง: ใช้เพื่อปรับขนาดบัฟเฟอร์ให้มีขอบเขตตามที่กำหนดโดยเฟรมปลายทาง
ลำดับชั้น
พร็อพเพอร์ตี้ต่อไปนี้อธิบายวิธีกำหนดลำดับชั้นของเลเยอร์
- ลำดับ Z: ในลำดับชั้นของเลเยอร์ การจัดลำดับ Z จะกำหนดตำแหน่งสัมพัทธ์ของเลเยอร์เมื่อเทียบกับเลเยอร์ที่อยู่ระดับเดียวกัน เลเยอร์ที่มีค่า Z เป็น 0 จะอยู่ในตำแหน่งเหนือเลเยอร์ระดับบน หากเลเยอร์หลายเลเยอร์มีค่า Z เดียวกัน ระบบจะวางเลเยอร์ที่มีรหัสเลเยอร์สูงกว่าไว้ด้านบน
- ระดับบนสัมพัทธ์: ระบุเลเยอร์ระดับบนสัมพัทธ์ในลำดับ Z เลเยอร์ย่อยจะไม่รับค่าพร็อพเพอร์ตี้ใดๆ จากเลเยอร์ระดับบนสัมพัทธ์ ยกเว้นแฟล็กที่ซ่อนอยู่
อินพุต
พร็อพเพอร์ตี้ต่อไปนี้มีข้อมูลเกี่ยวกับภูมิภาคที่สัมผัสได้และโฟกัส
- ครอบตัดภูมิภาคที่สัมผัสได้ด้วยรายการ: ใช้ขอบเขตเลเยอร์เพื่อครอบตัดภูมิภาคที่สัมผัสได้
- แทนที่ภูมิภาคที่สัมผัสได้ด้วยการครอบตัด: ใช้การครอบตัดเลเยอร์ปัจจุบันเป็นภูมิภาคที่สัมผัสได้