Android में, डिवाइस पर काम करने वाले कुछ डेवलपर विकल्प शामिल होते हैं. इनकी मदद से, यह देखा जा सकता है कि आपका ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) को रेंडर करने में कहां समस्याओं का सामना कर रहा है. जैसे, ज़रूरत से ज़्यादा रेंडरिंग करना या लंबे थ्रेड और जीपीयू ऑपरेशन को एक्ज़ीक्यूट करना. इस पेज पर, जीपीयू ओवरड्रॉ को डीबग करने और जीपीयू रेंडरिंग की प्रोफ़ाइल बनाने का तरीका बताया गया है.
डिवाइस पर डेवलपर के लिए उपलब्ध विकल्पों के बारे में ज़्यादा जानने के लिए, डिवाइस पर डेवलपर के लिए उपलब्ध विकल्पों को कॉन्फ़िगर करना लेख पढ़ें. इसमें इन विकल्पों को चालू करने का तरीका भी बताया गया है.
जीपीयू रेंडरिंग की स्पीड की प्रोफ़ाइल बनाना
प्रोफ़ाइल जीपीयू रेंडरिंग टूल, स्क्रोल करने लायक हिस्टोग्राम के तौर पर यह दिखाता है कि यूज़र इंटरफ़ेस (यूआई) विंडो के फ़्रेम को रेंडर करने में कितना समय लगता है. यह समय, हर फ़्रेम के लिए 16.67 मि॰से॰ के बेंचमार्क के हिसाब से होता है.
कम पावर वाले जीपीयू पर, उपलब्ध फ़िल-रेट (वह स्पीड जिस पर जीपीयू फ़्रेम बफ़र को भर सकता है) काफ़ी कम हो सकता है. किसी फ़्रेम को ड्रॉ करने के लिए ज़रूरी पिक्सल की संख्या बढ़ने पर, जीपीयू को नए निर्देशों को प्रोसेस करने में ज़्यादा समय लग सकता है. साथ ही, वह सिस्टम के बाकी हिस्सों को तब तक इंतज़ार करने के लिए कह सकता है, जब तक वह निर्देशों को प्रोसेस न कर ले. प्रोफ़ाइलिंग टूल की मदद से, यह पता लगाया जा सकता है कि पिक्सल बनाने की कोशिश करते समय, GPU पर ज़्यादा लोड कब पड़ता है या उस पर ज़्यादा ओवरड्रॉ का बोझ कब पड़ता है.
प्रोफ़ाइलर चालू करना
शुरू करने से पहले, पक्का करें कि आपके पास Android 4.1 (एपीआई लेवल 16) या इसके बाद के वर्शन वाला डिवाइस हो. साथ ही, आपने डेवलपर के विकल्प चालू किए हों. अपने ऐप्लिकेशन का इस्तेमाल करते समय, डिवाइस के जीपीयू रेंडरिंग की प्रोफ़ाइलिंग शुरू करने के लिए, यह तरीका अपनाएं:
- अपने डिवाइस पर, सेटिंग में जाएं. इसके बाद, डेवलपर के लिए सेटिंग और टूल पर टैप करें.
- मॉनिटरिंग सेक्शन में जाकर, डिवाइस पर चल रहे Android के वर्शन के हिसाब से, प्रोफ़ाइल जीपीयू रेंडरिंग या प्रोफ़ाइल HWUI रेंडरिंग को चुनें.
- प्रोफ़ाइल जीपीयू रेंडरिंग डायलॉग में, स्क्रीन पर बार के तौर पर विकल्प चुनें, ताकि ग्राफ़ को अपने डिवाइस की स्क्रीन पर ओवरले किया जा सके.
- वह ऐप्लिकेशन खोलें जिसकी आपको प्रोफ़ाइल बनानी है.
आउटपुट की जांच करना
पहली इमेज में, प्रोफ़ाइल जीपीयू रेंडरिंग ग्राफ़ की बड़ी की गई इमेज दिखाई गई है. इसमें, Android 6.0 (एपीआई लेवल 23) पर दिखने वाला रंगीन सेक्शन देखा जा सकता है.
पहली इमेज. प्रोफ़ाइल जीपीयू रेंडरिंग का बड़ा किया गया ग्राफ़.
आउटपुट के बारे में यहां कुछ बातें बताई गई हैं:
- यह टूल, दिखने वाले हर ऐप्लिकेशन के लिए एक ग्राफ़ दिखाता है.
- हॉरिज़ॉन्टल ऐक्सिस पर मौजूद हर वर्टिकल बार, एक फ़्रेम को दिखाता है. साथ ही, हर वर्टिकल बार की ऊंचाई से पता चलता है कि फ़्रेम को रेंडर होने में कितना समय लगा. यह समय मिलीसेकंड में होता है.
- हॉरिज़ॉन्टल हरी लाइन, 16.67 मिलीसेकंड दिखाती है. 60 फ़्रेम प्रति सेकंड पाने के लिए, हर फ़्रेम के लिए वर्टिकल बार को इस लाइन से नीचे रहना होगा. जब भी कोई बार इस लाइन से आगे बढ़ता है, तो ऐनिमेशन में कुछ समय के लिए रुकावट आ सकती है.
- यह टूल, 16.67 मिलीसेकंड की सीमा से ज़्यादा समय लेने वाले फ़्रेम को हाइलाइट करता है. इसके लिए, वह बार को ज़्यादा चौड़ा और कम पारदर्शी बनाता है.
- हर बार में रंगीन कॉम्पोनेंट होते हैं. ये कॉम्पोनेंट, रेंडरिंग पाइपलाइन के किसी चरण से मैप होते हैं. डिवाइस के एपीआई लेवल के हिसाब से, कॉम्पोनेंट की संख्या अलग-अलग होती है.
यहां दी गई टेबल में, Android 6.0 और इसके बाद के वर्शन पर चलने वाले डिवाइस का इस्तेमाल करते समय, प्रोफ़ाइलर आउटपुट में वर्टिकल बार के हर सेगमेंट के बारे में बताया गया है.
बार का कॉम्पोनेंट | रेंडरिंग स्टेज | ब्यौरा |
---|---|---|
बफ़र स्वैप करना | इससे पता चलता है कि सीपीयू, जीपीयू के काम पूरा करने का इंतज़ार कर रहा है. अगर यह बार लंबा हो जाता है, तो इसका मतलब है कि ऐप्लिकेशन, GPU पर बहुत ज़्यादा काम कर रहा है. | |
कमांड से जुड़ी समस्या | इससे यह पता चलता है कि Android के 2D रेंडरर ने OpenGL को डिसप्ले लिस्ट बनाने और फिर से बनाने के लिए कितने समय तक निर्देश दिए. इस बार की ऊंचाई, हर डिसप्ले लिस्ट को एक्ज़ीक्यूट करने में लगने वाले समय के योग के हिसाब से तय होती है. ज़्यादा डिसप्ले लिस्ट होने पर, लाल रंग का बार लंबा हो जाता है. | |
सिंक और अपलोड करना | इससे पता चलता है कि बिटमैप की जानकारी को जीपीयू पर अपलोड होने में कितना समय लगता है. बड़े सेगमेंट से पता चलता है कि ऐप्लिकेशन, ज़्यादा ग्राफ़िक लोड करने में काफ़ी समय ले रहा है. | |
जगह बदलना | इससे व्यू की डिसप्ले सूचियां बनाने और अपडेट करने में लगने वाले समय के बारे में पता चलता है. अगर बार का यह हिस्सा लंबा है, तो हो सकता है कि कस्टम व्यू को बहुत ज़्यादा बार ड्रॉ किया गया हो या onDraw तरीकों में बहुत ज़्यादा काम किया गया हो. | |
मेज़रमेंट / लेआउट | इससे व्यू हैरारकी में, onLayout और onMeasure कॉलबैक पर खर्च किए गए समय के बारे में पता चलता है. बड़े सेगमेंट से पता चलता है कि व्यू हैरारकी को प्रोसेस होने में ज़्यादा समय लग रहा है. | |
इनपुट हैंडलिंग और ऐनिमेशन |
इससे पता चलता है कि उस फ़्रेम के लिए चलने वाले सभी ऐनिमेशन का आकलन करने और सभी इनपुट कॉलबैक को हैंडल करने में कितना समय लगा. अगर यह सेगमेंट बड़ा है, तो इसका मतलब यह हो सकता है कि कस्टम ऐनिमेटर या इनपुट कॉलबैक को प्रोसेस करने में बहुत ज़्यादा समय लग रहा है. स्क्रोलिंग के दौरान व्यू बाइंडिंग, जैसे कि
RecyclerView.Adapter.onBindViewHolder() ,
भी आम तौर पर इस सेगमेंट के दौरान होती है. साथ ही, इस सेगमेंट में धीमेपन की ज़्यादा सामान्य वजह होती है.
|
|
अन्य समय / VSync में देरी | इससे पता चलता है कि ऐप्लिकेशन को दो लगातार फ़्रेम के बीच ऑपरेशन पूरा करने में कितना समय लगता है. यह यूज़र इंटरफ़ेस (यूआई) थ्रेड में बहुत ज़्यादा प्रोसेसिंग होने का संकेत हो सकता है. इसे किसी दूसरी थ्रेड पर ट्रांसफ़र किया जा सकता है. |
पहली टेबल. Android 6.0 और इसके बाद के वर्शन में कॉम्पोनेंट बार.
Android के 4.0 (एपीआई लेवल 14) और 5.0 (एपीआई लेवल 21) के बीच के वर्शन में, नीले, बैंगनी, लाल, और नारंगी रंग के सेगमेंट होते हैं. Android के 4.0 से पहले के वर्शन में, सिर्फ़ नीले, लाल, और नारंगी रंग के कॉम्पोनेंट होते हैं. इस टेबल में, Android 4.0 और 5.0 में कॉम्पोनेंट बार दिखाए गए हैं.
बार का कॉम्पोनेंट | रेंडरिंग स्टेज | ब्यौरा |
---|---|---|
प्रोसेस | इससे पता चलता है कि सीपीयू, जीपीयू के काम पूरा करने का इंतज़ार कर रहा है. अगर यह बार लंबा हो जाता है, तो इसका मतलब है कि ऐप्लिकेशन, GPU पर बहुत ज़्यादा काम कर रहा है. | |
एक्ज़ीक्यूट करें | इससे यह पता चलता है कि Android के 2D रेंडरर ने OpenGL को डिसप्ले लिस्ट बनाने और फिर से बनाने के लिए कितने समय तक निर्देश दिए. इस बार की ऊंचाई, हर डिसप्ले लिस्ट को एक्ज़ीक्यूट करने में लगने वाले समय के योग के हिसाब से तय होती है. ज़्यादा डिसप्ले लिस्ट होने पर, लाल रंग का बार लंबा हो जाता है. | |
XFer | इससे पता चलता है कि बिटमैप की जानकारी को जीपीयू पर अपलोड होने में कितना समय लगता है. बड़े सेगमेंट से पता चलता है कि ऐप्लिकेशन, ज़्यादा ग्राफ़िक लोड करने में काफ़ी समय ले रहा है. यह सेगमेंट, Android 4.0 या इससे पहले के वर्शन पर चलने वाले डिवाइसों पर नहीं दिखता. | |
अपडेट करें | इससे व्यू की डिसप्ले सूचियां बनाने और अपडेट करने में लगने वाले समय के बारे में पता चलता है. अगर बार का यह हिस्सा लंबा है, तो हो सकता है कि कस्टम व्यू को बहुत ज़्यादा बार ड्रॉ किया गया हो या onDraw तरीकों में बहुत ज़्यादा काम किया गया हो. |
टेबल 2. Android 4.0 और 5.0 में कॉम्पोनेंट बार.
प्रोफ़ाइलिंग टूल से मिली जानकारी को समझने के तरीके के बारे में ज़्यादा जानने के लिए, प्रोफ़ाइल जीपीयू रेंडरिंग की मदद से विश्लेषण करना लेख पढ़ें.
ध्यान दें: इस टूल का नाम प्रोफ़ाइल जीपीयू रेंडरिंग है. हालांकि, मॉनिटर की गई सभी प्रोसेस, सीपीयू में होती हैं. रेंडरिंग, जीपीयू को कमांड सबमिट करके की जाती है. साथ ही, जीपीयू स्क्रीन को एसिंक्रोनस तरीके से रेंडर करता है. कुछ मामलों में, जीपीयू को बहुत ज़्यादा काम करना पड़ सकता है. ऐसे में, सीपीयू को नई कमांड सबमिट करने से पहले इंतज़ार करना होगा. ऐसा होने पर, आपको नारंगी और लाल बार में बढ़ोतरी दिखेगी. साथ ही, जीपीयू कमांड क्यू में ज़्यादा जगह बनने तक, कमांड सबमिट करने की प्रोसेस रुक जाएगी.
जीपीयू ओवरड्रॉ को विज़ुअलाइज़ करना
डेवलपर के विकल्पों में मौजूद एक अन्य सुविधा, यूज़र इंटरफ़ेस (यूआई) को कलर-कोड करके ओवरड्रॉ की पहचान करने में आपकी मदद करती है. ओवरड्रॉ तब होता है, जब आपका ऐप्लिकेशन एक ही फ़्रेम में एक ही पिक्सल को एक से ज़्यादा बार ड्रॉ करता है. इसलिए, इस विज़ुअलाइज़ेशन से पता चलता है कि आपका ऐप्लिकेशन, ज़रूरत से ज़्यादा रेंडरिंग कहां कर रहा है. इससे परफ़ॉर्मेंस से जुड़ी समस्या हो सकती है. ऐसा इसलिए, क्योंकि पिक्सल को रेंडर करने के लिए, अतिरिक्त जीपीयू की ज़रूरत होती है. हालांकि, ये पिक्सल उपयोगकर्ता को नहीं दिखेंगे. इसलिए, जब भी हो सके, आपको ओवरड्रॉ इवेंट ठीक करने चाहिए.
अगर आपने पहले से ऐसा नहीं किया है, तो डेवलपर के लिए उपलब्ध सेटिंग और टूल चालू करें. इसके बाद, अपने डिवाइस पर ओवरड्रॉ देखने के लिए, यह तरीका अपनाएं:
- अपने डिवाइस पर, सेटिंग पर जाएं. इसके बाद, डेवलपर के लिए सेटिंग और टूल पर टैप करें.
- नीचे की ओर स्क्रोल करके, हार्डवेयर की मदद से रेंडरिंग की प्रोसेस को तेज़ करना सेक्शन पर जाएं. इसके बाद, जीपीयू ओवरड्रॉ की समस्या हल करें को चुनें.
- जीपीयू ओवरड्रॉ डीबग करें डायलॉग में, ओवरड्रॉ वाले हिस्से दिखाएं चुनें.
Android, यूज़र इंटरफ़ेस (यूआई) एलिमेंट को कलर करता है, ताकि ओवरड्रॉ की मात्रा की पहचान की जा सके. इसके लिए, वह इस तरीके का इस्तेमाल करता है:
- ट्रू कलर: कोई ओवरड्रॉ नहीं
नीला: एक बार ओवरड्रॉ किया गया
हरा: दो बार ओवरड्रॉ किया गया
गुलाबी: तीन बार ओवरड्रॉ किया गया
लाल: चार या इससे ज़्यादा बार ओवरड्रॉ किया गया हो

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

तीसरी इमेज. ज़्यादा ओवरड्रॉ (बाईं ओर) और कम ओवरड्रॉ (दाईं ओर) वाले ऐप्लिकेशन के उदाहरण