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