از Android 13، Hardware Composer (HWC) HAL
در AIDL تعریف میشود. نسخههای HIDL از
android.hardware.graphics.composer@2.1 تا
android.hardware.graphics.composer@2.4 منسوخ شدهاند.
این صفحه تفاوتهای بین AIDL و HIDL HAL را برای HWC توضیح میدهد، و نحوه پیادهسازی و آزمایش AIDL HAL را شرح میدهد.
ازآنجاییکه AIDL مزایایی ارائه میدهد، فروشندگان میتوانند HAL آهنگساز AIDL را از Android 13 بهجای نسخه HIDL پیادهسازی کنند. برای اطلاعات بیشتر، به بخش پیادهسازی مراجعه کنید.
تفاوت بین AIDL و HIDL 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تعریف شده است. پاسخهای فرمان بهشدت از نوع parcelable تعریفشده درCommandResultPayload.aidlهستند.برداشتن
IComposerClient.getClientTargetSupportچون هیچ مشتری فعالی از این روش استفاده نمیکند.نمایش رنگها بهصورت شناور بهجای بایت برای همتراز کردن با پشته گرافیک بالایی در Android، همانگونه که در
ASurfaceTransaction_setColorتعریف شده است.افزودن فیلدهای جدید برای کنترل محتوای HDR.
در AIDL HAL، پشتههای لایه مختلط SDR/HDR از کمنور شدن یکپارچه لایههای SDR هنگامی که لایه HDR همزمان روی صفحه است پشتیبانی میکنند.
فیلد
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 نیستند. بااینحال، به فروشندگان توصیه میشود بهجای نسخه HIDL، آهنگساز AIDL HAL را پیادهسازی کنند تا از عملکرد و APIهای آهنگساز AIDL HAL استفاده کنند.
شبیهسازهای Android شامل پیادهسازی مرجع برای AIDL HWC HAL است.
آزمایش
برای آزمایش پیادهسازیتان، VtsHalGraphicsComposer3_TargetTest را اجرا کنید.