Traceview Android Studio में निर्मित एक ग्राफिकल ट्रेसिंग टूल है जो समय और CPU संसाधनों के संदर्भ में एप्लिकेशन मेथड के निष्पादन को रिकॉर्ड और विज़ुअलाइज़ करता है। Systrace के विपरीत, जो कर्नेल स्तर पर सिस्टम प्रक्रियाओं को दिखाता है, Traceview एप्लिकेशन के अंदर Java और Kotlin मेथड पर ध्यान केंद्रित करता है, जो उपयोगकर्ता इनपुट से UI रेंडरिंग तक की श्रृंखला में कॉल किए जाते हैं। Google, 2024 के अनुसार, यह टूल व्यक्तिगत कॉल स्तर पर प्रदर्शन अड़चनों को खोजने और रिलीज़ से पहले कोड को अनुकूलित करने में मदद करता है।
मुख्य निष्कर्ष
Traceview Android Studio में निर्मित एक ग्राफिकल प्रोफाइलर है जो Android एप्लिकेशन मेथड के निष्पादन ट्रेस को टाइमलाइन और कॉल टेबल के रूप में प्रदर्शित करता है। यह Android SDK का हिस्सा है और Android Studio 3.0 से Android Profiler के माध्यम से, साथ ही dmtracedump कमांड-लाइन उपयोगिता के माध्यम से उपलब्ध है।
Traceview का मुख्य कार्य डेवलपर्स को उन मेथड को खोजने में मदद करना है जो सबसे अधिक CPU समय की खपत करते हैं। सरल लॉगिंग के विपरीत, Traceview प्रत्येक मेथड के प्रवेश और निकास के सटीक समय को रिकॉर्ड करता है, एक Call Chart और Top-Down ट्री बनाता है, जिससे प्रदर्शन विसंगतियों का दृश्य पता लगाना संभव होता है। यह टूल UI थ्रेड की प्रोफाइलिंग करते समय विशेष रूप से उपयोगी है, जहां 16 ms की देरी से फ्रेम ड्रॉप होता है।
Traceview पहली बार Android SDK के शुरुआती संस्करणों में .trace फ़ाइलों को देखने के लिए एक स्वतंत्र उपयोगिता के रूप में दिखाई दिया। Android Studio 3.0 (2017) के रिलीज़ के साथ, यह Android Profiler का हिस्सा बन गया, जिसमें लाइव CPU, मेमोरी और नेटवर्क टाइमलाइन के साथ एकीकरण प्राप्त हुआ। Google I/O 2018 के अनुसार, Android Studio टीम प्रोफाइलर का विकास जारी रखती है, systrace और perfetto के माध्यम से नेटिव कोड के लिए समर्थन जोड़ती है। Android Studio के वर्तमान संस्करणों में, Traceview Perfetto प्रारूप के शीर्ष पर काम करता है लेकिन क्लासिक .trace प्रारूप के साथ पिछड़ी संगतता बनाए रखता है।
Traceview Android Runtime (ART) में System Tracing तंत्र से डेटा प्राप्त करता है। जब ट्रेसिंग सक्षम के साथ एप्लिकेशन लॉन्च किया जाता है, ART प्रत्येक निष्पादित मेथड के प्रारंभ और समाप्ति टाइमस्टैम्प रिकॉर्ड करता है, जिसमें क्लास नाम, मेथड नाम और थ्रेड ID शामिल है।
// ऐप कोड में ट्रेसिंग शुरू करना
Debug.startMethodTracing("app_trace")
// प्रोफाइलिंग के लिए कोड का महत्वपूर्ण भाग
loadHeavyData()
// ट्रेसिंग रोकना — फ़ाइल डिवाइस पर सहेजी गई
Debug.stopMethodTracing()
System Tracing ART वर्चुअल मशीन स्तर पर काम करता है और माइक्रोसेकंड सटीकता के साथ प्रत्येक मेथड कॉल को रजिस्टर करता है। एप्लिकेशन प्रदर्शन पर प्रभाव को कम करने के लिए डेटा को रिंग बफर में लिखा जाता है। ट्रेसिंग रुकने के बाद, बफर डिवाइस की आंतरिक स्टोरेज में .trace फ़ाइल में फ्लश हो जाता है।
.trace फ़ाइल में प्रारूप संस्करण और प्रारंभ समय वाला एक हेडर होता है, जिसके बाद प्रत्येक कॉल के लिए रिकॉर्ड होते हैं: थ्रेड ID, मेथड ID, प्रवेश टाइमस्टैम्प और निकास टाइमस्टैम्प। Android Studio स्वचालित रूप से .trace फ़ाइल लोड करता है और दो मुख्य दृश्य बनाता है: कालक्रम के लिए टाइमलाइन पैनल और कॉल पदानुक्रम के लिए प्रोफाइल पैनल। डिफ़ॉल्ट रूप से, अधिकतम बफर आकार 8 MB है, लेकिन इसे Debug.startMethodTracing(filename, maxSize) के माध्यम से बढ़ाया जा सकता है।
Traceview कई पूरक डेटा दृश्य प्रदान करता है, प्रत्येक प्रदर्शन विश्लेषण में एक विशिष्ट कार्य को संबोधित करता है।
Call Chart एक क्षैतिज टाइमलाइन है जहां प्रत्येक थ्रेड को एक अलग लेन के रूप में प्रदर्शित किया जाता है। मेथड को रंगीन आयतों के रूप में दिखाया गया है: आयत की चौड़ाई निष्पादन समय के समानुपाती होती है, और नेस्टिंग कॉल पदानुक्रम को दर्शाती है। यदि कोई मेथड दूसरे मेथड को कॉल करता है, तो चाइल्ड आयत पैरेंट आयत के अंदर खींचा जाता है। यह विज़ुअलाइज़ेशन उन संचालनों की तुरंत पहचान करने की अनुमति देता है जिन्होंने थ्रेड को ब्लॉक किया।
Top-Down ट्री अपने सभी नेस्टेड कॉल सहित एक मेथड का निष्पादन समय दिखाता है — Inclusive Time। Bottom-Up ट्री, इसके विपरीत, दिखाता है कि किन पैरेंट मेथड ने किसी दिए गए मेथड को कॉल किया — भारी संचालन का स्रोत खोजने के लिए उपयोगी। Inclusive और Exclusive Time के बीच का अंतर महत्वपूर्ण है: एक मेथड स्वयं जल्दी निष्पादित हो सकता है लेकिन धीमी चाइल्ड मेथड को कॉल कर सकता है, और यह केवल Inclusive Time में दिखाई देता है।
Traceview मेथड नाम, पैकेज या क्लास द्वारा खोज का समर्थन करता है। परिणाम टाइमलाइन पर हाइलाइट किए जाते हैं, और प्रोफाइल पैनल केवल मिले मेथड के लिए आंकड़े प्रदर्शित करता है। थ्रेड द्वारा फ़िल्टरिंग भी उपलब्ध है — आप पृष्ठभूमि थ्रेड को छिपा सकते हैं और मुख्य (UI) थ्रेड पर ध्यान केंद्रित कर सकते हैं, जहां देरी सबसे महत्वपूर्ण है।
| मीट्रिक | विवरण | इकाई |
|---|---|---|
| Inclusive Time | मेथड का कुल समय + इसके सभी चाइल्ड कॉल | μs / ms |
| Exclusive Time | केवल मेथड का समय, चाइल्ड कॉल को छोड़कर | μs / ms |
| Calls + Recur | पुनरावृत्ति सहित कॉल की संख्या | गणना |
| CPU Time | CPU पर वास्तव में बिताया गया समय (प्रतीक्षा को छोड़कर) | μs / ms |
| Real Time | मेथड प्रवेश से निकास तक वास्तविक समय | μs / ms |
Traceview ट्रेस को CSV प्रारूप में निर्यात करने की अनुमति देता है, स्प्रेडशीट या चार्टिंग में आगे के विश्लेषण के लिए। Android Studio में, आप टाइमलाइन के चयनित टुकड़े को एक छवि के रूप में कॉपी भी कर सकते हैं — बग रिपोर्ट या दस्तावेज़ीकरण में डालने के लिए। CI/CD के लिए, cmdline-tools उपयोगिता के माध्यम से Perfetto प्रारूप में निर्यात उपलब्ध है।
प्रोफाइलिंग Traceview के माध्यम से दो तरीकों से उपलब्ध है: लाइव कैप्चर के साथ Android Profiler के माध्यम से और प्रोग्रामेटिक Debug API कॉल के माध्यम से। पहली विधि तदर्थ विश्लेषण के लिए सुविधाजनक है, दूसरी प्रतिलिपि प्रस्तुत करने योग्य प्रदर्शन परीक्षणों के लिए।
Android Studio में, Profiler टैब (View → Tool Windows → Profiler) खोलें, अपना डिवाइस और एप्लिकेशन प्रक्रिया चुनें। CPU सेगमेंट पर क्लिक करें, फिर “Trace Java Methods” मोड चुनें और Record पर क्लिक करें। एप्लिकेशन के साथ इंटरैक्ट करने के बाद, Stop पर क्लिक करें — Traceview स्वचालित रूप से रिकॉर्ड किए गए ट्रेस को खोलेगा। डिफ़ॉल्ट रिकॉर्डिंग अवधि 30 सेकंड तक सीमित है, लेकिन प्रोफाइलर सेटिंग्स में सीमा बदली जा सकती है।
किसी विशिष्ट कोड अनुभाग की सटीक प्रोफाइलिंग के लिए, Debug.startMethodTracing और Debug.stopMethodTracing का उपयोग करें। फ़ाइल context.getExternalFilesDir(null) द्वारा लौटाए गए पथ पर एप्लिकेशन की बाहरी स्टोरेज में सहेजी जाती है। पूरा होने के बाद, Android Studio Device Explorer के माध्यम से .trace फ़ाइल को अपने कंप्यूटर पर स्थानांतरित करें, फिर Android Studio में File → Open के माध्यम से खोलें।
Debug.startMethodTracing(
"heavy_computation",
Debug.TRACE_COUNT_ALLOCS
)
processLargeDataset()
Debug.stopMethodTracing()
Debug.startMethodTracing तीन पैरामीटर लेता है: फ़ाइल नाम (बिना एक्सटेंशन), अधिकतम बफर आकार (डिफ़ॉल्ट 8 MB), और फ़्लैग। TRACE_COUNT_ALLOCS फ़्लैग ऑब्जेक्ट आवंटन गणना जोड़ता है — मेमोरी लीक खोजने के लिए उपयोगी। Traceview नेटिव कोड की प्रोफाइलिंग के लिए उपयुक्त नहीं है — SimplePerf या Perfetto का उपयोग करें। लंबे परीक्षणों (30 सेकंड से अधिक) के लिए, maxSize पैरामीटर के माध्यम से बफर को 64–128 MB तक बढ़ाने की अनुशंसा की जाती है।
Traceview टाइमलाइन में दो पैनल होते हैं: रंगीन कॉल आयतों के साथ शीर्ष टाइमलाइन पैनल, और सांख्यिकी तालिका के साथ निचला प्रोफाइल पैनल। टाइमलाइन पैनल बाएं से दाएं थ्रेड निष्पादन दिखाता है, जहां प्रत्येक आयत एक एकल मेथड कॉल है। आयत रंग मेथड प्रकार द्वारा कोडित हैं: Android सिस्टम कॉल (हरा), एप्लिकेशन मेथड (नीला), लाइब्रेरी कॉल (नारंगी)।
प्रोफाइल पैनल में, प्रत्येक पंक्ति Inclusive Time, Exclusive Time, Calls + Recur और CPU Time के लिए कॉलम वाला एक मेथड है। तालिका को Inclusive Time (अवरोही) के अनुसार क्रमबद्ध करें ताकि पहले सबसे अधिक कुल समय लेने वाले मेथड देखें। यदि उच्च Inclusive Time वाले मेथड का Exclusive Time कम है — समस्या इसके चाइल्ड कॉल में है, और आपको ट्री का विस्तार करने की आवश्यकता है। उदाहरण के लिए, ListView.getView में छवि लोडिंग कॉल के कारण उच्च Inclusive Time हो सकता है।
असामान्य रूप से उच्च Real Time लेकिन कम CPU Time वाले मेथड देखें — यह ब्लॉकिंग (I/O प्रतीक्षा, नेटवर्क संचालन, लॉक विवाद) को इंगित करता है। उच्च CPU Time वाले मेथड को एल्गोरिदम अनुकूलन की आवश्यकता होती है। UI थ्रेड के लिए, प्रत्येक मेथड 16 ms के भीतर पूरा होना चाहिए — यदि कोई कॉल इस सीमा से अधिक हो जाती है, तो एप्लिकेशन एक फ्रेम खो देता है और उपयोगकर्ता झटका देखता है। Google अनुशंसाओं के अनुसार, प्रति फ्रेम UI थ्रेड में सभी कॉल का कुल समय 8–10 ms से अधिक नहीं होना चाहिए, जो सिस्टम संचालन के लिए मार्जिन छोड़ता है।
हालांकि Traceview और Systrace दोनों Android ट्रेसिंग टूल हैं, वे अलग-अलग कार्यों को हल करते हैं और विभिन्न प्रोफाइलिंग चरणों में उपयोग किए जाते हैं। मुख्य अंतर विस्तार का स्तर है: Traceview Java/Kotlin मेथड स्तर पर काम करता है, Systrace सिस्टम प्रक्रिया स्तर (CPU, GPU, Binder, SurfaceFlinger) पर काम करता है।
| मानदंड | Traceview | Systrace |
|---|---|---|
| स्तर | मेथड (Java/Kotlin) | सिस्टम प्रक्रियाएं (CPU/GPU/IO) |
| इंटरफ़ेस | Android Studio Profiler | कमांड लाइन + HTML रिपोर्ट |
| डेटा | Inclusive/Exclusive Time | CPU लोड, फ्रेम दर |
| अवधि | 30 सेकंड तक (Profiler), असीमित (API) | 60 सेकंड तक |
| नेटिव कोड | समर्थित नहीं | atrace मार्कर के माध्यम से समर्थित |
व्यवहार में, दोनों टूल एक दूसरे के पूरक हैं: पहले Systrace यह पहचानने में मदद करता है कि कौन सा सिस्टम घटक समस्या पैदा कर रहा है (उदाहरण के लिए, बार-बार GC या Binder लॉक), फिर Traceview एप्लिकेशन के अंदर एक विशिष्ट मेथड में गहराई से जाने की अनुमति देता है। Android Studio में, दोनों टूल Android Profiler में संयुक्त हैं — CPU Profiler स्वचालित रूप से इष्टतम रिकॉर्डिंग मोड का चयन करता है। Android 12+ वाले उपकरणों पर, Systrace और Traceview Perfetto के शीर्ष पर काम करते हैं, जो सभी प्रकार की प्रोफाइलिंग के लिए एकीकृत डेटा प्रारूप प्रदान करते हैं।
प्रभावी प्रोफाइलिंग के लिए केवल ट्रेसिंग शुरू करने से अधिक की आवश्यकता होती है — आपको कैप्चर पॉइंट को सही ढंग से रखने और परिणामों की व्याख्या करने की आवश्यकता है। नीचे दो व्यावहारिक उदाहरण दिए गए हैं: RecyclerView लोडिंग की प्रोफाइलिंग और प्रदर्शन परीक्षण में दो एल्गोरिदम की तुलना।
पहला उदाहरण सूची स्क्रॉलिंग के दौरान महत्वपूर्ण पथ का ट्रेसिंग है। RecyclerView प्रत्येक दृश्यमान आइटम के लिए onBindViewHolder को कॉल करता है, और यदि यह मेथड 16 ms से अधिक समय लेता है, तो स्क्रॉलिंग झटकेदार हो जाती है। onBindViewHolder के आसपास ट्रेसिंग दिखाएगा कि इसके अंदर कौन से विशिष्ट संचालन समय ले रहे हैं।
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
override fun onBindViewHolder(
holder: ViewHolder,
position: Int
) {
Debug.startMethodTracing("bind_card_$position")
holder.bind(items[position])
Debug.stopMethodTracing()
}
}
दूसरा उदाहरण दो कार्यान्वयनों का A/B गति परीक्षण है: Glide के माध्यम से छवियां लोड करना बनाम मैन्युअल BitmapFactory। यह ट्रेस दोनों रणनीतियों के Inclusive Time की वस्तुनिष्ठ तुलना और इष्टतम के चयन की अनुमति देता है। प्रत्येक परीक्षण को गर्म किए गए डिवाइस (3–5 चक्रों के बाद) पर समान परिस्थितियों (पृष्ठभूमि लोड, तापमान) में चलाना महत्वपूर्ण है।
fun compareImageLoadingStrategies() {
// परीक्षण A: Glide
Debug.startMethodTracing("glide_test")
loadWithGlide()
Debug.stopMethodTracing()
// परीक्षण B: BitmapFactory
Debug.startMethodTracing("bitmap_test")
loadWithBitmapFactory()
Debug.stopMethodTracing()
}
चलाने के बाद, Android Studio में दोनों .trace फ़ाइलें खोलें और प्रोफाइल पैनल में Inclusive Time की तुलना करें। यदि Glide उसी कार्य के लिए 3x कम Inclusive Time दिखाता है — यह लाइब्रेरी चुनने का एक वस्तुनिष्ठ आधार है। Tony John (Glide डेवलपर, 2023) के अनुसार, लाइब्रेरी कैशिंग और थ्रेड पूल का उपयोग करती है, जो बार-बार लोड करने पर 40% तक लाभ प्रदान करती है।
अक्सर पूछे जाने वाले प्रश्न
Traceview Android Profiler के अंदर ट्रेस विज़ुअलाइज़ेशन कोर है। Profiler रिकॉर्डिंग शुरू और बंद करने के लिए अतिरिक्त UI प्रदान करता है, जबकि Traceview टाइमलाइन और मेथड आंकड़े प्रदर्शित करने का कार्य संभालता है। दोनों एक ही .trace डेटा प्रारूप का उपयोग करते हैं।
हां, Traceview एमुलेटर और भौतिक Android डिवाइस दोनों पर काम करता है। USB डिबगिंग सक्षम होनी चाहिए, और एप्लिकेशन को debuggable मोड में बनाया जाना चाहिए। भौतिक उपकरणों पर डेटा अधिक सटीक होता है, क्योंकि एमुलेटर वर्चुअलाइज़ेशन के कारण समय को विकृत कर सकता है।
डिफ़ॉल्ट अधिकतम आकार 8 MB है, लेकिन इसे Debug.startMethodTracing में maxSize पैरामीटर के माध्यम से 256 MB तक बढ़ाया जा सकता है। लंबी प्रोफाइलिंग सत्रों के लिए, Perfetto का उपयोग करें, जिसकी ट्रेस आकार पर कोई सख्त सीमा नहीं है।
Traceview Android Runtime (ART) स्तर पर काम करता है और केवल प्रबंधित Java और Kotlin मेथड देखता है। नेटिव कोड (JNI के माध्यम से C/C++) की प्रोफाइलिंग के लिए, SimplePerf या FTrace के साथ Perfetto का उपयोग करें, जो कर्नेल स्तर पर सिस्टम कॉल कैप्चर करते हैं।
Android SDK से dmtracedump उपयोगिता का उपयोग करें (platform-tools फ़ोल्डर)। यह टाइमलाइन और सांख्यिकी तालिका के साथ एक HTML रिपोर्ट उत्पन्न करता है। Windows पर: dmtracedump -h trace.trace > report.html। एक विकल्प Perfetto UI (ui.perfetto.dev) है, जो .trace प्रारूप आयात का समर्थन करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें