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

بدءًا من الإصدار 13 من نظام التشغيل Android، تم تحديد HAL لبرنامج Hardware Composer (HWC) في 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. تعرض واجهة برمجة التطبيقات واجهة برمجة تطبيقات مشابهة لـ 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 بتحديد مستوى سطوع لكل طبقة، بحيث يخفّض "العرض عالي الدقة" محتوى الطبقة في مساحة الإضاءة الخطية، بدلاً من مساحة جاما.

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

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

الاختبار

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