CPU Profiler-এ ট্রেস ভিউ, রেকর্ড করা ট্রেস থেকে তথ্য দেখার একাধিক উপায় প্রদান করে।
মেথড ট্রেস ও ফাংশন ট্রেসের জন্য, আপনি থ্রেড টাইমলাইনে সরাসরি কল চার্ট এবং বিশ্লেষণ প্যানেল থেকে ফ্লেম চার্ট, টপ ডাউন, বটম আপ ও ইভেন্ট ট্যাব দেখতে পারবেন। কলস্ট্যাক ফ্রেমের জন্য, আপনি কোডের যে অংশটি এক্সিকিউট করা হয়েছে এবং কেন এটি ইনভোক করা হয়েছে তা দেখতে পারেন। সিস্টেম ট্রেসের জন্য, আপনি সরাসরি থ্রেড টাইমলাইনে ট্রেস ইভেন্ট এবং বিশ্লেষণ প্যানে ফ্লেম চার্ট, টপ ডাউন, বটম আপ এবং ইভেন্ট ট্যাব দেখতে পারবেন।
কল চার্ট বা ট্রেস ইভেন্ট আরও সহজে নেভিগেট করার জন্য মাউস ও কীবোর্ড শর্টকাট উপলভ্য।
কল চার্ট ব্যবহার করে ট্রেস পরীক্ষা করা
কল চার্ট মেথড ট্রেস বা ফাংশন ট্রেসের গ্রাফিক্যাল উপস্থাপনা প্রদান করে, যেখানে কলের সময়কাল ও সময় অনুভূমিক অক্ষে এবং কল করা হয়েছে এমন ব্যক্তিদের উল্লম্ব অক্ষে দেখানো হয়। সিস্টেম API-তে করা কল কমলা রঙে, আপনার অ্যাপের নিজস্ব পদ্ধতিতে করা কল সবুজ রঙে এবং থার্ড-পার্টি API-তে (Java ল্যাঙ্গুয়েজ API সহ) করা কল নীল রঙে দেখানো হয়। ছবি ৪-এ একটি উদাহরণ কল চার্ট দেখানো হয়েছে এবং কোনও নির্দিষ্ট পদ্ধতি বা ফাংশনের জন্য সেল্ফ টাইম, চিলড্রেন টাইম ও মোট সময়ের ধারণা ব্যাখ্যা করা হয়েছে। আপনি টপ ডাউন ও বটম আপ ব্যবহার করে ট্রেস কীভাবে পরীক্ষা করবেন সেই সংক্রান্ত বিভাগে এইসব ধারণা সম্পর্কে আরও জানতে পারবেন।
ফ্লেম চার্ট ট্যাব ব্যবহার করে ট্রেস পরীক্ষা করা
ফ্লেম চার্ট ট্যাবে একটি ইনভার্টেড কল চার্ট থাকে যা একই ধরনের কল স্ট্যাক একত্রিত করে। অর্থাৎ, একই ধরনের পদ্ধতি বা ফাংশন যা একই কলারের ক্রম শেয়ার করে, সেগুলি সংগ্রহ করা হয় এবং ফ্লেম চার্টে একটি বড় বার হিসেবে দেখানো হয় (কল চার্টের মতো একাধিক ছোট বার হিসেবে দেখানোর পরিবর্তে)। এর ফলে, কোন পদ্ধতি বা ফাংশন সবচেয়ে বেশি সময় নেয় তা সহজেই দেখা যায়। তবে, এর অর্থ হল অনুভূমিক অক্ষ কোনও টাইমলাইন দেখায় না; পরিবর্তে, এটি প্রতিটি পদ্ধতি বা ফাংশন কার্যকর করতে যে পরিমাণ সময় নেয় তা দেখায়।
এই ধারণাটি ব্যাখ্যা করতে, ছবি ২-এ কল চার্টটি দেখুন। মনে রাখবেন যে পদ্ধতি D, B-তে একাধিক কল করে (B1, B2 এবং B3) এবং B-তে করা এইসব কলের মধ্যে কিছু C-তে কল করে (C1 এবং C3)।
যেহেতু B1, B2 এবং B3 একই ক্রমের কলার (A → D → B) শেয়ার করে, তাই তাদের একত্রিত করা হয়, যেমন ৩ নম্বর ছবিতে দেখানো হয়েছে। একইভাবে, C1 এবং C3 একত্রিত করা হয়েছে কারণ তারা একই কলারের ক্রম (A → D → B → C) শেয়ার করে; মনে রাখবেন যে C2 অন্তর্ভুক্ত করা হয়নি কারণ এটির কলারের ক্রম (A → D → C) আলাদা।
ফ্লেম চার্ট তৈরি করতে অ্যাগ্রিগেট করা কল ব্যবহার করা হয়, যেমনটি ছবি ৪-এ দেখানো হয়েছে। মনে রাখবেন, ফ্লেম চার্টে দেখানো যেকোনও কলের ক্ষেত্রে, যে কলি সবচেয়ে বেশি সিপিইউ টাইম ব্যবহার করে তাকে প্রথমে দেখানো হয়।
টপ ডাউন এবং বটম আপ ব্যবহার করে ট্রেস পরীক্ষা করুন
টপ ডাউন ট্যাবে কলের একটি তালিকা দেখা যায়, যেখানে কোনও পদ্ধতি বা ফাংশন নোড বড় করলে, তার কলি দেখা যায়। ৫ নম্বর ছবিতে ১ নম্বর ছবির কল চার্টের জন্য টপ ডাউন গ্রাফ দেখানো হয়েছে। গ্রাফের প্রতিটি তীরচিহ্ন কলার থেকে কলি পর্যন্ত পয়েন্ট করে।
ছবি ৫-এ যেমন দেখানো হয়েছে, টপ ডাউন ট্যাবে পদ্ধতি A-এর জন্য নোড বড় করলে সেটির কলি, পদ্ধতি B ও D দেখা যায়। এর পরে, D পদ্ধতির জন্য নোড বড় করলে তার কলি, B এবং C পদ্ধতি দেখা যায়। ফ্লেম চার্ট ট্যাবের মতো, টপ ডাউন ট্রি একই কল স্ট্যাক শেয়ার করে এমন অভিন্ন পদ্ধতির জন্য ট্রেস তথ্য একত্রিত করে। অর্থাৎ, ফ্লেম চার্ট ট্যাব টপ ডাউন ট্যাবের গ্রাফিক্যাল প্রতিনিধিত্ব প্রদান করে।
টপ ডাউন ট্যাবে নিম্নলিখিত তথ্য দেওয়া থাকে যা প্রতিটি কলে ব্যয় করা সিপিইউ টাইম বর্ণনা করতে সাহায্য করে (সময়কে থ্রেডের মোট সময়ের শতাংশ হিসেবেও দেখানো হয় বেছে নেওয়া রেঞ্জের উপর):
- সেল্ফ: পদ্ধতি বা ফাংশন কল নিজের কোড এক্সিকিউট করতে যে সময় নেয়, তার কলির কোড নয়, যেমন পদ্ধতি D-এর জন্য চিত্র ১-এ দেখানো হয়েছে।
- চিলড্রেন: পদ্ধতি বা ফাংশন কল তার নিজস্ব কোড নয়, বরং তার কলি কার্যকর করতে যে সময় ব্যয় করেছে, যেমন পদ্ধতি D-এর জন্য চিত্র ১-এ দেখানো হয়েছে।
- মোট: পদ্ধতির নিজস্ব এবং চাইল্ড সময়ের যোগফল। এটি অ্যাপটি কল কার্যকর করতে মোট কত সময় ব্যয় করেছে তা দেখায়, যেমনটি পদ্ধতি D-এর জন্য চিত্র ১-এ দেখানো হয়েছে।
ছবি ৫. একটি টপ ডাউন ট্রি।
ছবি ৬. ছবি ৫ থেকে পদ্ধতি C-এর জন্য একটি বটম আপ ট্রি।
নিচ থেকে উপরে ট্যাবে কলের তালিকা দেখা যায়, যেখানে কোনও ফাংশন বা মেথডের নোড বড় করলে, কলারের তথ্য দেখা যায়। ছবি ৫-এ দেখানো ট্রেসের উদাহরণ ব্যবহার করে, ছবি ৬-এ পদ্ধতি C-এর জন্য বটম আপ ট্রি দেখানো হয়েছে। বটম আপ ট্রিতে মেথড C-এর জন্য নোড খুললে এর প্রতিটি অনন্য কলার, মেথড B এবং D দেখায়। মনে রাখবেন যে, B দুবার C-কে কল করলেও, বটম আপ ট্রিতে C মেথডের জন্য নোড বড় করার সময় B-কে একবারই দেখানো হয়। তারপরে, B-এর জন্য নোড বড় করলে তার কলার, পদ্ধতি A এবং D দেখা যায়।
বটম আপ ট্যাবটি পদ্ধতি বা ফাংশনগুলিকে সাজানোর জন্য উপযোগী, যেগুলি সবচেয়ে বেশি (বা সবচেয়ে কম) সিপিইউ টাইম ব্যবহার করে। কোন কলার সেইসব পদ্ধতি বা ফাংশন কল করার জন্য সবচেয়ে বেশি সিপিইউ টাইম ব্যয় করে তা নির্ধারণ করতে আপনি প্রতিটি নোড পরীক্ষা করতে পারবেন। টপ ডাউন ট্রির তুলনায়, বটম আপ ট্রির প্রতিটি পদ্ধতি বা ফাংশনের টাইমিং সংক্রান্ত তথ্য প্রতিটি ট্রির (টপ নোড) উপরে থাকা পদ্ধতির রেফারেন্স হিসেবে থাকে। এছাড়াও, সিপিইউ টাইমকে সেই রেকর্ডিংয়ের সময় থ্রেডের মোট সময়ের শতাংশ হিসেবে দেখানো হয়। শীর্ষ নোড এবং এর কলারের (সাব-নোড) জন্য টাইমিং তথ্য কীভাবে ব্যাখ্যা করতে হয় তা ব্যাখ্যা করতে নিম্নলিখিত সারণী সাহায্য করে।
| নিজে | বাচ্চা | মোট | |
|---|---|---|---|
| বটম আপ ট্রির (টপ নোড) সবচেয়ে উপরে থাকা পদ্ধতি বা ফাংশন | নিজস্ব কোড এক্সিকিউট করতে পদ্ধতি বা ফাংশনের মোট কত সময় লেগেছে তা দেখায়, কলির কোড এক্সিকিউট করার সময় এতে অন্তর্ভুক্ত থাকে না। টপ ডাউন ট্রিয়ের তুলনায়, এই টাইমিং সংক্রান্ত তথ্য রেকর্ডিংয়ের সময়সীমা জুড়ে এই পদ্ধতি বা ফাংশনে করা সব কলের যোগফল দেখায়। | মেথড বা ফাংশন তার নিজস্ব কোড নয়, বরং তার কলি এক্সিকিউট করতে মোট কত সময় ব্যয় করেছে তা দেখায়। টপ ডাউন ট্রির তুলনায়, এই টাইমিং সংক্রান্ত তথ্য রেকর্ডিংয়ের সময়সীমা জুড়ে এই পদ্ধতি বা ফাংশনের কলির সব কলের যোগফল দেখায়। | সেল্ফ টাইম ও চিলড্রেন টাইমের যোগফল। |
| কলার (সাব-নোড) | কলারের দ্বারা কল করার সময় কলির মোট সেল্ফ টাইম দেখায়। উদাহরণ হিসেবে ৬ নম্বর ছবিতে দেখানো বটম-আপ ট্রি ব্যবহার করে, B মেথডের সেল্ফ টাইম, B-এর দ্বারা কল করা হলে C মেথডের প্রতিটি এক্সিকিউশনের সেল্ফ টাইমের যোগফলের সমান হবে। | কলারের দ্বারা কল করা হলে, কল প্রাপকের মোট চিলড্রেন টাইম দেখায়। উদাহরণ হিসেবে, ছবি ৬-এ দেখানো বটম-আপ ট্রি ব্যবহার করে, মেথড B-এর চিলড্রেন টাইম, মেথড B-এর দ্বারা কল করা মেথড C-এর প্রতিটি এক্সিকিউশনের চিলড্রেন টাইমের যোগফলের সমান হবে। | সেল্ফ টাইম ও চিলড্রেন টাইমের যোগফল। |
ইভেন্ট টেবিল ব্যবহার করে ট্রেস পরীক্ষা করা
বর্তমানে বেছে নেওয়া থ্রেডের সব কল ইভেন্ট টেবিলে তালিকাভুক্ত করা হয়। আপনি কলাম হেডারে ক্লিক করে সেগুলি সাজাতে পারবেন। টেবিলের কোনও সারি বেছে নিয়ে, আপনি টাইমলাইন নেভিগেট করে বেছে নেওয়া কলের শুরু ও শেষের সময় দেখতে পারবেন। এটি আপনাকে টাইমলাইনে ইভেন্ট সঠিকভাবে খুঁজে পেতে সাহায্য করে।
কলস্ট্যাক ফ্রেম পরীক্ষা করুন
কোডের কোন অংশ এক্সিকিউট করা হয়েছে এবং কেন এটি ইনভোক করা হয়েছে তা বোঝার জন্য কলস্ট্যাক উপযোগী। Java বা Kotlin প্রোগ্রামের জন্য কলস্ট্যাক স্যাম্পেল রেকর্ডিং সংগ্রহ করা হলে, কলস্ট্যাকে সাধারণত শুধু Java বা Kotlin কোডই থাকে না, বরং JNI নেটিভ কোড, Java ভার্চুয়াল মেশিন (যেমন,
android::AndroidRuntime::start) এবং সিস্টেম কার্নেল ([kernel.kallsyms]+offset)-এর ফ্রেমও থাকে।
এর কারণ হল, Java বা Kotlin প্রোগ্রাম সাধারণত
Java ভার্চুয়াল মেশিনের মাধ্যমে এক্সিকিউট করা হয়। প্রোগ্রামটি চালানোর জন্য এবং সিস্টেম ও হার্ডওয়্যারের সাথে প্রোগ্রামটির যোগাযোগের জন্য নেটিভ কোড প্রয়োজন।
প্রোফাইলার নির্ভুলতার জন্য এই ফ্রেমগুলি উপস্থাপন করে; তবে, আপনার তদন্তের উপর নির্ভর করে, আপনি এই অতিরিক্ত কল ফ্রেমগুলি উপযোগী মনে করতে পারেন বা নাও করতে পারেন। প্রোফাইলার এমন একটি উপায় প্রদান করে যার মাধ্যমে আপনি আগ্রহী নন এমন ফ্রেমগুলি আড়াল করতে পারেন, যাতে আপনি তদন্তের জন্য অপ্রাসঙ্গিক তথ্য লুকাতে পারেন।
নিচের উদাহরণে, ট্রেসে অনেক ফ্রেম আছে যেগুলি
[kernel.kallsyms]+offset হিসেবে লেবেল করা আছে, যা বর্তমানে ডেভেলপমেন্টের জন্য উপযোগী নয়।
এই ফ্রেমগুলিকে একটিতে সঙ্কুচিত করতে, আপনি টুলবার থেকে ফ্রেম সঙ্কুচিত করুন
বোতামটি বেছে নেবেন, সঙ্কুচিত করার জন্য পাথ বেছে নেবেন এবং আপনার পরিবর্তনগুলি প্রয়োগ করতে প্রয়োগ করুন
বোতামটি বেছে নেবেন। এই উদাহরণে, পাথ হল [kernel.kallsyms]।
এটি করলে, নিচে দেখানো ছবির মতো, বাঁদিকের ও ডানদিকের প্যানেলে বেছে নেওয়া পাথের সাথে সম্পর্কিত ফ্রেমগুলি আড়াল হয়ে যায়।
সিস্টেম ট্রেস পরীক্ষা করুন
সিস্টেম ট্রেস পরীক্ষা করার সময়, আপনি প্রতিটি থ্রেডে ঘটা ইভেন্টের বিবরণ দেখতে থ্রেড টাইমলাইনে ট্রেস ইভেন্ট পরীক্ষা করতে পারবেন। ইভেন্টের নাম এবং প্রতিটি স্ট্যাটাসে কাটানো সময় দেখতে, কোনও ইভেন্টের উপর মাউস পয়েন্টার নিয়ে যান। বিশ্লেষণ প্যানে আরও তথ্য দেখতে কোনও ইভেন্টে ক্লিক করুন।
সিস্টেম ট্রেস পরীক্ষা করুন: সিপিইউ (CPU) কোর
CPU শিডিউলিং ডেটা ছাড়াও, সিস্টেম ট্রেসে কোর অনুযায়ী CPU ফ্রিকোয়েন্সিও অন্তর্ভুক্ত থাকে। এটি প্রতিটি কোরে অ্যাক্টিভিটির পরিমাণ দেখায় এবং আধুনিক মোবাইল প্রসেসরে কোনটি "বড়" বা "ছোট" কোর সে সম্পর্কে আপনাকে ধারণা দিতে পারে।
CPU কোর প্যানে (ছবি ৮-এ যেমন দেখানো হয়েছে) প্রতিটি কোরে শিডিউল করা থ্রেড অ্যাক্টিভিটি দেখানো হয়। কোনও থ্রেড অ্যাক্টিভিটির উপর মাউস পয়েন্টার নিয়ে গিয়ে দেখুন যে নির্দিষ্ট সময়ে এই কোর কোন থ্রেডে চলছে।
সিস্টেম ট্রেস তথ্য পরীক্ষা করার ব্যাপারে অতিরিক্ত তথ্যের জন্য, systrace
ডকুমেন্টেশনের UI পারফর্ম্যান্স সংক্রান্ত সমস্যা পরীক্ষা করা বিভাগ দেখুন।
সিস্টেম ট্রেস চেক করুন: ফ্রেম রেন্ডারিং টাইমলাইন
আপনি পরীক্ষা করে দেখতে পারেন যে আপনার অ্যাপের প্রধান থ্রেডে প্রতিটি ফ্রেম রেন্ডার করতে কত সময় লাগে এবং RenderThread-এ গিয়ে UI জ্যাঙ্ক এবং কম ফ্রেমরেটের কারণগুলি তদন্ত করতে পারেন। UI জ্যাঙ্ক কমাতে সাহায্য করতে এবং তদন্ত করতে কীভাবে সিস্টেম ট্রেস ব্যবহার করবেন সে সম্পর্কে জানতে, UI জ্যাঙ্ক শনাক্তকরণ দেখুন।
সিস্টেম ট্রেস চেক করুন: প্রসেস মেমরি (RSS)
Android 9 বা তার পরবর্তী যেকোনও ভার্সনে রান করা ডিভাইসে ডিপ্লয় করা অ্যাপের ক্ষেত্রে, প্রসেস মেমরি (RSS) বিভাগটি অ্যাপের বর্তমানে ব্যবহার করা ফিজিক্যাল মেমরির পরিমাণ দেখায়।
মোট
আপনার প্রসেস বর্তমানে মোট যে পরিমাণ ফিজিক্যাল মেমরি ব্যবহার করছে। Unix-ভিত্তিক সিস্টেমে, এটি "রেসিডেন্ট সেট সাইজ" নামে পরিচিত, এবং এটি পরিচয় গোপন রেখে করা অ্যালোকেশন, ফাইল ম্যাপিং এবং শেয়ার করা মেমরি অ্যালোকেশনের মাধ্যমে ব্যবহৃত সমস্ত মেমরির কম্বিনেশন।
Windows ডেভেলপারদের জন্য, রেসিডেন্ট সেট সাইজ হল ওয়ার্কিং সেট সাইজের অনুরূপ।
অ্যালোকেট করা হয়েছে
এই কাউন্টার ট্র্যাক করে যে প্রসেসের সাধারণ মেমরি অ্যালোকেশন দ্বারা বর্তমানে কতটা ফিজিক্যাল মেমরি ব্যবহার করা হচ্ছে। এগুলি হল এমন অ্যালোকেশন যা
বেনামী (নির্দিষ্ট ফাইলের দ্বারা ব্যাক-আপ নেওয়া হয় না) এবং ব্যক্তিগত (শেয়ার করা হয় না)। বেশিরভাগ
অ্যাপ্লিকেশনে, এগুলি হিপ অ্যালোকেশন (malloc বা
new সহ) এবং স্ট্যাক মেমরি দিয়ে তৈরি হয়। ফিজিক্যাল মেমরি থেকে সোয়্যাপ আউট করা হলে, এইসব
অ্যালোকেশন সিস্টেম সোয়্যাপ ফাইলে লেখা হয়।
ফাইল ম্যাপিং
এই কাউন্টারটি ফাইল ম্যাপিংয়ের জন্য প্রসেসটি যে পরিমাণ ফিজিক্যাল মেমরি ব্যবহার করছে তা ট্র্যাক করে – অর্থাৎ, মেমরি ম্যানেজার দ্বারা ফাইলের মেমরিকে মেমরির একটি অঞ্চলে ম্যাপ করা।
শেয়ার করা হয়েছে
এই কাউন্টার ট্র্যাক করে যে এই প্রসেস এবং সিস্টেমের অন্যান্য প্রসেসের মধ্যে মেমরি শেয়ার করার জন্য কতটা ফিজিক্যাল মেমরি ব্যবহার করা হচ্ছে।