ตั้งแต่ Android 13 เป็นต้นไป HAL ของ Hardware Composer (HWC)
จะกำหนดไว้ใน AIDL โดยเวอร์ชัน HIDL ตั้งแต่ android.hardware.graphics.composer@2.1 ถึง android.hardware.graphics.composer@2.4 จะเลิกใช้งานแล้ว
หน้านี้อธิบายความแตกต่างระหว่าง HAL ของ AIDL และ HIDL สำหรับ HWC รวมถึงวิธีติดตั้งใช้งานและทดสอบ HAL ของ AIDL
เนื่องจาก AIDL มี ข้อดีต่างๆ ผู้ให้บริการจึงสามารถติดตั้งใช้งาน HAL ของ Composer ใน AIDL ได้ตั้งแต่ Android 13 เป็นต้นไปแทนที่จะใช้เวอร์ชัน HIDL ดูข้อมูลเพิ่มเติมได้ที่ส่วนการติดตั้งใช้งาน Implementation
ความแตกต่างระหว่าง HAL ของ AIDL และ HIDL
HAL ของ Composer ใน AIDL ใหม่ชื่อ android.hardware.graphics.composer3 กำหนดไว้ใน IComposer.aidl โดย API จะคล้ายกับ HAL ของ HIDL android.hardware.graphics.composer@2.4 แต่มีการเปลี่ยนแปลงต่อไปนี้
นำ Fast Message Queue (FMQ) ออกและใช้คำสั่ง Parcelable แทน
HAL ของ AIDL กำหนดอินเทอร์เฟซคำสั่งตามประเภท Parcelable ที่มีการพิมพ์อย่างเข้มงวดแทนคำสั่งที่ซีเรียลไลซ์ผ่าน FMQ ใน HIDL ซึ่งจะมอบอินเทอร์เฟซที่เสถียรสำหรับคำสั่งและคำจำกัดความที่อ่านง่ายขึ้นเกี่ยวกับวิธีที่ระบบตีความเพย์โหลดของคำสั่ง
เมธอด
executeCommands5 กำหนดไว้ในIComposerClient.aidlดังนี้CommandResultPayload[] executeCommands(in DisplayCommand[] commands);แต่ละคำสั่งเป็นประเภท Parcelable ที่มีการพิมพ์อย่างเข้มงวดซึ่งกำหนดไว้ใน
DisplayCommand.aidlการตอบกลับคำสั่งเป็น Parcelable ที่มีการพิมพ์อย่างเข้มงวด ซึ่งกำหนดไว้ในCommandResultPayload.aidlนำ
IComposerClient.getClientTargetSupportออกเนื่องจากไม่มี ไคลเอ็นต์ที่ใช้งานอยู่ใช้เมธอดนี้แสดงสีเป็นค่า Float แทนไบต์เพื่อให้สอดคล้องกับสแต็กกราฟิกด้านบน ใน Android ตามที่กำหนดโดย
ASurfaceTransaction_setColorเพิ่มฟิลด์ใหม่สำหรับการควบคุมเนื้อหา HDR
ใน HAL ของ AIDL สแต็กเลเยอร์ 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และAlphaInterpretationEnum ที่อุปกรณ์ต้องใช้ หลังจากการติดตั้งใช้งานนี้ 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ใหม่
การติดตั้งใช้งาน
ผู้ให้บริการไม่จำเป็นต้องติดตั้งใช้งาน HAL ของ AIDL สำหรับ Android 13 อย่างไรก็ตาม เราขอแนะนำให้ผู้ให้บริการติดตั้งใช้งาน HAL ของ Composer ใน AIDL แทนเวอร์ชัน HIDL เพื่อใช้ฟังก์ชันการทำงานและ API ของ HAL ของ Composer ใน AIDL
โปรแกรมจำลอง Android มีการติดตั้งใช้งานอ้างอิงสำหรับ HAL ของ HWC ใน AIDL
การทดสอบ
หากต้องการทดสอบการติดตั้งใช้งาน ให้เรียกใช้ VtsHalGraphicsComposer3_TargetTest