ตั้งแต่ Android 13 เป็นต้นไป ฮาร์ดแวร์ Composer (HWC) HAL จะกำหนดไว้ใน 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 กำหนดอินเทอร์เฟซคำสั่งโดยอิงตามประเภท Parcelable ประเภทที่พิมพ์ออกมาแรงมาก ซึ่งตรงข้ามกับคำสั่งแบบอนุกรมผ่าน 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
อัตราความถี่มีการเปลี่ยนแปลง แพลตฟอร์มจะตอบสนองต่อ Callback นี้โดยการรีเซ็ตโมเดลvsync
โดยจะบังคับให้vsync
ซิงค์ใหม่ในเฟรมถัดไป และเรียนรู้เกี่ยวกับรอบการทำงานvsync
ใหม่
การใช้งาน
ผู้ให้บริการไม่จำเป็นต้องใช้ AIDL HAL สำหรับ Android 13 อย่างไรก็ตาม ขอแนะนำให้ใช้ HAL สำหรับคอมโพสเซอร์ AIDL แทนเวอร์ชัน HIDL เพื่อใช้ฟังก์ชันและ API ใหม่
การใช้งานการอ้างอิงสำหรับ AIDL HWC HAL จะใช้ในโปรแกรมจำลองของ Android
การทดสอบ
หากต้องการทดสอบการใช้งาน ให้เรียกใช้ VtsHalGraphicsComposer3_TargetTest