हार्डवेयर कंपोजर (एचडब्ल्यूसी) एचएएल, उपलब्ध हार्डवेयर के साथ बफ़र को कंपोज करने का सबसे असरदार तरीका तय करता है. एचएएल के तौर पर, इसे हर डिवाइस के लिए खास तौर पर लागू किया जाता है. आम तौर पर, डिसप्ले हार्डवेयर OEM की ओर से इसे लागू किया जाता है.
ओवरले प्लैन को ध्यान में रखते हुए, इस तरीके की अहमियत को आसानी से समझा जा सकता है. ये प्लैन, जीपीयू के बजाय डिसप्ले हार्डवेयर में कई बफ़र को कंपोज करते हैं. उदाहरण के लिए, पोर्ट्रेट ओरिएंटेशन में किसी सामान्य Android फ़ोन पर, सबसे ऊपर स्टेटस बार, सबसे नीचे नेविगेशन बार, और बाकी जगहों पर ऐप्लिकेशन कॉन्टेंट दिखता है. हर लेयर का कॉन्टेंट अलग-अलग बफ़र में होता है. कॉम्पोज़िशन को मैनेज करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल किया जा सकता है:
- ऐप्लिकेशन के कॉन्टेंट को स्क्रैच बफ़र में रेंडर करना. इसके बाद, उस पर स्टेटस बार और उसके ऊपर नेविगेशन बार रेंडर करना. आखिर में, स्क्रैच बफ़र को डिसप्ले हार्डवेयर पर भेजना.
- सभी तीनों बफ़र को डिसप्ले हार्डवेयर में पास करना और स्क्रीन के अलग-अलग हिस्सों के लिए अलग-अलग बफ़र से डेटा पढ़ने के लिए निर्देश देना.
दूसरा तरीका ज़्यादा असरदार हो सकता है.
डिसप्ले प्रोसेसर की सुविधाएं अलग-अलग होती हैं. एपीआई के ज़रिए, ओवरले की संख्या, लेयर को घुमाया या ब्लेंड किया जा सकता है या नहीं, और पोज़िशनिंग और ओवरलैप पर लगी पाबंदियों के बारे में बताना मुश्किल हो सकता है. इन विकल्पों को शामिल करने के लिए, एचडब्ल्यूसी ये कैलकुलेशन करता है:
- SurfaceFlinger, HWC को लेयर की पूरी सूची उपलब्ध कराता है और पूछता है, "आपको इसे कैसे मैनेज करना है?"
- HWC, हर लेयर को डिवाइस या क्लाइंट कॉम्पोज़िशन के तौर पर मार्क करके जवाब देता है.
- SurfaceFlinger किसी भी क्लाइंट की देखभाल करता है. इसके लिए, वह आउटपुट बफ़र को HWC को पास करता है और बाकी काम HWC को करने देता है.
हार्डवेयर वेंडर, फ़ैसला लेने के लिए अपने हिसाब से कोड बना सकते हैं. इसलिए, हर डिवाइस से सबसे अच्छी परफ़ॉर्मेंस मिल सकती है.
जब स्क्रीन पर कुछ भी नहीं बदलता, तो ओवरले प्लेन जीएल कंपोज़िशन से कम कुशल होते हैं. ऐसा तब होता है, जब ओवरले कॉन्टेंट में पारदर्शी पिक्सल हों और ओवरलैप होने वाली लेयर को ब्लेंड किया गया हो. ऐसे मामलों में, एचडब्ल्यूसी कुछ या सभी लेयर के लिए GLES कंपोज़िशन का अनुरोध कर सकता है और कंपोज़ किए गए बफ़र को बनाए रख सकता है. अगर SurfaceFlinger, बफ़र के एक ही सेट को कंपोज करने के लिए कहता है, तो HWC पहले से कंपोज किया गया स्क्रैच बफ़र दिखा सकता है. इससे, इस्तेमाल में न होने वाले डिवाइस की बैटरी लाइफ़ बेहतर हो सकती है.
Android डिवाइस में आम तौर पर, चार ओवरले प्लेन काम करते हैं. ओवरले की तुलना में ज़्यादा लेयर कंपोज़ करने से, सिस्टम इनमें से कुछ के लिए जीएलईएस कंपोज़िशन का इस्तेमाल करता है. इसका मतलब है कि ऐप्लिकेशन कितनी लेयर का इस्तेमाल कर सकता है, इससे ऊर्जा की खपत और उसकी परफ़ॉर्मेंस पर काफ़ी असर पड़ सकता है.