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