ओवरड्रॉ कम करना

इस पेज पर बताया गया है कि ओवरड्रॉ क्या होता है, इसका पता कैसे लगाया जाता है, और इसे कैसे हटाया या कम किया जा सकता है.

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

ओवरड्रॉ के बारे में जानकारी

ओवरड्रॉ का मतलब है कि सिस्टम, रेंडरिंग के एक फ़्रेम में स्क्रीन पर किसी पिक्सल को कई बार ड्रॉ करता है. उदाहरण के लिए, अगर आपके पास स्टैक किए गए कई यूज़र इंटरफ़ेस (यूआई) कार्ड हैं, तो हर कार्ड उसके नीचे मौजूद कार्ड के कुछ हिस्से को छिपा देता है.

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

ओवरड्रॉ की समस्याओं का पता लगाना

यह प्लैटफ़ॉर्म, ओवरड्रॉ की वजह से आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर असर पड़ रहा है या नहीं, यह पता लगाने के लिए ये टूल उपलब्ध कराता है.

जीपीयू ओवरड्रॉ डीबग करने वाला टूल

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

ज़्यादा जानकारी के लिए, जीपीयू ओवरड्रॉ को विज़ुअलाइज़ करना लेख पढ़ें.

प्रोफ़ाइल जीपीयू रेंडरिंग टूल

प्रोफ़ाइल जीपीयू रेंडरिंग टूल, रेंडरिंग पाइपलाइन के हर चरण में एक फ़्रेम को डिसप्ले करने में लगने वाले समय को स्क्रोलिंग हिस्टोग्राम के तौर पर दिखाता है. हर बार का प्रोसेस हिस्सा, नारंगी रंग में दिखता है. इससे पता चलता है कि सिस्टम बफ़र कब स्वैप कर रहा है. यह मेट्रिक, ओवरड्रॉ के बारे में अहम जानकारी देती है.

कम परफ़ॉर्म करने वाले जीपीयू पर, उपलब्ध फ़िल-रेट कम हो सकता है. फ़िल-रेट वह स्पीड होती है जिस पर जीपीयू, फ़्रेम बफ़र को भर सकता है. किसी फ़्रेम को ड्रॉ करने के लिए ज़रूरी पिक्सल की संख्या बढ़ने पर, GPU को नए निर्देशों को प्रोसेस करने में ज़्यादा समय लग सकता है. साथ ही, वह सिस्टम के बाकी हिस्सों को तब तक इंतज़ार करने के लिए कह सकता है, जब तक वह प्रोसेस पूरी न कर ले. प्रोसेस बार में यह स्पाइक दिखता है. ऐसा इसलिए होता है, क्योंकि GPU पिक्सल को ज़्यादा से ज़्यादा तेज़ी से ड्रॉ करने की कोशिश करता है. पिक्सल की संख्या के अलावा, अन्य समस्याओं की वजह से भी इस मेट्रिक में अचानक बढ़ोतरी हो सकती है. उदाहरण के लिए, अगर Debug GPU Overdraw टूल में ज़्यादा ओवरड्रॉ और प्रोसेस में अचानक बढ़ोतरी दिखती है, तो हो सकता है कि ओवरड्रॉ से जुड़ी कोई समस्या हो.

ज़्यादा जानकारी के लिए, प्रोफ़ाइल जीपीयू रेंडरिंग की स्पीड देखें.

ओवरड्रॉ की समस्या ठीक करना

ओवरड्रॉ को कम करने या हटाने के लिए, यह तरीका अपनाएं:

  • लेआउट में मौजूद ग़ैर-ज़रूरी बैकग्राउंड हटाएं.
  • व्यू हैरारकी को फ़्लैट करें.
  • पारदर्शिता कम करो.

इस सेक्शन में, इन सभी तरीकों के बारे में जानकारी दी गई है.

लेआउट में मौजूद ग़ैर-ज़रूरी बैकग्राउंड हटाना

डिफ़ॉल्ट रूप से, लेआउट में कोई बैकग्राउंड नहीं होता. इसका मतलब है कि यह सीधे तौर पर कुछ भी रेंडर नहीं करता. हालांकि, अगर लेआउट में बैकग्राउंड होते हैं, तो वे ओवरड्रॉ में योगदान दे सकते हैं.

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

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

व्यू हैरारकी को फ़्लैट करना

मॉडर्न लेआउट की मदद से, व्यू को स्टैक और लेयर किया जा सकता है, ताकि सुंदर डिज़ाइन बनाया जा सके. हालांकि, ऐसा करने से परफ़ॉर्मेंस खराब हो सकती है. इसकी वजह यह है कि इससे ओवरड्रॉ हो सकता है. खास तौर पर, उन स्थितियों में जहां स्टैक किए गए हर व्यू ऑब्जेक्ट में ओपेक होता है. इसके लिए, स्क्रीन पर दिखने वाले और न दिखने वाले, दोनों पिक्सल को ड्रॉ करने की ज़रूरत होती है.

अगर आपको यह समस्या आती है, तो यूज़र इंटरफ़ेस (यूआई) ऑब्जेक्ट के ओवरलैप होने की संख्या कम करने के लिए, व्यू हैरारकी को ऑप्टिमाइज़ करें. इससे परफ़ॉर्मेंस बेहतर हो सकती है. ऐसा करने के तरीके के बारे में ज़्यादा जानने के लिए, परफ़ॉर्मेंस और व्यू हैरारकी लेख पढ़ें.

पारदर्शिता कम करें

स्क्रीन पर पारदर्शी पिक्सल रेंडर करने को अल्फ़ा रेंडरिंग कहा जाता है. यह ओवरड्रॉ का एक मुख्य कारण है. स्टैंडर्ड ओवरड्रॉ के उलट, पारदर्शी ऑब्जेक्ट के लिए मौजूदा पिक्सल को पहले ड्रा करना ज़रूरी होता है, ताकि सही ब्लेंडिंग इक्वेशन हो सके. स्टैंडर्ड ओवरड्रॉ में, सिस्टम मौजूदा पिक्सल को पूरी तरह से छिपा देता है. इसके लिए, वह उनके ऊपर अपारदर्शी पिक्सल ड्रा करता है.

पारदर्शी ऐनिमेशन, फ़ेड-आउट, और ड्रॉप शैडो जैसे विज़ुअल इफ़ेक्ट में कुछ पारदर्शिता होती है. इसलिए, ये ओवरड्रॉ में काफ़ी योगदान दे सकते हैं. इन स्थितियों में, रेंडर किए जाने वाले पारदर्शी ऑब्जेक्ट की संख्या कम करके, ओवरड्रॉ को बेहतर बनाया जा सकता है. उदाहरण के लिए, काले रंग के टेक्स्ट को TextView में बनाकर, स्लेटी रंग का टेक्स्ट बनाया जा सकता है. इसके लिए, TextView के लिए पारदर्शी ऐल्फ़ा वैल्यू सेट करनी होगी. हालांकि, टेक्स्ट को ग्रे रंग में लिखकर भी इसी तरह का इफ़ेक्ट पाया जा सकता है. इससे परफ़ॉर्मेंस भी बेहतर होती है.

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