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