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