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