ลดการแสดงพิกเซลซ้ำ

หน้านี้จะอธิบายว่าการวาดทับคืออะไร วิธีวินิจฉัย และวิธีขจัดหรือลดการวาดทับ

เมื่อแอปวาดพิกเซลเดียวกันมากกว่า 1 ครั้งภายในเฟรมเดียว เราจะเรียกการกระทำนี้ว่าการวาดทับ โดยปกติแล้วการวาดทับไม่จำเป็น และควรหลีกเลี่ยง การวาดทับ การวาดทับจะกลายเป็นปัญหาด้านประสิทธิภาพเมื่อเสียเวลา GPU ไปกับการแสดงผล พิกเซลที่ไม่ได้มีส่วนช่วยให้ผู้ใช้เห็นสิ่งที่อยู่บนหน้าจอ

เกี่ยวกับการแสดงพิกเซลซ้ำ

การวาดทับหมายถึงการที่ระบบวาดพิกเซลบนหน้าจอหลายครั้งในเฟรมเดียวของการแสดงผล เช่น หากคุณมีการ์ด UI ที่ซ้อนกันอยู่ การ์ดแต่ละใบจะซ่อนส่วนหนึ่งของการ์ดที่อยู่ด้านล่าง

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

ค้นหาปัญหาการวาดทับ

แพลตฟอร์มมีเครื่องมือต่อไปนี้ที่จะช่วยคุณพิจารณาว่าการวาดทับ ส่งผลต่อประสิทธิภาพของแอปหรือไม่

เครื่องมือแก้ไขข้อบกพร่องการแสดงพิกเซลซ้ำด้วย GPU

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

ดูข้อมูลเพิ่มเติมได้ที่แสดงภาพการวาดทับของ GPU

เครื่องมือการแสดงผล GPU ตามโปรไฟล์

เครื่องมือการแสดงผล GPU ของโปรไฟล์จะแสดงเวลาที่แต่ละขั้นตอนของไปป์ไลน์การแสดงผล ใช้ในการแสดงเฟรมเดียวเป็นฮิสโทแกรมแบบเลื่อน ส่วนกระบวนการ ของแต่ละแถบซึ่งระบุเป็นสีส้มจะแสดงเมื่อระบบสลับ บัฟเฟอร์ เมตริกนี้ให้ข้อมูลสำคัญเกี่ยวกับ Overdraw

ใน GPU ที่มีประสิทธิภาพต่ำกว่า อัตราการส่งผ่านข้อมูลที่ใช้ได้ ซึ่งก็คือความเร็วที่ GPU สามารถเติม เฟรมบัฟเฟอร์ได้ อาจต่ำ เมื่อจำนวนพิกเซลที่ต้องใช้ในการวาดเฟรมเพิ่มขึ้น GPU อาจใช้เวลาประมวลผลคำสั่งใหม่นานขึ้นและขอให้ส่วนอื่นๆ ของระบบรอจนกว่าจะประมวลผลได้ทัน แถบกระบวนการแสดงให้เห็นว่าการเพิ่มขึ้นนี้เกิดขึ้นเมื่อ GPU ทำงานหนักเกินไปในการพยายามวาดพิกเซลให้เร็วที่สุด ปัญหาอื่นๆ นอกเหนือจากจำนวนพิกเซลดิบอาจทำให้เมตริกนี้เพิ่มขึ้นอย่างรวดเร็วได้เช่นกัน เช่น หากเครื่องมือแก้ไขข้อบกพร่องการแสดงพิกเซลซ้ำด้วย GPU แสดงการแสดงพิกเซลซ้ำจำนวนมากและกระบวนการเพิ่มขึ้น แสดงว่าอาจมีปัญหาเกี่ยวกับการแสดงพิกเซลซ้ำ

ดูข้อมูลเพิ่มเติมได้ที่ความเร็วในการแสดงผล GPU ตามโปรไฟล์

แก้ไขการแสดงพิกเซลซ้ำ

คุณทำสิ่งต่อไปนี้ได้เพื่อลดหรือกำจัดการเบิกเกินบัญชี

  • นำพื้นหลังที่ไม่จำเป็นในเลย์เอาต์ออก
  • ลดลำดับชั้นของมุมมอง
  • ลดความโปร่งใส

ส่วนนี้จะให้ข้อมูลเกี่ยวกับแนวทางแต่ละอย่าง

นำพื้นหลังที่ไม่จำเป็นในเลย์เอาต์ออก

โดยค่าเริ่มต้น เลย์เอาต์จะไม่มีพื้นหลัง ซึ่งหมายความว่าจะไม่แสดงผล สิ่งใดๆ โดยตรงด้วยตัวเอง อย่างไรก็ตาม เมื่อเลย์เอาต์มีพื้นหลัง เลย์เอาต์นั้น อาจทำให้เกิดการวาดทับ

คุณปรับปรุงประสิทธิภาพการแสดงผลได้โดยการนำพื้นหลังที่ไม่จำเป็นออก พื้นหลังที่ไม่จำเป็นอาจไม่ปรากฏเนื่องจากถูก ทุกอย่างที่แอปวาดทับปิดไว้ทั้งหมด เช่น ระบบอาจ ปิดพื้นหลังขององค์ประกอบหลักทั้งหมดเมื่อวาดมุมมองขององค์ประกอบย่อยทับด้านบน

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

ลดลำดับชั้นการแสดงผล

เลย์เอาต์ที่ทันสมัยช่วยให้คุณซ้อนและวางเลเยอร์มุมมองเพื่อสร้างการออกแบบที่สวยงาม อย่างไรก็ตาม การทำเช่นนี้อาจทำให้ประสิทธิภาพลดลงเนื่องจากเกิดการวาดทับ โดยเฉพาะ ในสถานการณ์ที่ออบเจ็กต์มุมมองที่ซ้อนกันแต่ละรายการทึบแสง ซึ่งต้องวาดทั้งพิกเซลที่มองเห็นและมองไม่เห็นไปยังหน้าจอ

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

ลดความโปร่งใส

การแสดงผลพิกเซลโปร่งใสบนหน้าจอที่เรียกว่าการแสดงผลอัลฟ่าเป็นสาเหตุสำคัญที่ทำให้เกิดการวาดทับ การวาดทับมาตรฐานคือเมื่อระบบซ่อนพิกเซลที่วาดไว้ทั้งหมดโดยการวาดพิกเซลทึบแสงทับพิกเซลเหล่านั้น แต่การวาดทับแบบโปร่งใสต้องวาดพิกเซลที่มีอยู่ก่อนเพื่อให้สมการการผสมสีที่ถูกต้องเกิดขึ้นได้

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

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