Perfetto UI-তে প্রোফাইল ভিজ্যুয়ালাইজ করা

আপনি টেস্ট ডিভাইস থেকে প্রোফাইল ফিরিয়ে আনার বা আপনার ব্যাকএন্ড থেকে এটি ডাউনলোড করার পরে, টাইমলাইন, থ্রেডের অবস্থা এবং মেমরি রিটেনশন গ্রাফ চেক করতে Perfetto UI-তে ফাইলটি খুলতে পারবেন। এই পৃষ্ঠায় ProfilingManager-এর মাধ্যমে ক্যাপচার করা রিড্যাক্ট করা সিস্টেম ট্রেস ও জাভা হিপ ডাম্প কীভাবে নেভিগেট করতে হয় তা বর্ণনা করা হয়েছে।

সিস্টেম ট্রেস ভিজ্যুয়ালাইজ করুন

সময়ের সাথে সাথে CPU ও থ্রেড অ্যাক্টিভিটি পরীক্ষা করতে Perfetto UI-তে আপনার .perfetto-trace ফাইল খুলুন।

Perfetto UI-তে এডিট করা সিস্টেম ট্রেসের টাইমলাইন
ছবি ১. এডিট করা ট্রেসের উদাহরণ।

ব্যবহারকারীর গোপনীয়তা সুরক্ষিত রাখতে, ProfilingManager অন্যান্য সব প্রসেস থেকে CPU অ্যাক্টিভিটি একটি OtherProcesses ট্র্যাকে একত্রিত করে সিস্টেম ট্রেস রিড্যাক্ট করে। এই সম্মিলিত ট্র্যাকটি পরীক্ষা করে আপনি এখনও নির্ধারণ করতে পারবেন যে আপনার অ্যাপে ধীরগতির কারণ কোনও ইন্টার্নাল বাধা নাকি সামগ্রিক ডিভাইস লোড।

ছবি ২-এ এডিট করা সিস্টেম ট্রেসের প্রধান বিভাগগুলি হাইলাইট করা হয়েছে:

Perfetto UI-তে এডিট করা সিস্টেম ট্রেসের সংখ্যাযুক্ত বিভাগ
ছবি ২. এডিট করা ট্রেসের বিভাগ।
  1. CPU তালিকা: আপনার ডিভাইসে উপলভ্য সব প্রসেসর দেখায়।
  2. CPU টাস্ক: প্রতিটি CPU কোন থ্রেড এক্সিকিউট করছিল তা দেখায়।
  3. অন্যান্য প্রসেস ভিউ: অন্যান্য প্রসেসের মাধ্যমে ব্যবহার করা CPU রিসোর্স দেখায়।
  4. প্রসেস ভিউ: আপনার অ্যাপের প্রসেস দেখায়।
  5. থ্রেড ভিউ: আপনার প্রসেসের মধ্যে চলা থ্রেড এবং সেগুলির থ্রেড স্টেট (রান করার উপযুক্ত (R), রান করছে (R), স্লিপিং (S), নিরবচ্ছিন্ন স্লিপ (D)) দেখায়, যা সরাসরি Linux প্রসেস স্টেটে ম্যাপ করে।
  6. ট্রেস স্লাইস: এই বিভাগে অ্যাপ ডেভেলপার বা ফ্রেমওয়ার্কের যোগ করা ট্রেস অ্যানোটেশন দেখানো হয়। এইসব অ্যানোটেশন Trace.beginSection এবং Trace.endSection-এর মধ্যে হওয়া গণনাকে অন্তর্ভুক্ত করে।

Perfetto UI ও ট্রেস ভিজ্যুয়ালাইজেশন সম্পর্কে আরও জানতে, Perfetto ডকুমেন্ট দেখুন।

Java হিপ ডাম্প ভিজ্যুয়ালাইজ করুন

PROFILING_TYPE_JAVA_HEAP_DUMP ব্যবহার করে জাভা হিপ ডাম্প ক্যাপচার করার পরে, মেমরি লিক শনাক্ত করতে বা মেমরির ব্যবহার অপ্টিমাইজ করতে Perfetto UI-তে ফলাফল হিসেবে পাওয়া .perfetto-java-heap-dump ফাইলটি খুলুন। Heapdump Explorer-এ, আপনি হিপ গ্রাফ এক্সপ্লোর করতে, ক্রমবর্ধমান অবজেক্ট সাইজের ফ্লেম গ্রাফ পরীক্ষা করতে এবং ক্লাস, অবজেক্ট ও ডমিনেটর ব্রাউজ করতে পারবেন, যেমনটি চিত্র ৩-এ দেখানো হয়েছে।

Perfetto UI Heapdump Explorer জাভা হিপ অবজেক্ট সাইজের ফ্লেম গ্রাফ দেখাচ্ছে।
ছবি ৩. Perfetto UI-তে Java হিপ ডাম্প ফ্লেম গ্রাফ।

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-এর মাধ্যমে রেজিস্টার করা সংশ্লিষ্ট নেটিভ মেমরি।
    • রেফারেন্স ও GC রুট: গার্বেজ কালেকশন রুট (যেমন JNI গ্লোবাল ও লোকাল, Java স্ট্যাক ফ্রেম ও থ্রেড অবজেক্ট) এবং ফিল্ড-লেভেল রেফারেন্স চেইন যা দেখায় যে কোন অবজেক্ট অন্য কোন অবজেক্টকে এবং কোন ফিল্ড নামের মাধ্যমে ধরে রাখে।
    • সাইজিং মেটাডেটা বেছে নিন: নির্দিষ্ট ফ্রেমওয়ার্কের ধরনের জন্য সংবেদনশীল নয় এমন মেটাডেটা, যেমন Bitmap ডাইমেনশন (mWidth এবং mHeight)।
  • কী বাদ দেওয়া হয়েছে: প্রকৃত প্রিমিটিভ ফিল্ড ভ্যালু, String অক্ষর কন্টেন্ট এবং র অ্যারে পেলোড (byte[], char[] এবং অন্যান্য প্রিমিটিভ অ্যারে)। র-অবজেক্ট কন্টেন্ট বাদ দিলে প্রোডাকশন ডিভাইসে ব্যবহারকারীর গোপনীয়তা সুরক্ষিত থাকে এবং ডাম্প ফাইলের সাইজ অনেক ছোট হয়।

পরবর্তী ধাপ

Perfetto UI-তে ভিজ্যুয়াল ইন্সপেকশন ছাড়াও, আপনি PerfettoSQL-এর মাধ্যমে প্রোফাইল কোয়েরি করতে, একসাথে অনেক ট্রেস বিশ্লেষণ করতে অথবা AI-এর মাধ্যমে প্রোফাইল বিশ্লেষণ করতে পারবেন।