AIDL لطبقة HAL في Hardware Composer

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

توضّح هذه الصفحة الاختلافات بين طبقتَي تجريد الأجهزة (HAL) المستندتَين إلى لغة تعريف واجهة Android (AIDL) ولغة تعريف واجهة HIDL بالنسبة إلى HWC، وكيفية تنفيذ طبقة تجريد الأجهزة المستندة إلى AIDL واختبارها.

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

الاختلافات بين طبقات تجريد الأجهزة AIDL وHIDL

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

  • إزالة قائمة انتظار الرسائل السريعة (FMQ) لصالح الأوامر القابلة للتجزئة

    يحدّد AIDL HAL واجهة الأوامر استنادًا إلى أنواع قابلة للتجزئة ذات كتابة قوية بدلاً من الأوامر المتسلسلة عبر FMQ في HIDL. ويوفّر ذلك واجهة ثابتة للأوامر وتعريفًا أكثر قابلية للقراءة حول طريقة تفسير النظام لحِمل الأمر.

    يتم تعريف طريقة executeCommands 5 في 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 composer HAL.

تتضمّن محاكيات Android تنفيذًا مرجعيًا لواجهة HAL الخاصة بـ HWC في AIDL.

الاختبار

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