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 الجديد ، المسمى 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 .