นักแต่งเพลงฮาร์ดแวร์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 สำหรับบางเลเยอร์ ซึ่งหมายความว่าจำนวนเลเยอร์ที่แอปใช้อาจส่งผลต่อการใช้พลังงานและประสิทธิภาพที่วัดได้