Android, आपके ऐप्लिकेशन से एक फ़्रेम जनरेट करके और उसे स्क्रीन पर दिखाकर यूज़र इंटरफ़ेस (यूआई) रेंडर करता है. अगर आपके ऐप्लिकेशन में यूज़र इंटरफ़ेस (यूआई) की रेंडरिंग धीमी है, तो सिस्टम को फ़्रेम छोड़ने पड़ते हैं. ऐसा होने पर, उपयोगकर्ता को अपनी स्क्रीन पर बार-बार फ़्लिकर दिखता है. इसे जैंक कहा जाता है.
आम तौर पर, जैंक की समस्या तब होती है, जब यूज़र इंटरफ़ेस (यूआई) थ्रेड पर कोई एसिंक्रोनस कॉल धीमी हो जाती है या ब्लॉक हो जाती है. ज़्यादातर ऐप्लिकेशन में, यह मुख्य थ्रेड होती है. समस्या की पहचान करने के लिए, सिस्टम ट्रेस का इस्तेमाल किया जा सकता है.
अगर Jetpack Compose का इस्तेमाल किया जा रहा है, तो ट्रेस में रेंडरिंग परफ़ॉर्मेंस की जांच करने का सबसे अच्छा तरीका है कि कंपोज़िशन ट्रेसिंग की सुविधा चालू की जाए. Compose की परफ़ॉर्मेंस से जुड़ी सामान्य समस्याओं के बारे में जानने के लिए, Jetpack Compose की परफ़ॉर्मेंस देखें.
Compose ऐप्लिकेशन के लिए, इस गाइड में दिया गया तरीका तब अपनाएं, जब आपको अपने ऐप्लिकेशन का मैक्रो-लेवल व्यू चाहिए. यहां बताए गए सिस्टम ट्रेस की मदद से, आपको सिस्टम-लेवल की समस्याओं की वजह से होने वाले जैंक की पहचान करने में मदद मिलती है. जैसे, मुख्य थ्रेड को ब्लॉक करने वाली समस्याएं. इनमें डिस्क I/O का ज़्यादा इस्तेमाल, बार-बार गार्बेज कलेक्शन, या जीपीयू रेंडरिंग की समस्याएं शामिल हैं. अगर आपने यूज़र इंटरफ़ेस (यूआई) लेयर में जैंक की समस्या को अलग कर लिया है, तो Jetpack Compose की परफ़ॉर्मेंस से जुड़ी गाइड का इस्तेमाल करें. उस गाइड की मदद से, Compose से जुड़ी समस्याओं को ठीक किया जा सकता है. जैसे, बार-बार कंपोज़िशन, गलत फ़ेज़ में स्टेट पढ़ना या अस्थिर पैरामीटर का इस्तेमाल करना.
Android 12 और इसके बाद के वर्शन पर जैंक की पहचान करना
Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन का इस्तेमाल करने वाले डिवाइसों के लिए, कैप्चर किया गया ट्रेस, सीपीयू प्रोफ़ाइलर में डिसप्ले पैन में मौजूद जैंकी फ़्रेम ट्रैक में दिखता है.
जैंक की पहचान करने के लिए,
Android Studio में, व्यू > टूल विंडो > प्रोफ़ाइलर चुनें या टूलबार में प्रोफ़ाइल
पर क्लिक करें.अगर डिप्लॉयमेंट टारगेट चुनें डायलॉग में प्रॉम्प्ट दिखता है, तो वह डिवाइस चुनें जिस पर आपको प्रोफ़ाइलिंग के लिए अपना ऐप्लिकेशन डिप्लॉय करना है. अगर आपने किसी डिवाइस को यूएसबी से कनेक्ट किया है, लेकिन वह सूची में नहीं दिख रहा है, तो पक्का करें कि आपने यूएसबी डीबग करने की सुविधा चालू की हो.
सीपीयू प्रोफ़ाइलर खोलने के लिए, सीपीयू टाइमलाइन में कहीं भी क्लिक करें.
सीपीयू प्रोफ़ाइलर में, कॉन्फ़िगरेशन मेन्यू से सिस्टम ट्रेस चुनें और रिकॉर्ड करें पर क्लिक करें. अपने ऐप्लिकेशन के साथ इंटरैक्ट करने के बाद, रोकें पर क्लिक करें.
आपको डिसप्ले में जैंकी फ़्रेम ट्रैक दिखेगा. डिफ़ॉल्ट रूप से, प्रोफ़ाइलर सिर्फ़ जैंकी फ़्रेम को जांच के लिए उम्मीदवार के तौर पर दिखाता है. हर जैंकी फ़्रेम में, लाल रंग से हाइलाइट किया गया हिस्सा, उस अवधि को दिखाता है जब फ़्रेम को रेंडर करने की समयसीमा खत्म हो जाती है.

जैंकी फ़्रेम मिलने के बाद, उस पर क्लिक करें. इसके अलावा, चुने गए फ़्रेम पर फ़ोकस करने के लिए, ज़ूम को अडजस्ट करने के लिए M दबाया जा सकता है. इन थ्रेड में काम के इवेंट हाइलाइट किए जाते हैं: मुख्य थ्रेड, RenderThread , और जीपीयू पूरा होने का समय.

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

Android 11 पर जैंक की पहचान करना
Android 11 (एपीआई लेवल 30) का इस्तेमाल करने वाले डिवाइसों के लिए, कैप्चर किया गया ट्रेस, सीपीयू प्रोफ़ाइलर में फ़्रेम लाइफ़साइकल सेक्शन में दिखता है.

फ़्रेम लाइफ़साइकल सेक्शन में, लेयर का नाम और चार ट्रैक होते हैं. हर ट्रैक, फ़्रेम रेंडरिंग पाइपलाइन के एक स्टेज को दिखाता है. फ़्रेम लाइफ़साइकल के एलिमेंट इस तरह हैं:
- फ़्रेम लाइफ़साइकल (लेयर का नाम): सेक्शन के टाइटल में, लेयर का नाम ब्रैकेट में होता है. लेयर , कंपोज़िशन की एक यूनिट होती है.
- ऐप्लिकेशन: यह ट्रैक, बफ़र को ऐप्लिकेशन से डीक्यू किए जाने से लेकर, वापस एनक्यू किए जाने तक का समय दिखाता है. आम तौर पर, यह
RenderThreadमें मौजूद ट्रेस इवेंट से मेल खाता है. - जीपीयू के लिए इंतज़ार करें: यह ट्रैक दिखाता है कि बफ़र, जीपीयू के पास कितने समय तक रहा. यह वह समय है जब बफ़र को जीपीयू को भेजा जाता है और जब जीपीयू, बफ़र पर अपना काम पूरा करता है. इससे यह पता नहीं चलता कि जीपीयू, इस दौरान सिर्फ़ इस बफ़र पर काम कर रहा था. किसी तय समय के दौरान जीपीयू किस पर काम करता है, इस बारे में ज़्यादा जानकारी पाने के लिए, Android GPU Inspector का इस्तेमाल किया जा सकता है.
- कंपोज़िशन: यह ट्रैक, उस समय से शुरू होता है जब SurfaceFlinger बफ़र को लैच करता है और उसे कंपोज़िशन के लिए भेजता है. यह उस समय तक चलता है जब बफ़र को डिसप्ले पर भेजा जाता है.
- डिसप्ले पर फ़्रेम: यह ट्रैक दिखाता है कि फ़्रेम, स्क्रीन पर कितने समय तक रहा.
फ़्रेम लाइफ़साइकल सेक्शन से पता चलता है कि फ़्रेम बफ़र, रेंडरिंग पाइपलाइन के अलग-अलग स्टेज के बीच कैसे मूव करता है. फ़्रेम को फ़्रेम नंबर के हिसाब से, अलग-अलग रंग में कोड किया जाता है, ताकि किसी खास फ़्रेम को ट्रैक करना आसान हो.
Android Studio, सभी फ़्रेम टैब में, ट्रेस में मौजूद सभी फ़्रेम को टेबल फ़ॉर्मैट में भी दिखाता है.

The फ़्रेम #, ऐप्लिकेशन, जीपीयू के लिए इंतज़ार करें, और कंपोज़िशन कॉलम, फ़्रेम लाइफ़साइकल सेक्शन में मौजूद ट्रैक के जैसा ही डेटा दिखाते हैं. फ़्रेम की अवधि कॉलम, ऐप्लिकेशन के शुरू होने से लेकर डिसप्ले पर फ़्रेम के शुरू होने तक का समय दिखाता है. असल में, यह वह समय है जो किसी फ़्रेम को एंड-टू-एंड रेंडर करने में लगता है.
सबसे छोटा या सबसे लंबा फ़्रेम ढूंढने के लिए, फ़्रेम की टेबल को किसी भी कॉलम के हिसाब से क्रम में लगाया जा सकता है. टेबल में पेज नंबर के हिसाब से कंट्रोल भी दिए जाते हैं. इनकी मदद से, सैकड़ों फ़्रेम में नेविगेट किया जा सकता है.
Android 11 पर जैंक की पहचान करने और उसकी जांच करने के लिए, यह तरीका अपनाएं:
सभी फ़्रेम टेबल को ऐप्लिकेशन कॉलम के हिसाब से घटते क्रम में लगाएं, ताकि सबसे ज़्यादा समय लेने वाले फ़्रेम सबसे पहले दिखें.

सबसे ज़्यादा समय तक चलने वाले फ़्रेम ढूंढें और टेबल की लाइन चुनें. इससे, बाईं ओर मौजूद टाइमलाइन व्यू में, चुने गए फ़्रेम पर ज़ूम इन हो जाता है.

फ़्रेम लाइफ़साइकल और थ्रेड सेक्शन में, काम के थ्रेड ढूंढें.

Android 10 और इससे पहले के वर्शन पर जैंक की पहचान करना
Android 10 (एपीआई लेवल 29) और इससे पहले के वर्शन का इस्तेमाल करने वाले डिवाइसों के लिए, ओएस के ग्राफ़िक्स पाइपलाइन की काम की जानकारी, सीपीयू प्रोफ़ाइलर के सिस्टम ट्रेस में मौजूद एक सेक्शन में दिखती है. इसे डिसप्ले कहा जाता है.

- फ़्रेम: इस सेक्शन में, आपके ऐप्लिकेशन में यूज़र इंटरफ़ेस (यूआई) थ्रेड और
RenderThreadट्रेस इवेंट दिखते हैं. 16 मि॰से॰ से ज़्यादा समय लेने वाले इवेंट को लाल रंग में दिखाया जाता है, ताकि संभावित जैंकी फ़्रेम को हाइलाइट किया जा सके. ऐसा इसलिए, क्योंकि ये 60 फ़्रेम प्रति सेकंड (एफ़पीएस) की दर से रेंडर करने की समयसीमा से ज़्यादा समय लेते हैं. - SurfaceFlinger: इस सेक्शन में, यह दिखाया जाता है कि SurfaceFlinger, फ़्रेम बफ़र को कब प्रोसेस करता है. SurfaceFlinger, एक सिस्टम प्रोसेस है. यह बफ़र को डिसप्ले पर भेजने के लिए ज़िम्मेदार होती है.
- VSYNC: इस सेक्शन में, VSYNC दिखता है. यह एक ऐसा सिग्नल है जो डिसप्ले पाइपलाइन को सिंक करता है. इस ट्रैक में, VSYNC-ऐप्लिकेशन सिग्नल दिखता है. इससे पता चलता है कि आपका ऐप्लिकेशन कब बहुत देर से शुरू हो रहा है. आम तौर पर, ऐसा तब होता है, जब यूज़र इंटरफ़ेस (यूआई) थ्रेड व्यस्त होती है. इससे, ऐनिमेशन के दौरान स्क्रीन पर फ़्लिकर दिखता है. साथ ही, ऐनिमेशन या स्क्रोल पूरा होने तक, इनपुट में ज़्यादा समय लगता है. ज़्यादा रीफ़्रेश रेट वाले डिसप्ले के लिए, इसे देखना ज़रूरी है. ऐसा इसलिए, क्योंकि ये एक सेकंड में 60 से ज़्यादा बार या अलग-अलग रेट पर हो सकते हैं.
- BufferQueue: इस सेक्शन में, यह दिखाया जाता है कि कितने फ़्रेम बफ़र, क्यू में हैं और
SurfaceFlinger के इस्तेमाल करने का इंतज़ार कर रहे हैं. Android 9 (एपीआई लेवल 28) या इसके बाद के वर्शन पर डिप्लॉय किए गए ऐप्लिकेशन के लिए, इस ट्रैक में ऐप्लिकेशन के Surface BufferQueue (
0,1, या2) का बफ़र काउंट दिखता है. BufferQueue की मदद से, इमेज बफ़र की स्थिति को समझा जा सकता है. इससे यह पता चलता है कि वे Android के ग्राफ़िक्स कॉम्पोनेंट के बीच कैसे मूव करते हैं. उदाहरण के लिए,2की वैल्यू का मतलब है कि ऐप्लिकेशन फ़िलहाल ट्रिपल-बफ़र्ड है. इससे इनपुट में ज़्यादा समय लगता है.
डिसप्ले सेक्शन में, संभावित जैंक की पहचान करने के लिए काम के सिग्नल मिलते हैं. जैसे, जब यूज़र इंटरफ़ेस (यूआई) थ्रेड या RenderThread को 16 मि॰से॰ से ज़्यादा समय लगता है. जैंक की वजह की सटीक जानकारी पाने के लिए, थ्रेड सेक्शन की जांच की जा सकती है. इसमें यूज़र इंटरफ़ेस (यूआई) रेंडरिंग से जुड़े थ्रेड दिखते हैं.

ऊपर दी गई इमेज में, थ्रेड सेक्शन में यूज़र इंटरफ़ेस (यूआई) थ्रेड
(java.com.google.samples.apps.iosched), RenderThread, और GPU
completion थ्रेड दिखते हैं. ये यूज़र इंटरफ़ेस (यूआई) रेंडरिंग से जुड़े थ्रेड हैं और इनसे जैंक की समस्या हो सकती है.
Android 10 या इससे पहले के वर्शन पर जैंक की पहचान करने के लिए, यह तरीका अपनाएं:
डिसप्ले में फ़्रेम ट्रैक देखें. लाल रंग के फ़्रेम, जांच के लिए उम्मीदवार हैं.

संभावित जैंकी फ़्रेम मिलने के बाद,
Wदबाकर या Control (Command on macOS) दबाकर माउस व्हील को स्क्रोल करके ज़ूम इन करें. तब तक ज़ूम इन करें, जब तक आपको यूज़र इंटरफ़ेस (यूआई) थ्रेड औरRenderThreadमें ट्रेस इवेंट न दिखने लगें.
ऊपर दी गई इमेज में,
Choreographer#doFrameसे पता चलता है कि यूज़र इंटरफ़ेस (यूआई) थ्रेड, ऐनिमेशन, व्यू लेआउट, इमेज ड्रॉइंग, और इनसे जुड़ी प्रोसेस को कोऑर्डिनेट करने के लिए,Choreographerको कब कॉल करती है.DrawFramesसे पता चलता है किRenderThread, जीपीयू को असल ड्रॉइंग कमांड कब बनाता है और कब जारी करता है.अगर आपको मुख्य थ्रेड पर कोई बहुत लंबा ट्रेस इवेंट दिखता है, तो ज़ूम इन करके देखें कि कौनसे यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट या कंपोज़ेबल फ़ंक्शन की वजह से फ़्रेम में देरी हो रही है.
Perfetto की मदद से, बेहतर तरीके से जांच करना
Android Studio के सिस्टम ट्रेस प्रोफ़ाइलिंग टास्क को Perfetto की मदद से पूरा किया जाता है. अगर आपको रेंडरिंग से जुड़ी मुश्किल समस्याओं को हल करना है और आपको SQL की कस्टम क्वेरी या टाइमलाइन में बेहतर तरीके से नेविगेट करने की ज़रूरत है, तो IDE के बाहर जाकर ट्रेस का विश्लेषण किया जा सकता है.
Android Studio से सिस्टम ट्रेस एक्सपोर्ट करने के लिए, प्रोफ़ाइलर पैन में, ट्रेस एक्सपोर्ट करें आइकॉन पर क्लिक करें. इसके बाद, जनरेट हुई फ़ाइल को वेब पर आधारित Perfetto यूज़र इंटरफ़ेस (यूआई)में खींचें. इससे, सिस्टम-लेवल की परफ़ॉर्मेंस का विश्लेषण करने के लिए, एक अलग एनवायरमेंट मिलता है. ओएस के ग्राफ़िक्स पाइपलाइन की जानकारी को समझने के तरीके के बारे में जानने के लिए, जैसे, VSYNC, SurfaceFlinger, और फ़्रेम टाइमलाइन ट्रैक, Perfetto का आधिकारिक दस्तावेज़ देखें.
ज़्यादा जानें
जैंक की समस्या को कम करने के तरीके के बारे में ज़्यादा जानने के लिए, जैंक की सामान्य वजहें देखें.