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