เริ่มตั้งแต่ Android 13 เป็นต้นไป Hardware Composer (HWC) HAL ได้รับการกำหนดไว้ใน AIDL และเวอร์ชัน HIDL ตั้งแต่ android.hardware.graphics.composer@2.1
ถึง android.hardware.graphics.composer@2.4
จะเลิกใช้งานแล้ว
หน้านี้อธิบายความแตกต่างระหว่าง AIDL และ HIDL HAL สำหรับ HWC และการนำไปใช้และการทดสอบ AIDL HAL
เนื่องจาก ข้อดี ที่ AIDL นำเสนอ ผู้ขายจึงได้รับการสนับสนุนให้ใช้ HAL ผู้แต่ง AIDL ซึ่งเริ่มตั้งแต่ Android 13 แทนเวอร์ชัน HIDL ดูส่วน การใช้งาน สำหรับข้อมูลเพิ่มเติม
ความแตกต่างระหว่าง AIDL และ HIDL HAL
HAL นักแต่งเพลง AIDL ใหม่ ชื่อ android.hardware.graphics.composer3
ถูกกำหนดไว้ใน IComposer.aidl
โดยจะเปิดเผย API ที่คล้ายกับ HIDL HAL android.hardware.graphics.composer@2.4
โดยมีการเปลี่ยนแปลงต่อไปนี้:
การลบ Fast Message Queue (FMQ) ออกเพื่อสนับสนุนคำสั่งแบบแยกส่วน
AIDL HAL กำหนดอินเทอร์เฟซคำสั่งตามประเภทพัสดุที่พิมพ์อย่างยิ่ง ซึ่งตรงข้ามกับคำสั่งแบบอนุกรมผ่าน FMQ ใน HIDL นี่เป็นอินเทอร์เฟซที่เสถียรสำหรับคำสั่งและคำจำกัดความที่อ่านได้ง่ายขึ้นเกี่ยวกับวิธีการตีความเพย์โหลดคำสั่ง
วิธีการ
executeCommands
ถูกกำหนดไว้ในIComposerClient.aidl
เป็นCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
โดยที่แต่ละคำสั่งเป็นประเภทที่พิมพ์แบบพัสดุได้อย่างมากซึ่งกำหนดไว้ใน
DisplayCommand.aidl
การตอบกลับคำสั่งจะต้องพิมพ์แบบพัสดุที่กำหนดไว้อย่างยิ่งในCommandResultPayload.aidl
ลบ
IComposerClient.getClientTargetSupport
เนื่องจากไม่มีไคลเอ็นต์ที่ใช้งานอยู่สำหรับวิธีนี้การแสดงสีเป็นแบบลอยแทนที่จะเป็นไบต์เพื่อให้สอดคล้องกับสแต็กกราฟิกส่วนบนใน Android ได้ดีขึ้นตามที่กำหนดไว้ใน
ASurfaceTransaction_setColor
เพิ่มฟิลด์ใหม่สำหรับการควบคุมเนื้อหา HDR
ใน AIDL HAL เลเยอร์ SDR/HDR แบบผสมจะรองรับการลดแสงของเลเยอร์ SDR ได้อย่างราบรื่น เมื่อเลเยอร์ HDR ปรากฏพร้อมกันบนหน้าจอ
ฟิลด์
brightness
ในLayerCommand
ช่วยให้ SurfaceFlinger ระบุความสว่างต่อเลเยอร์ เพื่อให้ HWC ลดแสงเนื้อหาของเลเยอร์ในพื้นที่แสงเชิงเส้น เมื่อเทียบกับพื้นที่แกมมาฟิลด์
brightness
ในClientTargetPropertyWithBrightness
ช่วยให้ HWC ระบุพื้นที่ความสว่างสำหรับองค์ประกอบของไคลเอ็นต์ และสั่งRenderEngine
ว่าจะหรี่เลเยอร์ SDR ในองค์ประกอบของไคลเอ็นต์หรือไม่ฟิลด์
dimmingStage
ช่วยให้ HWC กำหนดค่าเมื่อRenderEngine
ควรหรี่เนื้อหา ซึ่งรองรับColorModes
ที่ผู้ขายกำหนด ซึ่งอาจต้องการหรี่แสงในพื้นที่แกมมา เพื่อให้สามารถปรับปรุงคอนทราสต์ที่ผู้ขายกำหนดในไปป์ไลน์สีของตนได้การเพิ่มประเภทองค์ประกอบใหม่
DISPLAY_DECORATION
ในComposition.aidl
สำหรับการตกแต่งหน้าจออุปกรณ์บางตัวมีฮาร์ดแวร์เฉพาะเพื่อเพิ่มประสิทธิภาพการวาดอัลฟ่ามาสก์เพื่อทำให้มุมโค้งมนและรอยตัดบนจอแสดงผลเรียบเนียน อุปกรณ์ที่มีฮาร์ดแวร์ดังกล่าวต้องใช้
IComposerClient.getDisplayDecorationSupport
เพื่อส่งคืนโครงสร้างDisplayDecorationSupport
ตามที่กำหนดไว้ในDisplayDecorationSupport.aidl
ใหม่ โครงสร้างนี้อธิบายการแจงนับPixelFormat
และAlphaInterpretation
ที่อุปกรณ์ต้องการ เมื่อมีการนำไปใช้นี้ UI ของระบบจะทำเครื่องหมายเลเยอร์อัลฟ่ามาสก์เป็นDISPLAY_DECORATION
ซึ่งเป็นประเภทองค์ประกอบใหม่ที่ใช้ประโยชน์จากฮาร์ดแวร์เฉพาะการเพิ่มฟิลด์
expectedPresentTime
ใหม่ให้กับDisplayCommand.aidl
ฟิลด์
expectedPresentTime
ช่วยให้ SurfaceFlinger ตั้งเวลาปัจจุบันที่คาดไว้ว่าจะต้องแสดงเนื้อหาปัจจุบันบนหน้าจอเมื่อใด ด้วยคุณสมบัตินี้ SurfaceFlinger จะส่งคำสั่งปัจจุบันไปยังการใช้งานล่วงหน้า ซึ่งช่วยให้สามารถไปป์ไลน์งานองค์ประกอบได้มากขึ้นการเพิ่ม API ใหม่เพื่อควบคุมการกำหนดค่าการแสดงผลการบูต
การใช้
BOOT_DISPLAY_CONFIG
ผู้จำหน่ายสามารถระบุได้ว่ารองรับการกำหนดค่าการแสดงผลการบูต เมธอดsetBootDisplayConfig
,clearBootDisplayConfig
และgetPreferredBootDisplayConfig
ใช้BOOT_DISPLAY_CONFIG
ดังต่อไปนี้:การใช้
setBootDisplayConfig
เฟรมเวิร์กจะแจ้งให้ผู้จำหน่ายทราบเกี่ยวกับการกำหนดค่าการแสดงเวลาบูต ผู้จำหน่ายจะต้องแคชในการกำหนดค่าการแสดงผลการบูต และบูตในการกำหนดค่านี้เมื่อรีบูตครั้งถัดไป หากอุปกรณ์ไม่สามารถบูตได้ในการกำหนดค่านี้ ผู้จำหน่ายจะต้องค้นหาการกำหนดค่าที่ตรงกับความละเอียดและอัตราการรีเฟรชของการกำหนดค่านี้ หากไม่มีการกำหนดค่าดังกล่าว ผู้จำหน่ายควรใช้การกำหนดค่าการแสดงผลที่ต้องการเมื่อใช้
clearBootDisplayConfig
เฟรมเวิร์กจะแจ้งให้ผู้จำหน่ายล้างการกำหนดค่าการแสดงผลการบูต และบูตในการกำหนดค่าการแสดงผลที่ต้องการในระหว่างการรีบูตครั้งถัดไปการใช้
getPreferredBootDisplayConfig
เฟรมเวิร์กจะสอบถามโหมดการบูตที่ผู้ขายต้องการ
เมื่อไม่รองรับการกำหนดค่าการแสดงผลการบูต วิธีการเหล่านี้จะส่งคืนค่า
UNSUPPORTED
เพิ่ม API ใหม่เพื่อควบคุมตัวจับเวลาการแสดงผลที่ไม่ได้ใช้งาน
การใช้
DISPLAY_IDLE_TIMER
ผู้ขายสามารถระบุได้ว่าผู้ขายจะใช้ตัวจับเวลาการไม่ใช้งานสำหรับจอแสดงผลนี้ เมื่อไม่ได้ใช้งาน ความสามารถนี้จะเปลี่ยนอัตราการรีเฟรชเป็นการตั้งค่าที่ต่ำลงเพื่อรักษาพลังงาน แพลตฟอร์มนี้ใช้setIdleTimerEnabled
เพื่อควบคุมการหมดเวลาของตัวจับเวลา และในบางกรณี เพื่อปิดการใช้งานเพื่อป้องกันการเปลี่ยนอัตราการรีเฟรชที่ไม่ต้องการเมื่อไม่ได้ใช้งานการใช้การโทรกลับ
IComposerCallback.onVsyncIdle
จะระบุแพลตฟอร์มว่าจอแสดงผลไม่ได้ใช้งานและจังหวะvsync
มีการเปลี่ยนแปลง แพลตฟอร์มตอบสนองต่อการโทรกลับนี้โดยการรีเซ็ตโมเดลvsync
โดยบังคับให้ซิงค์vsync
ซ้ำในเฟรมถัดไป และเรียนรู้จังหวะvsync
ใหม่
การนำไปปฏิบัติ
ผู้จำหน่ายไม่จำเป็นต้องใช้ AIDL HAL สำหรับ Android 13 อย่างไรก็ตาม เราขอแนะนำให้ใช้ AIDL composer HAL แทนเวอร์ชัน HIDL เพื่อใช้ฟังก์ชันการทำงานและ API ใหม่
การใช้งานอ้างอิง สำหรับ AIDL HWC HAL ถูกนำมาใช้ในโปรแกรมจำลอง Android
การทดสอบ
หากต้องการทดสอบการใช้งานของคุณ ให้รัน VtsHalGraphicsComposer3_TargetTest