ตั้งแต่ Android 13 เป็นต้นไป HAL ของ Hardware Composer (HWC) จะกำหนดไว้ใน 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
โดยมีการเปลี่ยนแปลงดังนี้
การนำคิวข้อความด่วน (FMQ) ออก เพื่อใช้คำสั่งที่ส่งผ่านได้
HAL ของ AIDL จะกำหนดอินเทอร์เฟซคำสั่งตามประเภทที่ส่งผ่านได้ ซึ่งมีการพิมพ์อย่างเข้มงวด ซึ่งแตกต่างจากคำสั่งที่แปลงเป็นอนุกรมผ่าน FMQ ใน HIDL ซึ่งจะ มีอินเทอร์เฟซที่เสถียรสำหรับคำสั่งและคำจำกัดความที่อ่านง่ายขึ้นเกี่ยวกับวิธี ตีความเพย์โหลดของคำสั่ง
วิธีการ
executeCommands
กำหนดไว้ในIComposerClient.aidl
ดังนี้CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
โดยแต่ละคำสั่งจะเป็นประเภทที่ส่งผ่านได้ที่กำหนดไว้อย่างชัดเจนใน
DisplayCommand.aidl
การตอบกลับคำสั่งเป็นพัสดุที่กำหนดประเภทอย่างเคร่งครัดซึ่งกำหนดไว้ในCommandResultPayload.aidl
การนำ
IComposerClient.getClientTargetSupport
ออกเนื่องจากไม่มีไคลเอ็นต์ที่ใช้งานอยู่สำหรับวิธีการนี้การแสดงสีเป็น Float แทนไบต์เพื่อให้สอดคล้องกับ สแต็กกราฟิกที่สูงกว่าใน 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
ใหม่ โครงสร้างนี้อธิบาย enumPixelFormat
และAlphaInterpretation
ที่อุปกรณ์ต้องการ เมื่อติดตั้งใช้งานแล้ว UI ของระบบจะทําเครื่องหมายเลเยอร์มาสก์อัลฟ่าเป็นDISPLAY_DECORATION
ซึ่งเป็นประเภทการคอมโพสิตใหม่ที่ใช้ประโยชน์จากฮาร์ดแวร์เฉพาะเพิ่มฟิลด์
expectedPresentTime
ใหม่ลงในDisplayCommand.aidl
ฟิลด์
expectedPresentTime
ช่วยให้ SurfaceFlinger ตั้งเวลาปัจจุบันที่คาดไว้เป็นเวลาที่ต้องแสดงเนื้อหาปัจจุบันบนหน้าจอ ฟีเจอร์นี้ช่วยให้ SurfaceFlinger ส่งคำสั่งนำเสนอไปยังการติดตั้งใช้งานล่วงหน้าได้ ซึ่งช่วยให้สามารถจัดเรียงงานการจัดองค์ประกอบได้มากขึ้นเพิ่ม API ใหม่เพื่อควบคุมการกำหนดค่าการแสดงผลการบูต
การใช้
BOOT_DISPLAY_CONFIG
ผู้ให้บริการสามารถระบุว่าระบบรองรับการกำหนดค่าการแสดงผลการบูต เมธอดsetBootDisplayConfig
clearBootDisplayConfig
และgetPreferredBootDisplayConfig
ใช้BOOT_DISPLAY_CONFIG
ดังนี้setBootDisplayConfig
เฟรมเวิร์กจะแจ้งให้ผู้ให้บริการทราบถึงการกำหนดค่าการแสดงเวลาบูต ผู้ให้บริการ ต้องแคชในการกำหนดค่าการแสดงผลการบูต และบูตในการกำหนดค่านี้ในการรีบูตครั้งถัดไป หากอุปกรณ์บูตในการกำหนดค่านี้ไม่ได้ ผู้จำหน่ายต้องค้นหา การกำหนดค่าที่ตรงกับความละเอียดและอัตราการรีเฟรชของการกำหนดค่านี้ หากไม่มี config ดังกล่าว ผู้ให้บริการควรใช้การกำหนดค่าการแสดงผลที่ต้องการการใช้
clearBootDisplayConfig
กรอบงานจะแจ้งให้ผู้ให้บริการล้างการกำหนดค่าการแสดงผลขณะบูต และ บูตในการกำหนดค่าการแสดงผลที่ต้องการระหว่างการรีบูตครั้งถัดไปเมื่อใช้
getPreferredBootDisplayConfig
เฟรมเวิร์กจะค้นหาโหมดการบูตที่ผู้ให้บริการต้องการ
เมื่อระบบไม่รองรับการกำหนดค่าจอแสดงผลขณะบูต วิธีการเหล่านี้จะแสดงค่า
UNSUPPORTED
เพิ่ม API ใหม่เพื่อควบคุมตัวจับเวลาการทำงานที่ไม่ได้ใช้งานของจอแสดงผล
การใช้
DISPLAY_IDLE_TIMER
ผู้ให้บริการสามารถระบุว่าผู้ให้บริการเป็นผู้ใช้ตัวจับเวลาการไม่มีการใช้งานสำหรับ จอแสดงผลนี้ เมื่อไม่มีการใช้งาน ความสามารถนี้จะเปลี่ยนอัตราการรีเฟรชเป็นการตั้งค่าที่ต่ำกว่า เพื่อประหยัดพลังงาน แพลตฟอร์มใช้setIdleTimerEnabled
เพื่อควบคุมการหมดเวลาของตัวจับเวลา และในบางกรณีเพื่อปิดใช้ เพื่อป้องกันการสลับอัตราการรีเฟรชที่ไม่ต้องการเมื่อไม่มีการใช้งานการใช้แฮนเดิล
IComposerCallback.onVsyncIdle
callback จะเป็นการระบุให้แพลตฟอร์มทราบว่าจอแสดงผลไม่ได้ใช้งานและvsync
cadence มีการเปลี่ยนแปลง แพลตฟอร์มจะตอบกลับการเรียกกลับนี้โดยการรีเซ็ตโมเดลvsync
ซึ่งจะบังคับให้vsync
ซิงค์อีกครั้งในเฟรมถัดไป และเรียนรู้vsync
จังหวะใหม่
การใช้งาน
ผู้ให้บริการไม่จำเป็นต้องใช้ AIDL HAL สำหรับ Android 13 อย่างไรก็ตาม เราขอแนะนำให้ใช้ HAL ของคอมโพสเซอร์ AIDL แทนเวอร์ชัน HIDL เพื่อใช้ฟังก์ชันการทำงานและ API ใหม่
การติดตั้งใช้งานอ้างอิง สำหรับ AIDL HWC HAL จะติดตั้งใช้งานในโปรแกรมจำลอง Android
การทดสอบ
หากต้องการทดสอบการใช้งาน ให้เรียกใช้ VtsHalGraphicsComposer3_TargetTest