AIDL لطبقة HAL في Hardware Composer

بدءًا من الإصدار 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.

بسبب المزايا التي تقدّمها لغة تعريف واجهة نظام Android ‏(AIDL)، ننصح المورّدين بتنفيذ واجهة برمجة التطبيقات لمؤلف AIDL HAL اعتبارًا من بدء استخدام الإصدار 13 من Android بدلاً من إصدار 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. يقدّم ذلك واجهة ثابتة للأوامر وتعريفًا أكثر سهولة للطريقة التي تتم بهاinterpretedتحميل الحمولة للأوامر.

    يتم تعريف طريقة executeCommands في IComposerClient.aidl على النحو التالي:

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    حيث يكون كل أمر من النوع parcelable المحدَّد في DisplayCommand.aidl. ردود الأوامر هي عناصر قابلة للتقسيم ذات أنواع محدّدة بدقة تم تحديدها في CommandResultPayload.aidl.

  • إزالة IComposerClient.getClientTargetSupport بسبب عدم توفُّر عملاء نشطين لهذه الطريقة

  • تمثيل الألوان كأرقام عائمة بدلاً من وحدات بايت لمواءمة أفضل مع حزمة الرسومات العلوية في Android كما هو محدّد في ASurfaceTransaction_setColor.

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

    في AIDL HAL، تتيح حزم الطبقات المختلطة بتقنية النطاق العادي الديناميكية/النطاق العالي الديناميكية تعتيم طبقات النطاق العادي الديناميكية بسلاسة عندما تكون طبقة النطاق العالي الديناميكية معروضة على الشاشة في الوقت نفسه.

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

يتم تنفيذ التطبيق المرجعي لواجهة برمجة التطبيقات AIDL HWC HAL في محاكيات Android.

الاختبار

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