از اندروید ۱۳ به بعد، HAL مربوط به Hardware Composer (HWC) در AIDL تعریف شده است. نسخههای HIDL از android.hardware.graphics.composer@2.1 تا android.hardware.graphics.composer@2.4 منسوخ شدهاند.
این صفحه تفاوتهای بین HALهای AIDL و HIDL برای HWC و نحوه پیادهسازی و آزمایش AIDL HAL را شرح میدهد.
از آنجا که AIDL مزایایی ارائه میدهد، فروشندگان میتوانند HAL آهنگساز AIDL را از اندروید ۱۳ به جای نسخه HIDL پیادهسازی کنند. برای اطلاعات بیشتر، به بخش پیادهسازی مراجعه کنید.
تفاوتهای بین AIDL و HIDL HAL
رابط برنامهنویسی AIDL جدید HAL با نام android.hardware.graphics.composer3 در IComposer.aidl تعریف شده است. این API مشابه HIDL HAL android.hardware.graphics.composer@2.4 است، اما شامل تغییرات زیر است:
حذف صف پیام سریع (FMQ) به نفع دستورات قابل تقسیم.
AIDL HAL رابط فرمان را بر اساس انواع بستهبندیشده با نوع قوی به جای دستورات سریالی شده روی FMQ در HIDL تعریف میکند. این یک رابط پایدار برای دستورات و تعریف خواناتر از نحوه تفسیر بار داده فرمان توسط سیستم فراهم میکند.
متد
executeCommands5 درIComposerClient.aidlتعریف شده است:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);هر دستور یک نوع parcelable با نوع قوی است که در
DisplayCommand.aidlتعریف شده است. پاسخهای دستور نیز parcelableهای با نوع قوی هستند که درCommandResultPayload.aidlتعریف شدهاند.حذف
IComposerClient.getClientTargetSupportزیرا هیچ کلاینت فعالی از این متد استفاده نمیکند.نمایش رنگها به صورت اعشاری به جای بایت برای همترازی با پشته گرافیکی بالایی در اندروید، همانطور که توسط
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برگردانند. این ساختار enumهایPixelFormatوAlphaInterpretationمورد نیاز دستگاه را توصیف میکند. پس از این پیادهسازی، رابط کاربری سیستم، لایه ماسک آلفا را به عنوانDISPLAY_DECORATIONعلامتگذاری میکند، یک نوع ترکیب که از سختافزار اختصاصی بهره میبرد.افزودن فیلد
expectedPresentTimeبهDisplayCommand.aidl.فیلد
expectedPresentTimeبه SurfaceFlinger اجازه میدهد تا زمان حال مورد انتظار برای نمایش محتوای فعلی روی صفحه را تنظیم کند. با این ویژگی، SurfaceFlinger یک دستور حال را از قبل به پیادهسازی ارسال میکند که به آن اجازه میدهد تا کارهای بیشتری از ترکیببندی را به صورت پایپلاین انجام دهد.اضافه شدن API های جدید برای کنترل پیکربندی نمایش بوت.
با استفاده از
BOOT_DISPLAY_CONFIG، فروشندگان میتوانند مشخص کنند که پیکربندی نمایش بوت پشتیبانی میشود. متدهایsetBootDisplayConfig،clearBootDisplayConfigوgetPreferredBootDisplayConfigازBOOT_DISPLAY_CONFIGبه شرح زیر استفاده میکنند:با استفاده از
setBootDisplayConfig، این چارچوب، پیکربندی نمایش زمان بوت را به فروشندگان اطلاع میدهد. فروشندگان باید پیکربندی نمایش بوت را در حافظه پنهان (cache) ذخیره کنند و در راهاندازی مجدد بعدی، این پیکربندی را بوت کنند. اگر دستگاه قادر به بوت شدن در این پیکربندی نباشد، فروشنده باید پیکربندیای پیدا کند که با وضوح و نرخ بهروزرسانی این پیکربندی مطابقت داشته باشد. اگر چنین پیکربندی وجود نداشته باشد، فروشنده باید از پیکربندی نمایش ترجیحی خود استفاده کند.این چارچوب با استفاده از
clearBootDisplayConfigبه فروشندگان اطلاع میدهد که پیکربندی نمایش بوت را پاک کنند و در راهاندازی مجدد بعدی، پیکربندی نمایش دلخواه خود را بوت کنند.با استفاده از
getPreferredBootDisplayConfig، این فریمورک حالت بوت ترجیحی فروشنده را جستجو میکند.
وقتی پیکربندی نمایش بوت پشتیبانی نشود، این متدها مقدار
UNSUPPORTEDرا برمیگردانند.اضافه شدن API های جدید برای کنترل تایمر خاموشی صفحه نمایش:
با استفاده از
DISPLAY_IDLE_TIMER، فروشندگان میتوانند مشخص کنند که یک تایمر عدم فعالیت توسط فروشنده برای این نمایشگر پیادهسازی شده است. در حالت غیرفعال، این قابلیت نرخ تازهسازی را برای صرفهجویی در مصرف انرژی به تنظیمات پایینتری تغییر میدهد. این پلتفرم ازsetIdleTimerEnabledبرای کنترل زمان انقضای تایمر و در برخی موارد، برای غیرفعال کردن آن به منظور جلوگیری از تغییر ناخواسته نرخ تازهسازی در حالت غیرفعال استفاده میکند.استفاده از فراخوانی
IComposerCallback.onVsyncIdleبه پلتفرم نشان میدهد که نمایشگر در حالت غیرفعال است و آهنگvsyncتغییر کرده است. پلتفرم با تنظیم مجدد مدلvsyncخود به این فراخوانی پاسخ میدهد. این فراخوانی، همگامسازی مجددvsyncرا در فریم بعدی اعمال میکند و آهنگvsyncجدید را یاد میگیرد.
پیادهسازی
فروشندگان ملزم به پیادهسازی AIDL HAL برای اندروید ۱۳ نیستند. با این حال، به فروشندگان توصیه میشود که به جای نسخه HIDL ، AIDL composer HAL را پیادهسازی کنند تا از قابلیتها و APIهای AIDL composer HAL استفاده کنند.
شبیهسازهای اندروید شامل یک پیادهسازی مرجع برای AIDL HWC HAL هستند.
آزمایش
برای آزمایش پیادهسازی خود، VtsHalGraphicsComposer3_TargetTest را اجرا کنید.