HAL ของเครื่องมือแต่งเพลงฮาร์ดแวร์

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

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

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

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

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

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

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

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

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