HAL سازنده سختافزار (HWC) کارآمدترین روش برای ترکیب بافرها با سختافزار موجود را تعیین میکند. به عنوان یک HAL، پیادهسازی آن مختص دستگاه است و معمولاً توسط تولیدکننده سختافزار نمایشگر انجام میشود.
ارزش این رویکرد زمانی به راحتی قابل تشخیص است که صفحات پوششی را در نظر بگیرید، که چندین بافر را در سختافزار نمایشگر به جای GPU ترکیب میکنند. به عنوان مثال، یک تلفن اندرویدی معمولی را در جهت عمودی در نظر بگیرید که نوار وضعیت در بالا، نوار ناوبری در پایین و محتوای برنامه در همه جای دیگر قرار دارد. محتویات هر لایه در بافرهای جداگانه قرار دارند. میتوانید ترکیب را با استفاده از هر یک از روشهای زیر مدیریت کنید:
- رندر کردن محتوای برنامه در یک بافر خراش، سپس رندر کردن نوار وضعیت روی آن، نوار ناوبری روی آن، و در نهایت ارسال بافر خراش به سختافزار نمایشگر.
- ارسال هر سه بافر به سختافزار نمایشگر و دستور دادن به آن برای خواندن دادهها از بافرهای مختلف برای قسمتهای مختلف صفحه نمایش.
رویکرد دوم میتواند به طور قابل توجهی کارآمدتر باشد.
قابلیتهای پردازندههای نمایشگر به طور قابل توجهی متفاوت است. بیان تعداد لایههای روی هم، اینکه آیا لایهها قابلیت چرخش یا ترکیب دارند، و محدودیتهای مربوط به موقعیتیابی و همپوشانی از طریق API میتواند دشوار باشد. برای تطبیق با این گزینهها، HWC محاسبات زیر را انجام میدهد:
- SurfaceFlinger لیست کاملی از لایهها را در اختیار HWC قرار میدهد و میپرسد: «چگونه میخواهید این را مدیریت کنید؟»
- HWC با علامتگذاری هر لایه به عنوان دستگاه یا ترکیب کلاینت پاسخ میدهد.
- SurfaceFlinger از هر کلاینتی مراقبت میکند، بافر خروجی را به HWC ارسال میکند و اجازه میدهد HWC بقیه کارها را انجام دهد.
از آنجا که فروشندگان سختافزار میتوانند کد تصمیمگیری را به صورت سفارشی تنظیم کنند، میتوان از هر دستگاهی بهترین عملکرد را دریافت کرد.
صفحات پوششی ممکن است زمانی که هیچ چیزی روی صفحه نمایش تغییر نمیکند، نسبت به ترکیب GL کارایی کمتری داشته باشند. این امر به ویژه زمانی صادق است که محتوای پوششی دارای پیکسلهای شفاف باشد و لایههای همپوشانی با هم ترکیب شوند. در چنین مواردی، HWC میتواند ترکیب GLES را برای برخی یا همه لایهها درخواست کند و بافر ترکیبی را حفظ کند. اگر SurfaceFlinger درخواست ترکیب همان مجموعه بافرها را داشته باشد، HWC میتواند بافر خراش ترکیبی قبلی را نشان دهد. این میتواند عمر باتری یک دستگاه بیکار را بهبود بخشد.
دستگاههای اندروید معمولاً از چهار صفحه پوششی پشتیبانی میکنند. تلاش برای ترکیب لایههای بیشتر از تعداد لایههای پوششی باعث میشود سیستم برای برخی از آنها از ترکیب GLES استفاده کند، به این معنی که تعداد لایههای مورد استفاده توسط یک برنامه میتواند تأثیر قابل اندازهگیری بر مصرف برق و عملکرد داشته باشد.