CPU প্রোফাইলারের ট্রেস ভিউ রেকর্ড করা ট্রেস থেকে তথ্য দেখার বিভিন্ন উপায় প্রদান করে।
পদ্ধতি ট্রেস এবং ফাংশন ট্রেসের জন্য, আপনি বিশ্লেষণ ফলক থেকে সরাসরি থ্রেড টাইমলাইনে এবং ফ্লেম চার্ট , টপ ডাউন , বটম আপ , এবং ইভেন্ট ট্যাবে কল চার্ট দেখতে পারেন৷ কলস্ট্যাক ফ্রেমের জন্য, আপনি কোডের যে অংশটি কার্যকর করা হয়েছে এবং কেন এটি চালু করা হয়েছে তা দেখতে পারেন। সিস্টেম ট্রেসের জন্য, আপনি থ্রেডের টাইমলাইনে সরাসরি ইভেন্টগুলি দেখতে পারেন এবং বিশ্লেষণ ফলক থেকে ফ্লেম চার্ট , টপ ডাউন , বটম আপ , এবং ইভেন্ট ট্যাবগুলি দেখতে পারেন৷
কল চার্ট বা ট্রেস ইভেন্টগুলির সহজে নেভিগেশনের জন্য মাউস এবং কীবোর্ড শর্টকাটগুলি উপলব্ধ৷
কল চার্ট ব্যবহার করে ট্রেস পরিদর্শন করুন
কল চার্ট একটি পদ্ধতি ট্রেস বা ফাংশন ট্রেসের একটি গ্রাফিকাল উপস্থাপনা প্রদান করে, যেখানে একটি কলের সময়কাল এবং সময় অনুভূমিক অক্ষে উপস্থাপন করা হয় এবং এর কলগুলি উল্লম্ব অক্ষ বরাবর দেখানো হয়। সিস্টেম API-এ কলগুলি কমলা রঙে দেখানো হয়, আপনার অ্যাপের নিজস্ব পদ্ধতিতে করা কলগুলি সবুজ রঙে দেখানো হয় এবং তৃতীয় পক্ষের API-এ (জাভা ভাষা API সহ) কলগুলি নীল রঙে দেখানো হয়৷ চিত্র 4 একটি উদাহরণ কল চার্ট দেখায় এবং একটি প্রদত্ত পদ্ধতি বা ফাংশনের জন্য স্ব-সময়, শিশুদের সময় এবং মোট সময়ের ধারণাকে চিত্রিত করে। টপ ডাউন এবং বটম আপ ব্যবহার করে ট্রেসগুলি কীভাবে পরিদর্শন করা যায় সে বিভাগে আপনি এই ধারণাগুলি সম্পর্কে আরও শিখতে পারেন।
চিত্র 1. একটি উদাহরণ কল চার্ট যা নিজেকে, শিশুদের এবং পদ্ধতি D-এর জন্য মোট সময়কে চিত্রিত করে।
টিপ: একটি পদ্ধতি বা ফাংশনের সোর্স কোড জাম্প করতে, এটিতে ডান-ক্লিক করুন এবং জাম্প টু সোর্স নির্বাচন করুন। এটি বিশ্লেষণ ফলক ট্যাব থেকে কাজ করে.
ফ্লেম চার্ট ট্যাব ব্যবহার করে ট্রেস পরিদর্শন করুন
ফ্লেম চার্ট ট্যাব একটি উল্টানো কল চার্ট প্রদান করে যা অভিন্ন কল স্ট্যাকগুলিকে একত্রিত করে। অর্থাৎ, অভিন্ন পদ্ধতি বা ফাংশন যা কলকারীদের একই ক্রম ভাগ করে সেগুলি সংগ্রহ করা হয় এবং একটি শিখা চার্টে একটি দীর্ঘ বার হিসাবে উপস্থাপন করা হয় (এগুলিকে একাধিক ছোট বার হিসাবে প্রদর্শন করার পরিবর্তে, যেমন একটি কল চার্টে দেখানো হয়েছে)। এটি কোন পদ্ধতি বা ফাংশন সবচেয়ে বেশি সময় নেয় তা দেখতে সহজ করে তোলে। যাইহোক, এর মানে হল যে অনুভূমিক অক্ষ একটি টাইমলাইন প্রতিনিধিত্ব করে না; পরিবর্তে, এটি প্রতিটি পদ্ধতি বা ফাংশন কার্যকর করতে কতটা সময় নেয় তা নির্দেশ করে।
এই ধারণাটি ব্যাখ্যা করতে সাহায্য করার জন্য, চিত্র 2-এ কল চার্টটি বিবেচনা করুন। মনে রাখবেন যে পদ্ধতি D B-এ একাধিক কল করে (B 1 , B 2 , এবং B 3 ), এবং B তে সেই কলগুলির মধ্যে কয়েকটি C (C 1) কে কল করে এবং সি 3 )।
চিত্র 2. একাধিক পদ্ধতি কল সহ একটি কল চার্ট যা কলকারীদের একটি সাধারণ ক্রম ভাগ করে।
কারণ B 1 , B 2 , এবং B 3 কলারদের একই ক্রম ভাগ করে (A → D → B) তারা একত্রিত হয়, যেমন চিত্র 3-এ দেখানো হয়েছে। একইভাবে, C 1 এবং C 3 একত্রিত হয়েছে কারণ তারা কলকারীদের একই ক্রম ভাগ করে। (A → D → B → C); মনে রাখবেন যে C 2 অন্তর্ভুক্ত নয় কারণ এতে কলকারীদের একটি ভিন্ন ক্রম রয়েছে (A → D → C)।
চিত্র 3. অভিন্ন পদ্ধতিগুলি একত্রিত করা যা একই কল স্ট্যাক ভাগ করে।
সমষ্টিগত কলগুলি ফ্লেম চার্ট তৈরি করতে ব্যবহৃত হয়, যেমন চিত্র 4-এ দেখানো হয়েছে। মনে রাখবেন যে, একটি ফ্লেম চার্টে যে কোনও প্রদত্ত কলের জন্য, যে কলগুলি সর্বাধিক CPU সময় ব্যবহার করে তা প্রথমে উপস্থিত হয়।
চিত্র 4. চিত্র 5 এ দেখানো কল চার্টের একটি শিখা চার্ট উপস্থাপনা।
টপ ডাউন এবং বটম আপ ব্যবহার করে ট্রেস পরিদর্শন করুন
টপ ডাউন ট্যাবটি কলের একটি তালিকা প্রদর্শন করে যেখানে একটি পদ্ধতি বা ফাংশন নোড প্রসারিত করা হলে তার কলগুলি প্রদর্শন করা হয়। চিত্র 5 চিত্র 1-এ কল চার্টের জন্য একটি টপ ডাউন গ্রাফ দেখায়। গ্রাফের প্রতিটি তীর একজন কলার থেকে একজন কলির দিকে নির্দেশ করে।
চিত্র 5-এ দেখানো হয়েছে, টপ ডাউন ট্যাবে মেথড A-এর জন্য নোড প্রসারিত করলে এর ক্যালি, মেথড B এবং D প্রদর্শিত হয়। এর পরে, পদ্ধতি D-এর জন্য নোড প্রসারিত করলে এর ক্যালি, মেথড B এবং C এবং আরও অনেক কিছু দেখা যায়। ফ্লেম চার্ট ট্যাবের মতো, উপরের নিচের গাছটি অভিন্ন পদ্ধতির জন্য তথ্য সংগ্রহ করে যা একই কল স্ট্যাক ভাগ করে। অর্থাৎ, ফ্লেম চার্ট ট্যাব টপ ডাউন ট্যাবের গ্রাফিক্যাল উপস্থাপনা প্রদান করে।
টপ ডাউন ট্যাব প্রতিটি কলে কাটানো CPU সময় বর্ণনা করতে সাহায্য করার জন্য নিম্নলিখিত তথ্য প্রদান করে (সময়গুলিকে নির্বাচিত পরিসরে থ্রেডের মোট সময়ের শতাংশ হিসাবেও উপস্থাপন করা হয়):
- স্বয়ং: পদ্ধতি বা ফাংশন কলটি তার নিজস্ব কোড কার্যকর করতে যে সময় ব্যয় করেছে এবং তার কলের নয়, যেমনটি পদ্ধতি D-এর জন্য চিত্র 1-এ দেখানো হয়েছে।
- শিশু: পদ্ধতি বা ফাংশন কলটি যে সময়টি তার callees চালানোর জন্য ব্যয় করেছে এবং তার নিজস্ব কোড নয়, যেমনটি পদ্ধতি D-এর জন্য চিত্র 1 এ দেখানো হয়েছে।
- মোট: পদ্ধতির স্ব ও শিশুদের সময়ের যোগফল। এটি একটি কল চালানোর জন্য অ্যাপটির ব্যয় করা মোট সময়কে প্রতিনিধিত্ব করে, যেমন D পদ্ধতির জন্য চিত্র 1 এ দেখানো হয়েছে।
![](https://developer.android.com/static/studio/images/profile/top_down_tree-2X.png?authuser=0&hl=bn)
চিত্র 5. একটি টপ ডাউন গাছ।
![](https://developer.android.com/static/studio/images/profile/bottom_up_tree-2X.png?authuser=0&hl=bn)
চিত্র 6. চিত্র 5 থেকে পদ্ধতি C এর জন্য একটি নীচের উপরে গাছ।
বটম আপ ট্যাব কলগুলির একটি তালিকা প্রদর্শন করে যেখানে একটি ফাংশন বা পদ্ধতির নোড প্রসারিত করা তার কলারদের প্রদর্শন করে। চিত্র 5-এ দেখানো উদাহরণের ট্রেস ব্যবহার করে, চিত্র 6 পদ্ধতি C-এর জন্য একটি নীচের উপরে গাছ সরবরাহ করে। নীচের দিকের গাছে পদ্ধতি C-এর জন্য নোড খোলার ফলে প্রতিটি অনন্য কলার, পদ্ধতি B এবং D প্রদর্শন করা হয়। উল্লেখ্য যে, যদিও B C কে কল করে দুইবার, B শুধুমাত্র একবার প্রদর্শিত হয় যখন নিচের উপরে গাছে পদ্ধতি C-এর জন্য নোড প্রসারিত করা হয়। এর পরে, B-এর জন্য নোড প্রসারিত করলে তার কলার, পদ্ধতি A এবং D প্রদর্শন করে।
বটম আপ ট্যাবটি সবচেয়ে বেশি (বা কম) সিপিইউ সময় ব্যবহার করে এমন পদ্ধতি বা ফাংশন বাছাই করার জন্য উপযোগী। আপনি প্রতিটি নোড পরিদর্শন করতে পারেন কোন কলকারীরা সেই পদ্ধতি বা ফাংশনগুলিকে আহ্বান করতে সবচেয়ে বেশি CPU সময় ব্যয় করে তা নির্ধারণ করতে। টপ ডাউন ট্রির সাথে তুলনা করে, নিচের আপ ট্রিতে প্রতিটি পদ্ধতি বা ফাংশনের সময়ের তথ্য প্রতিটি গাছের (শীর্ষ নোড) উপরের পদ্ধতির রেফারেন্সে থাকে। CPU সময়কে সেই রেকর্ডিংয়ের সময় থ্রেডের মোট সময়ের শতাংশ হিসাবেও উপস্থাপন করা হয়। উপরের নোড এবং এর কলারদের (সাব-নোড) জন্য টাইমিং তথ্য কীভাবে ব্যাখ্যা করতে হয় তা নিম্নলিখিত টেবিলটি ব্যাখ্যা করতে সহায়তা করে।
স্ব | শিশুরা | মোট | |
---|---|---|---|
নিচের উপরের গাছের উপরে পদ্ধতি বা ফাংশন (শীর্ষ নোড) | পদ্ধতি বা ফাংশনটি তার নিজস্ব কোড কার্যকর করার জন্য ব্যয় করা মোট সময়কে প্রতিনিধিত্ব করে এবং এটির কলে নয়। টপ ডাউন ট্রির তুলনায়, এই সময়ের তথ্য রেকর্ডিংয়ের সময়কাল ধরে এই পদ্ধতি বা ফাংশনে সমস্ত কলের সমষ্টিকে উপস্থাপন করে। | পদ্ধতি বা ফাংশনটি তার কলে চালানোর জন্য ব্যয় করা মোট সময়কে প্রতিনিধিত্ব করে এবং তার নিজস্ব কোড নয়। টপ ডাউন ট্রির সাথে তুলনা করে, এই সময়ের তথ্য রেকর্ডিং এর সময়কাল ধরে এই পদ্ধতি বা ফাংশনের কলে সমস্ত কলের যোগফলকে উপস্থাপন করে। | স্ব-সময় এবং শিশুদের সময়ের যোগফল। |
কলার (সাব-নোড) | কলকারীর দ্বারা কল করার সময় কলকারীর মোট স্ব-সময়ের প্রতিনিধিত্ব করে। উদাহরণ হিসাবে চিত্র 6-এ নীচের উপরের গাছটি ব্যবহার করে, পদ্ধতি B-এর জন্য স্ব-সময় B দ্বারা ডাকার সময় পদ্ধতি C-এর প্রতিটি সম্পাদনের জন্য স্ব-সময়ের সমষ্টির সমান হবে। | কলকারীর দ্বারা আহ্বান করার সময় কলির মোট শিশু সময়কে প্রতিনিধিত্ব করে। উদাহরণ হিসাবে চিত্র 6-এ নীচের উপরের গাছটি ব্যবহার করে, পদ্ধতি B-এর জন্য শিশুদের সময় B দ্বারা ডাকার সময় পদ্ধতি C-এর প্রতিটি সম্পাদনের জন্য শিশুদের সময়ের যোগফলের সমান হবে। | স্ব-সময় এবং শিশুদের সময়ের যোগফল। |
দ্রষ্টব্য: প্রদত্ত রেকর্ডিংয়ের জন্য, প্রোফাইলার ফাইলের আকারের সীমায় পৌঁছে গেলে Android স্টুডিও নতুন ডেটা সংগ্রহ করা বন্ধ করে দেয় (তবে, এটি রেকর্ডিং বন্ধ করে না)। ইন্সট্রুমেন্টেড ট্রেসগুলি সম্পাদন করার সময় এটি সাধারণত আরও দ্রুত ঘটে কারণ এই ধরণের ট্রেসিং একটি নমুনাযুক্ত ট্রেসের তুলনায় অল্প সময়ের মধ্যে আরও ডেটা সংগ্রহ করে। আপনি যদি পরিদর্শনের সময়কে রেকর্ডিংয়ের সময়কালের মধ্যে প্রসারিত করেন যা সীমাতে পৌঁছানোর পরে ঘটেছিল, ট্রেস ফলকের সময় ডেটা পরিবর্তিত হয় না (কারণ কোনও নতুন ডেটা উপলব্ধ নেই)। অতিরিক্তভাবে, ট্রেস ফলকটি সময় সংক্রান্ত তথ্যের জন্য NaN প্রদর্শন করে যখন আপনি একটি রেকর্ডিংয়ের শুধুমাত্র অংশটি নির্বাচন করেন যার কোনো ডেটা উপলব্ধ নেই।
ইভেন্ট টেবিল ব্যবহার করে ট্রেস পরিদর্শন করুন
ইভেন্ট টেবিল বর্তমানে নির্বাচিত থ্রেডে সমস্ত কল তালিকাভুক্ত করে। আপনি কলাম হেডারে ক্লিক করে তাদের সাজাতে পারেন। সারণীতে একটি সারি নির্বাচন করে, আপনি নির্বাচিত কলের শুরু এবং শেষ সময়ে টাইমলাইনে নেভিগেট করতে পারেন। এটি আপনাকে টাইমলাইনে ইভেন্টগুলি সঠিকভাবে সনাক্ত করতে দেয়।
চিত্র 7. বিশ্লেষণ প্যানে ইভেন্ট ট্যাব দেখা।
কলস্ট্যাক ফ্রেম পরিদর্শন করুন
কোডের কোন অংশটি কার্যকর করা হয়েছে এবং কেন এটি চালু করা হয়েছে তা বোঝার জন্য কলস্ট্যাকগুলি কার্যকর। যদি একটি জাভা/কোটলিন প্রোগ্রামের জন্য একটি কলস্ট্যাকের নমুনা রেকর্ডিং সংগ্রহ করা হয়, তবে কলস্ট্যাকে সাধারণত শুধুমাত্র জাভা/কোটলিন কোড নয়, তবে JNI নেটিভ কোড, জাভা ভার্চুয়াল মেশিন (যেমন, android::AndroidRuntime::start
) থেকে ফ্রেমগুলিও অন্তর্ভুক্ত থাকে। সিস্টেম কার্নেল ( [kernel.kallsyms]+offset
)। এটি কারণ একটি জাভা/কোটলিন প্রোগ্রাম সাধারণত একটি জাভা ভার্চুয়াল মেশিনের মাধ্যমে সঞ্চালিত হয়। প্রোগ্রামটি নিজেই চালানোর জন্য এবং সিস্টেম এবং হার্ডওয়্যারের সাথে কথা বলার জন্য নেটিভ কোড প্রয়োজন। প্রোফাইলার স্পষ্টতার জন্য এই ফ্রেমগুলি উপস্থাপন করে; যাইহোক, আপনার তদন্তের উপর নির্ভর করে, আপনি এই অতিরিক্ত কল ফ্রেমগুলি দরকারী খুঁজে পেতে পারেন বা নাও পেতে পারেন। প্রোফাইলার এমন ফ্রেমগুলিকে ভেঙে ফেলার একটি উপায় প্রদান করে যা আপনি আগ্রহী নন যাতে আপনি আপনার তদন্তের জন্য অপ্রাসঙ্গিক তথ্য লুকাতে পারেন৷
নীচের উদাহরণে, নীচের ট্রেসটিতে [kernel.kallsyms]+offset
লেবেলযুক্ত অনেক ফ্রেম রয়েছে, যা বর্তমানে বিকাশের জন্য উপযোগী নয়।
এই ফ্রেমগুলিকে একটিতে ভেঙে ফেলার জন্য, আপনি টুলবার থেকে ফ্রেম সংকোচন বোতামটি নির্বাচন করবেন, ভেঙে ফেলার পথগুলি বেছে নিন এবং আপনার পরিবর্তনগুলি প্রয়োগ করতে প্রয়োগ করুন বোতামটি নির্বাচন করুন৷ এই উদাহরণে, পথটি হল [kernel.kallsyms]
।
এটি করার ফলে বাম এবং ডান উভয় প্যানেলে নির্বাচিত পথের সাথে সম্পর্কিত ফ্রেমগুলি ভেঙে যায়, যেমনটি নীচে দেখানো হয়েছে।
সিস্টেম ট্রেস পরিদর্শন
একটি সিস্টেম ট্রেস পরিদর্শন করার সময়, আপনি প্রতিটি থ্রেডে ঘটে যাওয়া ইভেন্টগুলির বিশদ বিবরণ দেখতে থ্রেড টাইমলাইনে ট্রেস ইভেন্টগুলি পরীক্ষা করতে পারেন। ইভেন্টের নাম এবং প্রতিটি রাজ্যে কাটানো সময় দেখতে একটি ইভেন্টের উপরে আপনার মাউস পয়েন্টারটি ঘোরান। বিশ্লেষণ ফলকে আরও তথ্য দেখতে একটি ইভেন্টে ক্লিক করুন।
সিস্টেম ট্রেস পরিদর্শন করুন: CPU কোর
সিপিইউ শিডিউলিং ডেটা ছাড়াও, সিস্টেম ট্রেসগুলি মূল দ্বারা সিপিইউ ফ্রিকোয়েন্সি অন্তর্ভুক্ত করে। এটি প্রতিটি কোরের ক্রিয়াকলাপের পরিমাণ দেখায় এবং আধুনিক মোবাইল প্রসেসরগুলিতে কোনটি "বড়" বা "ছোট" কোর তা আপনাকে ধারণা দিতে পারে।
চিত্র 8. রেন্ডার থ্রেডের জন্য CPU কার্যকলাপ এবং ট্রেস ইভেন্ট দেখা।
CPU কোর ফলক (চিত্র 8 এ দেখানো হয়েছে) প্রতিটি কোরে নির্ধারিত থ্রেড কার্যকলাপ দেখায়। এই কোরটি সেই নির্দিষ্ট সময়ে কোন থ্রেডে চলছে তা দেখতে একটি থ্রেড কার্যকলাপের উপর আপনার মাউস পয়েন্টারটি ঘোরান।
সিস্টেম ট্রেস তথ্য পরিদর্শন সম্পর্কে অতিরিক্ত তথ্যের জন্য, systrace
ডকুমেন্টেশনের UI কর্মক্ষমতা সমস্যা অনুসন্ধান করুন বিভাগটি দেখুন।
সিস্টেম ট্রেস পরিদর্শন করুন: ফ্রেম রেন্ডারিং টাইমলাইন
মূল থ্রেডে প্রতিটি ফ্রেম রেন্ডার করতে আপনার অ্যাপটি কতক্ষণ লাগে তা আপনি পরিদর্শন করতে পারেন এবং UI জ্যাঙ্ক এবং কম ফ্রেমরেটের কারণে বাধাগুলি তদন্ত করতে RenderThread
। কীভাবে তদন্ত করতে এবং UI জ্যাঙ্ক কমাতে সাহায্য করতে সিস্টেম ট্রেসগুলি ব্যবহার করবেন সে সম্পর্কে জানতে, UI জ্যাঙ্ক সনাক্তকরণ দেখুন।
সিস্টেম ট্রেস পরিদর্শন করুন: প্রক্রিয়া মেমরি (আরএসএস)
অ্যান্ড্রয়েড 9 বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে নিয়োজিত অ্যাপগুলির জন্য, প্রসেস মেমরি (আরএসএস) বিভাগটি বর্তমানে অ্যাপের দ্বারা ব্যবহৃত শারীরিক মেমরির পরিমাণ দেখায়।
চিত্র 9. প্রোফাইলারে শারীরিক মেমরি দেখা।
মোট
এটি আপনার প্রক্রিয়ার দ্বারা বর্তমানে ব্যবহৃত শারীরিক মেমরির মোট পরিমাণ। ইউনিক্স-ভিত্তিক সিস্টেমে, এটি "রেসিডেন্ট সেট সাইজ" নামে পরিচিত এবং এটি বেনামী বরাদ্দ, ফাইল ম্যাপিং এবং শেয়ার করা মেমরি বরাদ্দ দ্বারা ব্যবহৃত সমস্ত মেমরির সংমিশ্রণ।
উইন্ডোজ ডেভেলপারদের জন্য, রেসিডেন্ট সেট সাইজ ওয়ার্কিং সেট সাইজের সাথে সাদৃশ্যপূর্ণ।
বরাদ্দ
এই কাউন্টারটি ট্র্যাক করে যে প্রক্রিয়াটির স্বাভাবিক মেমরি বরাদ্দের দ্বারা বর্তমানে কতটা শারীরিক মেমরি ব্যবহৃত হয়। এগুলি হল বরাদ্দ যা বেনামী (একটি নির্দিষ্ট ফাইল দ্বারা সমর্থিত নয়) এবং ব্যক্তিগত (ভাগ করা হয়নি)। বেশিরভাগ অ্যাপ্লিকেশনে, এগুলি হিপ বরাদ্দ ( malloc
বা new
সহ) এবং স্ট্যাক মেমরি দিয়ে তৈরি। শারীরিক মেমরি থেকে অদলবদল করা হলে, এই বরাদ্দগুলি সিস্টেম সোয়াপ ফাইলে লেখা হয়।
ফাইল ম্যাপিং
এই কাউন্টারটি ফাইল ম্যাপিংয়ের জন্য প্রক্রিয়াটি যে পরিমাণ শারীরিক মেমরি ব্যবহার করছে তা ট্র্যাক করে - অর্থাৎ, মেমরি ম্যানেজার দ্বারা মেমরির একটি অঞ্চলে ফাইলগুলি থেকে মেমরি ম্যাপ করা হয়েছে৷
শেয়ার করা হয়েছে
এই কাউন্টারটি এই প্রক্রিয়া এবং সিস্টেমের অন্যান্য প্রক্রিয়াগুলির মধ্যে মেমরি ভাগ করার জন্য কতটা শারীরিক মেমরি ব্যবহার করা হচ্ছে তা ট্র্যাক করে।