بدءًا من الإصدار 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. ويوفّر ذلك واجهة ثابتة للأوامر وتعريفًا أكثر قابلية للقراءة حول طريقة تفسير النظام لحِمل الأمر.
يتم تعريف طريقة
executeCommands5 في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وgetPreferredBootDisplayConfigBOOT_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.