آهنگساز سخت افزار HAL

Hardware Composer (HWC) HAL کارآمدترین راه را برای بافرهای ترکیبی با سخت افزار موجود تعیین می کند. به عنوان یک HAL، پیاده سازی آن برای دستگاه خاص است و معمولاً توسط سخت افزار OEM نمایشگر انجام می شود.

وقتی صفحات همپوشانی را در نظر می گیریم که بافرهای متعددی را در سخت افزار نمایشگر به جای GPU ترکیب می کنند، ارزش این رویکرد آسان است. به عنوان مثال، یک تلفن اندرویدی معمولی را در جهت عمودی در نظر بگیرید، با نوار وضعیت در بالا، نوار ناوبری در پایین، و محتوای برنامه در هر جای دیگر. محتویات هر لایه در بافرهای جداگانه قرار دارد. می توانید ترکیب را با استفاده از یکی از روش های زیر مدیریت کنید:

  • رندر کردن محتوای برنامه در یک بافر اسکرچ، سپس رندر کردن نوار وضعیت روی آن، نوار ناوبری در بالای آن، و در نهایت ارسال بافر خراش به سخت افزار نمایشگر.
  • انتقال هر سه بافر به سخت افزار نمایشگر و دستور خواندن داده ها از بافرهای مختلف برای قسمت های مختلف صفحه.

رویکرد دوم می تواند به طور قابل توجهی کارآمدتر باشد.

قابلیت های پردازنده نمایشگر به طور قابل توجهی متفاوت است. بیان تعداد لایه‌ها، اعم از اینکه لایه‌ها را می‌توان چرخاند یا ترکیب کرد، و محدودیت‌ها در موقعیت‌یابی و همپوشانی ممکن است از طریق API دشوار باشد. برای تطبیق این گزینه ها، HWC محاسبات زیر را انجام می دهد:

  1. SurfaceFlinger لیست کاملی از لایه‌ها را در اختیار HWC قرار می‌دهد و از او می‌پرسد: "چگونه می‌خواهید این کار را انجام دهید؟"
  2. HWC با علامت گذاری هر لایه به عنوان ترکیب دستگاه یا مشتری پاسخ می دهد.
  3. SurfaceFlinger از هر کلاینت مراقبت می‌کند، بافر خروجی را به HWC می‌دهد و به HWC اجازه می‌دهد بقیه را مدیریت کند.

از آنجایی که فروشندگان سخت افزار می توانند کدهای تصمیم گیری را سفارشی کنند، می توان بهترین عملکرد را از هر دستگاهی دریافت کرد.

هنگامی که هیچ چیز روی صفحه تغییر نمی کند، صفحات روکش ممکن است نسبت به ترکیب GL کارایی کمتری داشته باشند. این امر به ویژه زمانی صادق است که محتویات همپوشانی دارای پیکسل‌های شفاف باشند و لایه‌های همپوشانی با هم ترکیب شوند. در چنین مواردی، HWC می تواند ترکیب GLES را برای برخی یا همه لایه ها درخواست کند و بافر ترکیبی را حفظ کند. اگر SurfaceFlinger بخواهد مجموعه ای از بافرها را ترکیب کند، HWC می تواند بافر خراش ترکیب شده قبلی را نشان دهد. این می تواند عمر باتری یک دستگاه بیکار را بهبود بخشد.

دستگاه های اندرویدی معمولاً از چهار صفحه همپوشانی پشتیبانی می کنند. تلاش برای ترکیب لایه‌های بیشتری نسبت به پوشش‌ها باعث می‌شود سیستم از ترکیب GLES برای برخی از آنها استفاده کند، به این معنی که تعداد لایه‌های استفاده شده توسط یک برنامه می‌تواند تأثیر قابل‌اندازه‌گیری بر مصرف انرژی و عملکرد داشته باشد.