इस पेज पर, ओवरड्रॉ के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि इसकी पहचान कैसे की जाती है और इसे कैसे कम या खत्म किया जा सकता है.
जब कोई ऐप्लिकेशन, एक ही फ़्रेम में एक पिक्सल को एक से ज़्यादा बार ड्रा करता है, तो इसे ओवरड्रॉ कहा जाता है. आम तौर पर, ओवरड्रॉ की ज़रूरत नहीं होती. इसलिए, इसे खत्म करना सबसे अच्छा होता है. ओवरड्रॉ, परफ़ॉर्मेंस से जुड़ी समस्या तब बनता है, जब यह उन पिक्सल को रेंडर करने में जीपीयू का समय बर्बाद करता है जो स्क्रीन पर दिखने वाले कॉन्टेंट में कोई योगदान नहीं देते.
ओवरड्रॉ के बारे में जानकारी
ओवरड्रॉ का मतलब है कि सिस्टम, रेंडरिंग के एक फ़्रेम में स्क्रीन पर किसी पिक्सल को कई बार ड्रा करता है. उदाहरण के लिए, अगर आपके पास यूज़र इंटरफ़ेस (यूआई) कार्ड का स्टैक है, तो हर कार्ड, उसके नीचे मौजूद कार्ड के एक हिस्से को छिपा देता है. हालांकि, सिस्टम को स्टैक में मौजूद कार्ड के छिपे हुए हिस्सों को भी ड्रा करना पड़ता है. ऐसा इसलिए होता है, क्योंकि स्टैक किए गए कार्ड, पेंटर के एल्गोरिदम के हिसाब से रेंडर किए जाते हैं. इसका मतलब है कि वे पीछे से आगे के क्रम में रेंडर होते हैं. रेंडरिंग के इस क्रम से, सिस्टम पारदर्शी ऑब्जेक्ट पर सही तरीके से अल्फ़ा ब्लेंडिंग लागू कर पाता है. जैसे, शैडो.
ओवरड्रॉ से जुड़ी समस्याएं ढूंढना
प्लेटफ़ॉर्म, ये टूल उपलब्ध कराता है. इनकी मदद से, यह पता लगाया जा सकता है कि ओवरड्रॉ की वजह से आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर असर पड़ रहा है या नहीं.
जीपीयू ओवरड्रॉ डीबग करने वाला टूल
जीपीयू ओवरड्रॉ डीबग करने वाला टूल, कलर-कोडिंग का इस्तेमाल करके यह दिखाता है कि आपका ऐप्लिकेशन, स्क्रीन पर हर पिक्सल को कितनी बार ड्रा करता है. यह संख्या जितनी ज़्यादा होगी, उतनी ही ज़्यादा संभावना है कि ओवरड्रॉ की वजह से आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर असर पड़ेगा.
ज़्यादा जानकारी के लिए, जीपीयू ओवरड्रॉ को विज़ुअलाइज़ करना लेख पढ़ें.
प्रोफ़ाइल जीपीयू रेंडरिंग टूल
प्रोफ़ाइल जीपीयू रेंडरिंग टूल, स्क्रोल करने वाले हिस्टोग्राम के तौर पर यह दिखाता है कि रेंडरिंग पाइपलाइन के हर स्टेज को एक फ़्रेम दिखाने में कितना समय लगता है. हर बार का प्रोसेस वाला हिस्सा, नारंगी रंग में दिखता है. इससे पता चलता है कि सिस्टम कब बफ़र स्वैप कर रहा है. यह मेट्रिक, ओवरड्रॉ के बारे में अहम जानकारी देती है.
कम परफ़ॉर्मेंस वाले जीपीयू में, उपलब्ध फ़िल-रेट कम हो सकता है. फ़िल-रेट का मतलब है कि जीपीयू, फ़्रेम बफ़र को कितनी तेज़ी से भर सकता है. किसी फ़्रेम को ड्रा करने के लिए ज़रूरी पिक्सल की संख्या बढ़ने पर, जीपीयू को नए निर्देश प्रोसेस करने में ज़्यादा समय लग सकता है. साथ ही, वह सिस्टम के बाकी हिस्सों को तब तक इंतज़ार करने के लिए कह सकता है, जब तक वह नए निर्देशों को प्रोसेस न कर ले. प्रोसेस बार में, यह स्पाइक तब दिखता है, जब जीपीयू, पिक्सल को ज़्यादा से ज़्यादा तेज़ी से ड्रा करने की कोशिश में ओवरलोड हो जाता है. सिर्फ़ पिक्सल की संख्या की वजह से ही नहीं, बल्कि अन्य समस्याओं की वजह से भी इस मेट्रिक में स्पाइक आ सकता है. उदाहरण के लिए, अगर जीपीयू ओवरड्रॉ डीबग करने वाला टूल, ज़्यादा ओवरड्रॉ दिखाता है और प्रोसेस में स्पाइक दिखता है, तो इसका मतलब है कि ओवरड्रॉ से जुड़ी कोई समस्या है.
ज़्यादा जानकारी के लिए, प्रोफ़ाइल जीपीयू रेंडरिंग की स्पीड लेख पढ़ें.
ओवरड्रॉ की समस्या ठीक करना
ओवरड्रॉ को कम करने या खत्म करने के लिए, ये काम किए जा सकते हैं:
- लेआउट में मौजूद, गै़र-ज़रूरी बैकग्राउंड हटाएं.
- पारदर्शिता कम करें.
इस सेक्शन में, इन दोनों तरीकों के बारे में जानकारी दी गई है.
लेआउट में मौजूद, गै़र-ज़रूरी बैकग्राउंड हटाएं
डिफ़ॉल्ट रूप से, किसी लेआउट में कोई बैकग्राउंड नहीं होता. इसका मतलब है कि वह सीधे तौर पर कुछ भी रेंडर नहीं करता. हालांकि, जब लेआउट में बैकग्राउंड होते हैं, तो वे ओवरड्रॉ में योगदान दे सकते हैं.
गै़र-ज़रूरी बैकग्राउंड हटाकर, रेंडरिंग की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. जैसे, ऐसा बैकग्राउंड जो दिखता नहीं है, क्योंकि ऐप्लिकेशन उस पर जो भी ड्रा कर रहा है उससे वह पूरी तरह से कवर हो गया है. उदाहरण के लिए, चाइल्ड Box या
मॉडिफ़ायर वाला लेआउट.background, पैरंट कंटेनर के
बैकग्राउंड को पूरी तरह से कवर कर सकता है. इससे पैरंट का ड्रॉइंग पास, उपयोगकर्ता को पूरी तरह से नहीं दिखता.
हालांकि, जीपीयू उसे पूरी तरह से प्रोसेस करता है.
ओवरड्रॉ की वजह जानने के लिए, लेआउट इंस्पेक्टर टूल में कॉम्पोनेंट ट्री देखें. ऐसे बैकग्राउंड देखें जो उपयोगकर्ता को नहीं दिखते और उन्हें हटाएं. गै़र-ज़रूरी बैकग्राउंड को उन सभी जगहों से भी हटाया जा सकता है जहां एक ही बैकग्राउंड कलर शेयर करने वाले कई कंटेनर मौजूद हैं. विंडो के बैकग्राउंड को अपने ऐप्लिकेशन के मुख्य बैकग्राउंड कलर पर सेट करें. साथ ही, इसके ऊपर मौजूद सभी कंटेनर के लिए, बैकग्राउंड की कोई वैल्यू तय न करें.
पारदर्शिता कम करें
स्क्रीन पर पारदर्शी पिक्सल रेंडर करना, जिसे अल्फ़ा रेंडरिंग कहा जाता है, ओवरड्रॉ की एक मुख्य वजह है. स्टैंडर्ड ओवरड्रॉ के उलट, जब सिस्टम अपारदर्शी पिक्सल ड्रा करके, पहले से ड्रा किए गए पिक्सल को पूरी तरह से छिपा देता है, तो पारदर्शी ऑब्जेक्ट के लिए, पहले से मौजूद पिक्सल को पहले ड्रा करना पड़ता है, ताकि सही ब्लेंडिंग इक्वेशन हो सके.
पारदर्शी एनिमेशन, फ़ेड-आउट, और ड्रॉप शैडो जैसे विज़ुअल इफ़ेक्ट में कुछ पारदर्शिता शामिल होती है. इसलिए, ये ओवरड्रॉ में काफ़ी योगदान दे सकते हैं. इन स्थितियों में, रेंडर किए जाने वाले पारदर्शी ऑब्जेक्ट की संख्या कम करके, ओवरड्रॉ को बेहतर बनाया जा सकता है. उदाहरण के लिए,
a Text कंपोज़ेबल में काले रंग का टेक्स्ट ड्रा करके और modifier
= Modifier.alpha(0.5f) का इस्तेमाल करके, पारदर्शी अल्फ़ा वैल्यू लागू करके, ग्रे रंग का टेक्स्ट पाया जा सकता है. हालांकि, कंपोज़ेबल के टेक्स्ट कलर को सीधे तौर पर अपारदर्शी ग्रे पर सेट करके, बेहतर परफ़ॉर्मेंस के साथ वही इफ़ेक्ट पाया जा सकता है: color = Color.Black.copy(alpha = 0.5f).
पूरी ड्रॉइंग पाइपलाइन में पारदर्शिता की वजह से होने वाले परफ़ॉर्मेंस खर्च के बारे में ज़्यादा जानने के लिए, Hidden Costs of Transparency वीडियो देखें.