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