لغة AIDL لـ HAL لمنشئ المحتوى

بدءًا من نظام Android 13، يتم تحديد HAL Composer (HWC) في وAIDL وإصدارات HIDL التي تتراوح بين من android.hardware.graphics.composer@2.1 إلى تم إيقاف android.hardware.graphics.composer@2.4 نهائيًا.

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

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

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

إنّ صاحب قناة HAL الجديد لمؤلف 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.

  • إضافة حقول جديدة للتحكّم في محتوى النطاق العالي الديناميكية

    في 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). HAL بدلاً من إصدار HIDL لاستخدام الوظائف الجديدة وواجهات برمجة التطبيقات.

تنفيذ مرجع لـ AIDL HWC HAL في محاكيات Android.

الاختبار

لاختبار عملية التنفيذ، شغِّل VtsHalGraphicsComposer3_TargetTest.