از اندروید ۱۳ به بعد، 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 تعریف میکند. این یک رابط پایدار برای دستورات و تعریف خواناتر از نحوه تفسیر بار داده فرمان توسط سیستم فراهم میکند.
متد
executeCommands
5 در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
را اجرا کنید.