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