टेस्ट डिवाइस से प्रोफ़ाइल को वापस पाने या उसे अपने बैकएंड से डाउनलोड करने के बाद, फ़ाइल को Perfetto यूज़र इंटरफ़ेस (यूआई) में खोला जा सकता है. इससे टाइमलाइन, थ्रेड की स्थितियों, और मेमोरी रिटेंशन ग्राफ़ की जांच की जा सकती है. इस पेज पर, ProfilingManager की मदद से कैप्चर किए गए सिस्टम ट्रेस और Java हीप डंप को नेविगेट करने का तरीका बताया गया है. इनमें से संवेदनशील जानकारी को हटा दिया गया है.
सिस्टम ट्रेस को विज़ुअलाइज़ करना
Perfetto यूज़र इंटरफ़ेस (यूआई) में अपनी .perfetto-trace फ़ाइल खोलें, ताकि समय के साथ सीपीयू और थ्रेड की गतिविधि की जांच की जा सके.
उपयोगकर्ता की निजता को सुरक्षित रखने के लिए, ProfilingManager सिस्टम ट्रेस करने की प्रक्रिया को हटा देता है. इसके लिए, वह अन्य सभी प्रोसेस की सीपीयू गतिविधि को एक ही OtherProcesses ट्रैक में जोड़ता है.
इस कंबाइंड ट्रैक की जांच करके, अब भी यह पता लगाया जा सकता है कि आपके ऐप्लिकेशन की परफ़ॉर्मेंस में कमी, सिस्टम में मौजूद किसी समस्या की वजह से आई है या डिवाइस पर ज़्यादा लोड होने की वजह से.
दूसरी इमेज में, सिस्टम ट्रेस करने की प्रक्रिया के मुख्य सेक्शन को हाइलाइट किया गया है:
- सीपीयू की सूची: इसमें आपके डिवाइस पर उपलब्ध सभी प्रोसेसर दिखते हैं.
- सीपीयू टास्क: इससे पता चलता है कि हर सीपीयू कौनसे थ्रेड चला रहा था.
- अन्य प्रोसेस व्यू: इसमें अन्य प्रोसेस के इस्तेमाल किए गए सीपीयू रिसॉर्स दिखते हैं.
- प्रोसेस व्यू: इसमें आपके ऐप्लिकेशन की प्रोसेस दिखती है.
- थ्रेड व्यू: इसमें आपकी प्रोसेस में चल रहे थ्रेड और उनकी स्थिति (चलाए जा सकने वाले (R), चल रहे (R), स्लीपिंग (S), अनइंटरप्टिबल स्लीप (D)) दिखती है. ये सीधे तौर पर Linux प्रोसेस की स्थितियों से मैप होती हैं.
- ट्रेस स्लाइस: इस सेक्शन में, ऐप्लिकेशन डेवलपर या फ़्रेमवर्क के जोड़े गए ट्रेस एनोटेशन दिखते हैं. इन एनोटेशन में,
Trace.beginSectionऔरTrace.endSectionके बीच की गणनाएं शामिल हैं.
Perfetto यूज़र इंटरफ़ेस (यूआई) और ट्रेस विज़ुअलाइज़ेशन के बारे में ज़्यादा जानने के लिए, Perfetto के दस्तावेज़ देखें.
Java के हीप डंप को विज़ुअलाइज़ करना
PROFILING_TYPE_JAVA_HEAP_DUMP का इस्तेमाल करके Java हीप डंप कैप्चर करने के बाद, Perfetto के यूज़र इंटरफ़ेस (यूआई) में .perfetto-java-heap-dump फ़ाइल खोलें. इससे मेमोरी लीक की पहचान की जा सकती है या मेमोरी के इस्तेमाल को ऑप्टिमाइज़ किया जा सकता है. Heapdump Explorer में,
हीप ग्राफ़ को एक्सप्लोर किया जा सकता है. साथ ही, ऑब्जेक्ट के कुल साइज़ के फ़्लेम ग्राफ़ की जांच की जा सकती है.
इसके अलावा, क्लास, ऑब्जेक्ट, और डॉमिनेटर को ब्राउज़ किया जा सकता है, जैसा कि इमेज 3 में दिखाया गया है.
ProfilingManager के हीप डंप, HPROF डंप से किस तरह अलग हैं
.hprof के स्टैंडर्ड हीप डंप (जैसे कि Debug.dumpHprofData या Android Studio में कैप्चर किए गए हीप डंप) के उलट, ProfilingManager Perfetto ART हीप डंप (.perfetto-java-heap-dump) को कैप्चर करता है. रॉ मेमोरी कॉन्टेंट को डंप करने के बजाय, ProfilingManager ऑब्जेक्ट रिटेंशन ग्राफ़ और साइज़िंग मेटाडेटा को रिकॉर्ड करता है. साथ ही, ऑब्जेक्ट में सेव किए गए रॉ डेटा को हटा देता है:
- कौनसा डेटा इकट्ठा किया जाता है:
- क्लास और टाइप: क्लास के नाम, सुपरक्लास की हैरारकी, क्लासलोडर, इंस्टेंस के साइज़, और रेफ़रंस टाइप (जैसे, सामान्य क्लास, कलेक्शन, स्ट्रिंग या कमज़ोर, सॉफ़्ट, फ़ाइनलाइज़र, और फ़ैंटम रेफ़रंस).
- ऑब्जेक्ट इंस्टेंस और साइज़: हर ऑब्जेक्ट का शैलो साइज़ (
self_size), उसका हीप रीजन (HEAP_TYPE_APP,HEAP_TYPE_ZYGOTEयाHEAP_TYPE_BOOT_IMAGE), औरNativeAllocationRegistryके ज़रिए रजिस्टर की गई नेटिव मेमोरी. - रेफ़रंस और जीसी रूट: गार्बेज कलेक्शन रूट (जैसे, जेएनआई ग्लोबल और लोकल, Java स्टैक फ़्रेम, और थ्रेड ऑब्जेक्ट) और फ़ील्ड-लेवल की रेफ़रंस चेन. इनसे पता चलता है कि कौनसा ऑब्जेक्ट, किस ऑब्जेक्ट को और किस फ़ील्ड के नाम से रिटेन करता है.
- साइज़िंग मेटाडेटा चुनें: खास फ़्रेमवर्क टाइप के लिए संवेदनशील मेटाडेटा, जैसे कि
Bitmapडाइमेंशन (mWidthऔरmHeight).
- क्या शामिल नहीं किया गया है: असल प्रिमिटिव फ़ील्ड वैल्यू,
Stringवर्ण का कॉन्टेंट, और रॉ अरे पेलोड (byte[],char[], और अन्य प्रिमिटिव अरे). रॉ ऑब्जेक्ट कॉन्टेंट को शामिल न करने से, प्रोडक्शन डिवाइसों पर उपयोगकर्ता की निजता सुरक्षित रहती है. साथ ही, डंप फ़ाइलों का साइज़ काफ़ी छोटा रहता है.
अगले चरण
Perfetto यूज़र इंटरफ़ेस (यूआई) में विज़ुअल जांच के अलावा, PerfettoSQL की मदद से प्रोफ़ाइलों के बारे में क्वेरी की जा सकती है, एक साथ कई ट्रेस का विश्लेषण किया जा सकता है या एआई की मदद से प्रोफ़ाइलों का विश्लेषण किया जा सकता है.