ตั้งแต่ 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
เนื่องจาก ข้อได้เปรียบของ 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
ซึ่งมีการเปลี่ยนแปลงต่อไปนี้
การนำ 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
ช่วยให้ SurfaceFlinger ระบุความสว่างต่อเลเยอร์ เพื่อให้ HWC หรี่แสง เนื้อหาของเลเยอร์ในพื้นที่แสงเชิงเส้น ซึ่งตรงกันข้ามกับช่องว่างของแกมมาฟิลด์
brightness
ในClientTargetPropertyWithBrightness
ช่วยให้ HWC สามารถระบุพื้นที่ความสว่างสำหรับองค์ประกอบของไคลเอ็นต์ แนะนำRenderEngine
ต้องการหรี่เลเยอร์ SDR ในการจัดวางไคลเอ็นต์หรือไม่dimmingStage
ช่วยให้ HWC กำหนดค่าว่าRenderEngine
ควรหรี่แสงเนื้อหาเมื่อใด ช่วงเวลานี้ รองรับColorModes
ที่กำหนดโดยผู้ให้บริการ ซึ่งอาจต้องการหรี่แสงในแกมมา เพื่อให้เพิ่มคอนทราสต์ที่ผู้ให้บริการกำหนดในไปป์ไลน์สีได้การเพิ่มประเภทการเรียบเรียงใหม่
DISPLAY_DECORATION
ในComposition.aidl
สำหรับตกแต่งหน้าจออุปกรณ์บางรุ่นมีฮาร์ดแวร์เฉพาะเพื่อการเพิ่มประสิทธิภาพการวาดมาสก์อัลฟ่าที่ ทำให้มุมโค้งมนและรอยบากบนจอแสดงผลเรียบเนียน อุปกรณ์ที่มีฮาร์ดแวร์ดังกล่าวจะต้อง ใช้
IComposerClient.getDisplayDecorationSupport
เพื่อแสดงโครงสร้างDisplayDecorationSupport
ตามที่ระบุไว้ในฟิลด์DisplayDecorationSupport.aidl
โครงสร้างนี้จะอธิบายถึงPixelFormat
และAlphaInterpretation
enum ที่อุปกรณ์ต้องใช้ จากการติดตั้งใช้งานนี้ 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
Callback จะระบุไปยังแพลตฟอร์มว่าจอแสดงผลไม่มีการใช้งานและvsync
จังหวะการก็เปลี่ยนไป แพลตฟอร์มจะตอบสนองต่อ Callback นี้โดยการรีเซ็ต รุ่นvsync
ซึ่งจะบังคับให้vsync
ซิงค์อีกครั้งในเฟรมถัดไป และเรียนรู้พารามิเตอร์ แผนการสนทนาvsync
การใช้งาน
ผู้ให้บริการไม่จำเป็นต้องติดตั้งใช้งาน AIDL HAL สำหรับ Android 13 อย่างไรก็ตาม ก็ควรนำ AIDL มาใช้ HAL ของผู้ประพันธ์เพลงแทนที่จะเป็นเวอร์ชัน HIDL เพื่อใช้ฟังก์ชันการทำงานและ API ใหม่
การใช้งานข้อมูลอ้างอิง สำหรับ AIDL HWC HAL มีการใช้ในโปรแกรมจำลอง Android
การทดสอบ
หากต้องการทดสอบการใช้งาน ให้เรียกใช้ VtsHalGraphicsComposer3_TargetTest