اعتبارًا من Android 13، يتم تحديد Hardware Composer (HWC) HAL
في AIDL. تم إيقاف إصدارات HIDL التي تتراوح بين android.hardware.graphics.composer@2.1 وandroid.hardware.graphics.composer@2.4.
توضّح هذه الصفحة الاختلافات بين AIDL وHIDL HALs لـ HWC، وكيفية تنفيذ AIDL HAL واختباره.
بما أنّ AIDL يقدّم مزايا، يمكن للمورّدين تنفيذ AIDL composer HAL بدءًا من Android 13 بدلاً من إصدار HIDL. لمزيد من المعلومات، يُرجى الاطّلاع على قسم التنفيذ.
الاختلافات بين AIDL وHIDL HALs
يتم تحديد AIDL composer HAL الجديد، الذي يُطلق عليه اسم android.hardware.graphics.composer3، في IComposer.aidl. تشبه واجهة برمجة التطبيقات HIDL HAL android.hardware.graphics.composer@2.4، ولكنها تتضمّن التغييرات التالية:
إزالة Fast Message Queue (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وgetPreferredBootDisplayConfigالسمةBOOT_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 تنفيذًا مرجعيًا لـ AIDL HWC HAL.
الاختبار
لاختبار التنفيذ، شغِّل VtsHalGraphicsComposer3_TargetTest.