AIDL لملف الأجهزة HAL

بدءًا من Android 13، تم تعريف HAL ​​لمؤلف الأجهزة (HWC) في AIDL وتم إهمال إصدارات HIDL التي تتراوح من android.hardware.graphics.composer@2.1 إلى android.hardware.graphics.composer@2.4 .

توضح هذه الصفحة الاختلافات بين AIDL وHIDL HAL لـ HWC وتنفيذ واختبار AIDL HAL.

نظرًا للمزايا التي تقدمها AIDL، يتم تشجيع البائعين على تنفيذ مؤلف AIDL HAL بدءًا من Android 13 بدلاً من إصدار HIDL. راجع قسم التنفيذ لمزيد من المعلومات.

الاختلافات بين AIDL وHIDL HALs

تم تعريف ملحن AIDL الجديد HAL، المسمى android.hardware.graphics.composer3 ، في IComposer.aidl . يعرض واجهة برمجة تطبيقات مشابهة لـ HIDL HAL android.hardware.graphics.composer@2.4 مع التغييرات التالية:

  • إزالة قائمة انتظار الرسائل السريعة (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 التي يتطلبها الجهاز. عند هذا التنفيذ، تحدد واجهة مستخدم النظام طبقة قناع ألفا على أنها DISPLAY_DECORATION ، وهو نوع تكوين جديد يستفيد من الأجهزة المخصصة.

  • إضافة حقل expectedPresentTime جديد إلى DisplayCommand.aidl .

    يتيح الحقل expectedPresentTime لـ SurfaceFlinger ضبط الوقت الحالي المتوقع عندما يجب عرض المحتوى الحالي على الشاشة. باستخدام هذه الميزة، يرسل SurfaceFlinger أمرًا حاليًا إلى التنفيذ مسبقًا، مما يسمح له بتوصيل المزيد من أعمال التركيب.

  • إضافة واجهات برمجة التطبيقات الجديدة للتحكم في تكوين عرض التمهيد.

    باستخدام BOOT_DISPLAY_CONFIG ، يمكن للبائعين تحديد أن تكوين عرض التمهيد مدعوم. تستخدم الطرق setBootDisplayConfig و clearBootDisplayConfig و getPreferredBootDisplayConfig BOOT_DISPLAY_CONFIG كما يلي:

    • باستخدام setBootDisplayConfig ، يقوم إطار العمل بإعلام البائعين بتكوين عرض وقت التمهيد. يجب أن يقوم البائعون بالتخزين المؤقت في تكوين عرض التمهيد، والتمهيد في هذا التكوين عند إعادة التشغيل التالية. إذا كان الجهاز غير قادر على التمهيد في هذا التكوين، فيجب على البائع العثور على تكوين يتوافق مع الدقة ومعدل التحديث لهذا التكوين. إذا لم يكن هناك مثل هذا التكوين، فيجب على البائع استخدام تكوين العرض المفضل لديه.

    • باستخدام clearBootDisplayConfig ، يقوم إطار العمل بإعلام البائعين بمسح تكوين عرض التمهيد، والتمهيد في تكوين العرض المفضل لديهم أثناء إعادة التشغيل التالية.

    • باستخدام getPreferredBootDisplayConfig ، يستعلم إطار العمل عن وضع التمهيد المفضل للبائع.

    عندما لا يكون تكوين شاشة التمهيد مدعومًا، تقوم هذه الطرق بإرجاع قيمة UNSUPPORTED .

  • إضافة واجهات برمجة التطبيقات الجديدة للتحكم في مؤقت خمول العرض.

    • باستخدام DISPLAY_IDLE_TIMER ، يمكن للبائعين تحديد أن البائع يقوم بتنفيذ مؤقت عدم النشاط لهذا العرض. عندما تكون هذه الإمكانية في وضع الخمول، تقوم بتغيير معدل التحديث إلى إعداد أقل للحفاظ على الطاقة. يستخدم النظام الأساسي setIdleTimerEnabled للتحكم في مهلة المؤقت، وفي بعض الحالات، لتعطيله لمنع تبديل معدل التحديث غير المرغوب فيه عندما يكون خاملاً.

    • يشير استخدام رد الاتصال IComposerCallback.onVsyncIdle للنظام الأساسي إلى أن شاشة العرض خاملة وأن إيقاع vsync قد تغير. يستجيب النظام الأساسي لرد الاتصال هذا عن طريق إعادة تعيين نموذج vsync الخاص به. إنه يفرض إعادة مزامنة vsync على الإطار التالي، ويتعلم إيقاع vsync الجديد.

تطبيق

لا يُطلب من البائعين تنفيذ AIDL HAL لنظام التشغيل Android 13. ومع ذلك، ننصحهم بتنفيذ AIDL Composer HAL بدلاً من إصدار HIDL لاستخدام الوظائف الجديدة وواجهات برمجة التطبيقات.

يتم تطبيق تطبيق مرجعي لـ AIDL HWC HAL في محاكيات Android.

اختبارات

لاختبار التنفيذ، قم بتشغيل VtsHalGraphicsComposer3_TargetTest .