SurfaceFlinger

การ Dump ข้อมูลของ SurfaceFlinger จะให้ภาพรวมของ SurfaceFlinger ณ เวลาที่เฉพาะเจาะจง การติดตาม SurfaceFlinger จะแสดงลำดับสถานะตามลำดับเวลา ซึ่งให้ข้อมูลเชิงลึกที่มีคุณค่าเกี่ยวกับลักษณะที่หน้าต่างปรากฏบนหน้าจอและกำหนดว่าหน้าต่างใดจะได้รับการตอบสนองต่อการสัมผัสในตำแหน่งที่เฉพาะเจาะจง ข้อมูลนี้ ช่วยคุณแก้ปัญหาต่างๆ เช่น แอปไม่ตอบสนองต่อการสัมผัสของฉัน หรือ ฉันพบอาการหน้าจอกระพริบขณะดูวิดีโอ

ใน Winscope โปรแกรมดู SurfaceFlinger จะแสดงข้อมูลนี้สำหรับการติดตามที่คุณรวบรวมโดยใช้โหมดแอ็กทีฟหรือสร้างจากการติดตามธุรกรรมเมื่อสร้างรายงานข้อบกพร่อง (ค่ากำหนดเริ่มต้นคือการกำหนดค่า Droidfood) รวมถึงสำหรับการ Dump ข้อมูล

ดูข้อมูลเพิ่มเติมเกี่ยวกับการรวบรวมการติดตามได้ที่ SurfaceFlinger (เลเยอร์)

การวิเคราะห์การติดตาม SurfaceFlinger

รูปที่ 1 การวิเคราะห์การติดตาม SurfaceFlinger

ด้านซ้ายของหน้าจอจะแสดงมุมมอง 3 มิติของเลเยอร์ มุมมอง Rects จะพิจารณาขอบเขตเลเยอร์ ลำดับ Z ความทึบแสง Z สัมพัทธ์ และมุมโค้ง

ชิปของลำดับชั้น

ส่วนกลางของแท็บจะแสดงลำดับชั้นของเลเยอร์พร้อมชิปสำหรับข้อมูลเพิ่มเติม เช่น ความสัมพันธ์ระดับบนสุดและระดับย่อยระหว่างเลเยอร์ ดังนี้

  • V: ระบุเลเยอร์ที่มองเห็นได้
  • RelZParent: ระบุเลเยอร์ที่มี RelZ เป็นเลเยอร์ย่อย
  • RelZ: ระบุเลเยอร์ที่มี RelZParent และวาดในลำดับ Z เป็น ลำดับชั้น
  • HWC: ระบุเลเยอร์ที่สร้างโดย Hardware Composer
  • GPU: ระบุเลเยอร์ที่สร้างโดย GPU

ด้านขวาของหน้าจอจะแสดงรายการพร็อพเพอร์ตี้ ที่คัดสรรมาแล้ว รวมถึง การ Dump ข้อมูลโปรโตคอล ของพร็อพเพอร์ตี้เลเยอร์ทั้งหมดที่พร้อมใช้งาน ดูข้อมูลเพิ่มเติม เกี่ยวกับฟีเจอร์ของส่วนการ Dump ข้อมูลโปรโตคอลได้ที่ พร็อพเพอร์ตี้

พร็อพเพอร์ตี้ที่คัดสรรมาแล้ว

โปรแกรมดู SurfaceFlinger มีรายการพร็อพเพอร์ตี้ที่ดูแลจัดการมาแล้ว ซึ่งแสดงข้อมูลที่ใช้กันโดยทั่วไปในรูปแบบที่เป็นระเบียบมากขึ้น เพื่อให้การแก้ไขข้อบกพร่องง่ายขึ้น

พร็อพเพอร์ตี้ SurfaceFlinger

รูปที่ 2 พร็อพเพอร์ตี้ SurfaceFlinger

รายการนี้มีหมวดหมู่ต่อไปนี้

การมองเห็น

บล็อกนี้มีข้อมูลเกี่ยวกับระดับการแชร์ของเลเยอร์และคำอธิบายว่าเหตุใดจึงมองไม่เห็น โดยมีข้อมูลต่อไปนี้

  • แฟล็ก: แฟล็กเหล่านี้ควบคุมระดับการแชร์ เช่น HIDDEN และ OPAQUE

  • เหตุผลที่มองไม่เห็น: คำอธิบายว่าเหตุใดเลเยอร์หรือพื้นผิวจึงมองไม่เห็นบนหน้าจอ (หากมี) เช่น ถูกซ่อนโดยตัวเลเยอร์เองหรือเลเยอร์ระดับบน หรือไม่มีบัฟเฟอร์ที่จะวาด

  • Occluded, Partially Occluded หรือ Covered:

    • Occluded: ระบบคำนวณว่าเลเยอร์ปัจจุบันมองเห็นได้ แต่เลเยอร์ทึบแสงอีกเลเยอร์หนึ่งวาดทับเลเยอร์ปัจจุบัน ทำให้เลเยอร์ปัจจุบันมองไม่เห็น เลเยอร์เหนือเลเยอร์ Occluded เป็นเลเยอร์ทึบแสง นั่นคือมีการตั้งค่าแฟล็ก OPAQUE หรือรูปแบบพิกเซลไม่มีอัลฟ่า หรือไม่มีการตั้งค่าอัลฟ่าในเลเยอร์
    • Partially Occluded: เลเยอร์ปัจจุบันมองเห็นได้บางส่วนเนื่องจากเลเยอร์ทึบแสงที่วาดทับเลเยอร์ปัจจุบันไม่ได้ครอบคลุมเลเยอร์ปัจจุบันทั้งหมด เลเยอร์เหนือเลเยอร์ Partially Occluded เป็นเลเยอร์ทึบแสง นั่นคือมีการตั้งค่าแฟล็ก OPAQUE หรือรูปแบบพิกเซลไม่มีอัลฟ่า หรือไม่มีการตั้งค่าอัลฟ่าในเลเยอร์
    • Covered: เลเยอร์ปัจจุบันถูกเลเยอร์ที่ไม่ทึบแสงครอบคลุมทั้งหมดหรือบางส่วน และอาจยังคงมองเห็นได้บนหน้าจอ เลเยอร์เหนือเลเยอร์ Covered ไม่ทึบแสง นั่นคือไม่ได้ตั้งค่าแฟล็ก OPAQUE หรือรูปแบบพิกเซลมีอัลฟ่า หรือมีการตั้งค่าอัลฟ่าในเลเยอร์ อย่างไรก็ตาม สำหรับการติดตาม SurfaceFlinger ระบบจะแสดงเลเยอร์ Covered เป็นเลเยอร์ที่มองเห็นได้สำหรับเลเยอร์ที่อยู่ใต้ SurfaceFlinger

      เลเยอร์ที่ซ้อนทับใน SurfaceFlinger

      รูปที่ 3 เลเยอร์ Covered ใน SurfaceFlinger

เรขาคณิตและเอฟเฟ็กต์

ส่วนนี้อธิบายเรขาคณิตและเอฟเฟ็กต์ที่ขอและคำนวณสำหรับเลเยอร์ปัจจุบัน

ส่วนที่ขอ จะแสดงพร็อพเพอร์ตี้ที่ตั้งค่าในเลเยอร์ ในทางตรงกันข้าม ส่วนที่คำนวณ จะแสดงพร็อพเพอร์ตี้ที่ใช้กับเลเยอร์ ความแตกต่างนี้เกิดขึ้นเนื่องจากเรขาคณิตและเอฟเฟ็กต์จะส่งต่อลงไปตามลำดับชั้นและรับค่ามาจากองค์ประกอบระดับบน

ในรูปที่ 2 เลเยอร์ขอให้ตั้งค่ารัศมีมุม เป็น 0 พิกเซล อย่างไรก็ตาม เลเยอร์ระดับบนเลเยอร์หนึ่งตั้งค่ารัศมีมุม เป็น 97.419 พิกเซล ซึ่งเป็นค่าที่ใช้

บัฟเฟอร์

พร็อพเพอร์ตี้ต่อไปนี้จะแสดงข้อมูลว่าเลเยอร์มีบัฟเฟอร์ ขนาด และการแปลงหรือไม่

  • หมายเลขเฟรม: ตัวเลขที่เพิ่มขึ้นเรื่อยๆ โดยเริ่มเมื่อมีการสร้างแอป
  • เฟรมปลายทาง: ใช้เพื่อปรับขนาดบัฟเฟอร์ให้มีขอบเขตตามที่กำหนดโดยเฟรมปลายทาง

ลำดับชั้น

พร็อพเพอร์ตี้ต่อไปนี้อธิบายวิธีกำหนดลำดับชั้นของเลเยอร์

  • ลำดับ Z: ในลำดับชั้นของเลเยอร์ การจัดลำดับ Z จะกำหนดตำแหน่งสัมพัทธ์ของเลเยอร์เมื่อเทียบกับเลเยอร์ที่อยู่ระดับเดียวกัน เลเยอร์ที่มีค่า Z เป็น 0 จะอยู่ในตำแหน่งเหนือเลเยอร์ระดับบน หากเลเยอร์หลายเลเยอร์มีค่า Z เดียวกัน ระบบจะวางเลเยอร์ที่มีรหัสเลเยอร์สูงกว่าไว้ด้านบน
  • ระดับบนสัมพัทธ์: ระบุเลเยอร์ระดับบนสัมพัทธ์ในลำดับ Z เลเยอร์ย่อยจะไม่รับค่าพร็อพเพอร์ตี้ใดๆ จากเลเยอร์ระดับบนสัมพัทธ์ ยกเว้นแฟล็กที่ซ่อนอยู่

อินพุต

พร็อพเพอร์ตี้ต่อไปนี้มีข้อมูลเกี่ยวกับภูมิภาคที่สัมผัสได้และโฟกัส

  • ครอบตัดภูมิภาคที่สัมผัสได้ด้วยรายการ: ใช้ขอบเขตเลเยอร์เพื่อครอบตัดภูมิภาคที่สัมผัสได้
  • แทนที่ภูมิภาคที่สัมผัสได้ด้วยการครอบตัด: ใช้การครอบตัดเลเยอร์ปัจจุบันเป็นภูมิภาคที่สัมผัสได้