Hardware Composer HAL

हार्डवेयर कंपोज़र (एचडब्ल्यूसी) एचएएल, उपलब्ध हार्डवेयर के साथ बफ़र को कंपोज़ करने का सबसे असरदार तरीका तय करता है. HAL के तौर पर, इसे डिवाइस के हिसाब से लागू किया जाता है. आम तौर पर, इसे डिसप्ले हार्डवेयर OEM लागू करता है.

इस तरीके की वैल्यू को आसानी से पहचाना जा सकता है. इसके लिए, ओवरले प्लेन पर विचार करें. ये प्लेन, जीपीयू के बजाय डिसप्ले हार्डवेयर में कई बफ़र को कंपोज़िट करते हैं. उदाहरण के लिए, पोर्ट्रेट मोड में किसी सामान्य Android फ़ोन को लें. इसमें स्टेटस बार सबसे ऊपर, नेविगेशन बार सबसे नीचे, और ऐप्लिकेशन का कॉन्टेंट बाकी सभी जगहों पर होता है. हर लेयर का कॉन्टेंट अलग-अलग बफ़र में होता है. कंपोज़िशन को मैनेज करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल किया जा सकता है:

  • ऐप्लिकेशन के कॉन्टेंट को स्क्रैच बफ़र में रेंडर करना. इसके बाद, स्टेटस बार को उसके ऊपर रेंडर करना. इसके बाद, नेविगेशन बार को उसके ऊपर रेंडर करना. आखिर में, स्क्रैच बफ़र को डिसप्ले हार्डवेयर को पास करना.
  • तीनों बफ़र को डिसप्ले हार्डवेयर पर पास करना और उसे स्क्रीन के अलग-अलग हिस्सों के लिए, अलग-अलग बफ़र से डेटा पढ़ने का निर्देश देना.

बाद वाला तरीका ज़्यादा कारगर हो सकता है.

डिसप्ले प्रोसेसर की सुविधाएं अलग-अलग होती हैं. एपीआई के ज़रिए, ओवरले की संख्या, लेयर को घुमाया या ब्लेंड किया जा सकता है या नहीं, और पोज़िशनिंग और ओवरलैप से जुड़ी पाबंदियों के बारे में बताना मुश्किल हो सकता है. इन विकल्पों को शामिल करने के लिए, HWC ये कैलकुलेशन करता है:

  1. SurfaceFlinger, HWC को लेयर की पूरी सूची देता है और पूछता है, "आपको इसे कैसे हैंडल करना है?"
  2. HWC, हर लेयर को डिवाइस या क्लाइंट कंपोज़िशन के तौर पर मार्क करके जवाब देता है.
  3. SurfaceFlinger, किसी भी क्लाइंट का ध्यान रखता है. यह आउटपुट बफ़र को HWC को पास करता है और HWC को बाकी काम करने देता है.

हार्डवेयर वेंडर, फ़ैसले लेने वाले कोड को अपनी ज़रूरत के हिसाब से बना सकते हैं. इसलिए, हर डिवाइस से बेहतर परफ़ॉर्मेंस पाना मुमकिन है.

जब स्क्रीन पर कुछ भी नहीं बदल रहा होता है, तो ओवरले प्लेन, GL कंपोज़िशन की तुलना में कम असरदार हो सकते हैं. ऐसा खास तौर पर तब होता है, जब ओवरले कॉन्टेंट में पारदर्शी पिक्सल होते हैं और ओवरलैप होने वाली लेयर को मिलाया जाता है. ऐसे मामलों में, HWC कुछ या सभी लेयर के लिए GLES कंपोज़िशन का अनुरोध कर सकता है और कंपोज़िट किए गए बफ़र को बनाए रख सकता है. अगर SurfaceFlinger, बफ़र के एक ही सेट को कंपोज़िट करने के लिए कहता है, तो HWC पहले से कंपोज़िट किए गए स्क्रैच बफ़र को दिखा सकता है. इससे, इस्तेमाल न किए जा रहे डिवाइस की बैटरी लाइफ़ बेहतर हो सकती है.

Android डिवाइसों में आम तौर पर, चार ओवरले प्लेन काम करते हैं. ओवरले की तुलना में ज़्यादा लेयर कंपोज़िट करने की कोशिश करने पर, सिस्टम इनमें से कुछ के लिए GLES कंपोज़िशन का इस्तेमाल करता है. इसका मतलब है कि किसी ऐप्लिकेशन की ओर से इस्तेमाल की गई लेयर की संख्या, बैटरी की खपत और परफ़ॉर्मेंस पर असर डाल सकती है.