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

หน้านี้จะอธิบายว่าการแสดงพิกเซลซ้ำคืออะไร วิธีวินิจฉัย และวิธีลดหรือกำจัดการแสดงพิกเซลซ้ำ

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

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

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

ค้นหาปัญหาการแสดงพิกเซลซ้ำ

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

เครื่องมือแก้ปัญหาการแสดงพิกเซลซ้ำด้วย GPU

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

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

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

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

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

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

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

คุณสามารถทำสิ่งต่อไปนี้เพื่อลดหรือกำจัดการแสดงพิกเซลซ้ำ

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

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

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

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

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

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

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

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

เอฟเฟกต์ภาพ เช่น ภาพเคลื่อนไหวโปร่งใส การจางหาย และเงาตกทอดเกี่ยวข้องกับความโปร่งใสบางส่วน จึงอาจทำให้เกิดการแสดงพิกเซลซ้ำอย่างมาก คุณสามารถปรับปรุงการแสดงพิกเซลซ้ำในสถานการณ์เหล่านี้ได้โดยการลดจำนวนออบเจ็กต์โปร่งใสที่แสดงผล ตัวอย่างเช่น คุณสามารถสร้างข้อความสีเทาได้โดยการวาดข้อความสีดำใน คอมโพสเซเบิล Text และใช้ค่าอัลฟ่าโปร่งแสงโดยใช้ modifier = Modifier.alpha(0.5f) อย่างไรก็ตาม คุณสามารถสร้างเอฟเฟกต์เดียวกันได้ด้วยประสิทธิภาพที่ดีขึ้นโดยการตั้งค่าสีข้อความของคอมโพสเซเบิลเป็นสีเทาทึบแสงโดยตรง color = Color.Black.copy(alpha = 0.5f)

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