AIDL สำหรับ HAL คอมโพสเซอร์ฮาร์ดแวร์

ตั้งแต่ 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