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

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