ตั้งแต่ Android 13 เป็นต้นไป ระบบจะกำหนด HAL ของเครื่องมือแต่งภาพฮาร์ดแวร์ (HWC) ใน AIDL และเลิกใช้งาน HIDL เวอร์ชันตั้งแต่ android.hardware.graphics.composer@2.1
ถึง android.hardware.graphics.composer@2.4
หน้านี้อธิบายความแตกต่างระหว่าง AIDL กับ HIDL HAL สำหรับ HWC รวมถึงการติดตั้งใช้งานและการทดสอบ AIDL HAL
เราขอแนะนำให้ผู้ให้บริการติดตั้งใช้งาน HAL คอมโพเซอร์ AIDL ตั้งแต่ Android 13 เป็นต้นไปแทนเวอร์ชัน HIDL เนื่องจาก AIDL มีข้อดี ดูข้อมูลเพิ่มเติมได้ที่ส่วนการใช้งาน
ความแตกต่างระหว่าง 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
ช่วยให้คุณระบุความสว่างของแต่ละเลเยอร์ได้ เพื่อให้ HWC ปรับความสว่างของเนื้อหาเลเยอร์ในเชิงเส้น ไม่ใช่เชิงแกมมาฟิลด์
brightness
ในClientTargetPropertyWithBrightness
ช่วยให้คุณระบุพื้นที่ความสว่างสำหรับองค์ประกอบไคลเอ็นต์และสั่งให้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
callbacks บ่งบอกให้แพลตฟอร์มทราบว่าจอแสดงผลไม่มีการใช้งานและvsync
cadence มีการเปลี่ยนแปลง แพลตฟอร์มจะตอบสนองต่อการเรียกกลับนี้ด้วยการรีเซ็ตโมเดลvsync
ระบบจะบังคับให้vsync
ซิงค์ใหม่ในเฟรมถัดไป และเรียนรู้จังหวะvsync
ใหม่
การใช้งาน
ผู้ให้บริการไม่จำเป็นต้องใช้ AIDL HAL สำหรับ Android 13 อย่างไรก็ตาม เราขอแนะนำให้นักพัฒนาแอปใช้ HAL คอมโพเซอร์ AIDL แทนเวอร์ชัน HIDL เพื่อใช้ฟังก์ชันการทำงานและ API ใหม่
การใช้งานอ้างอิงสำหรับ AIDL HWC HAL ติดตั้งใช้งานในโปรแกรมจำลอง Android
การทดสอบ
หากต้องการทดสอบการใช้งาน ให้เรียกใช้ VtsHalGraphicsComposer3_TargetTest