นักแต่งเพลงฮาร์ดแวร์HAL

Hardware Composer (HWC) HAL กำหนดวิธีที่มีประสิทธิภาพสูงสุดในการผสมบัฟเฟอร์กับฮาร์ดแวร์ที่มีอยู่ ในฐานะที่เป็น HAL การนำไปใช้งานจะเป็นแบบเฉพาะอุปกรณ์และมักจะทำโดย OEM ฮาร์ดแวร์การแสดงผล

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

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

วิธีหลังสามารถมีประสิทธิภาพมากขึ้นอย่างมีนัยสำคัญ

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

  1. SurfaceFlinger ให้รายการเลเยอร์ทั้งหมดแก่ HWC และถามว่า "คุณต้องการจัดการกับสิ่งนี้อย่างไร"
  2. HWC ตอบสนองโดยทำเครื่องหมายแต่ละเลเยอร์เป็นอุปกรณ์หรือองค์ประกอบของไคลเอ็นต์
  3. SurfaceFlinger ดูแลไคลเอ็นต์ใดๆ โดยส่งบัฟเฟอร์เอาต์พุตไปยัง HWC และให้ HWC จัดการส่วนที่เหลือ

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

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

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