Hardware Composer HAL

يحدّد Hardware Composer (HWC) HAL الطريقة الأكثر فعالية لدمج المخازن المؤقتة باستخدام الأجهزة المتاحة. بما أنّه HAL، فإنّ تنفيذه خاص بالجهاز وعادةً ما يتم إجراؤه من قِبل الشركة المصنّعة لمعدّات عرض الشاشة الأصلية.

تتضح قيمة هذه الطريقة بسهولة عند أخذ مستويات التراكب في الاعتبار، والتي تدمج مخازن مؤقتة متعددة في أجهزة عرض الشاشة بدلاً من وحدة معالجة الرسومات. على سبيل المثال، لنفترض أنّ لديك هاتف Android عاديًا في الوضع العمودي، مع ظهور شريط الحالة في أعلى الشاشة وشريط التنقّل في أسفلها ومحتوى التطبيق في كل مكان آخر. يكون محتوى كل طبقة في مخازن مؤقتة منفصلة. يمكنك معالجة عملية الدمج باستخدام أيّ من الطريقتَين التاليتَين:

  • عرض محتوى التطبيق في مخزن مؤقت مؤقت، ثم عرض شريط الحالة فوقه، وشريط التنقّل فوق ذلك، وأخيرًا تمرير المخزن المؤقت المؤقت إلى أجهزة عرض الشاشة.
  • تمرير جميع المخازن المؤقتة الثلاثة إلى أجهزة عرض الشاشة وإعطاؤها تعليمات لقراءة البيانات من مخازن مؤقتة مختلفة لأجزاء مختلفة من الشاشة.

يمكن أن تكون الطريقة الأخيرة أكثر فعالية بشكل ملحوظ.

تختلف إمكانيات معالج عرض الشاشة بشكل كبير. قد يكون من الصعب التعبير عن عدد التراكبات، وما إذا كان يمكن تدوير الطبقات أو مزجها، والقيود المفروضة على تحديد الموضع والتداخل من خلال واجهة برمجة تطبيقات. لاستيعاب هذه الخيارات، يُجري HWC العمليات الحسابية التالية:

  1. يقدّم SurfaceFlinger إلى HWC قائمة كاملة بالطبقات ويسأل: "كيف تريد معالجة ذلك؟"
  2. يردّ HWC من خلال وضع علامة على كل طبقة على أنّها دمج الجهاز أو العميل.
  3. يتولّى SurfaceFlinger أيّ عميل، ويمرّر المخزن المؤقت الناتج إلى HWC، ويسمح لـ HWC بمعالجة الباقي.

بما أنّ مورّدي الأجهزة يمكنهم تخصيص رمز اتخاذ القرارات، من الممكن تحقيق أفضل أداء من كل جهاز.

قد تكون مستويات التراكب أقل فعالية من دمج GL عندما لا يتغيّر أي شيء على الشاشة. وينطبق ذلك بشكل خاص عندما يحتوي محتوى التراكب على وحدات بكسل شفافة ويتم مزج الطبقات المتداخلة. في مثل هذه الحالات، يمكن أن يطلب HWC دمج GLES لبعض الطبقات أو جميعها والاحتفاظ بالمخزن المؤقت المدمج. إذا طلب SurfaceFlinger دمج المجموعة نفسها من المخازن المؤقتة، يمكن أن يعرض HWC المخزن المؤقت المؤقت الذي تم دمجه سابقًا. يمكن أن يؤدي ذلك إلى تحسين عمر بطارية الجهاز غير النشط.

تتيح أجهزة Android عادةً أربعة مستويات تراكب. تؤدي محاولة دمج طبقات أكثر من التراكبات إلى استخدام النظام لدمج GLES لبعضها، ما يعني أنّ عدد الطبقات التي يستخدمها أحد التطبيقات يمكن أن يكون له تأثير قابل للقياس على استهلاك الطاقة والأداء.