অ্যান্ড্রয়েড আপনার অ্যাপ থেকে একটি ফ্রেম তৈরি করে এবং স্ক্রিনে প্রদর্শন করে UI রেন্ডার করে। যদি আপনার অ্যাপটি ধীরগতির UI রেন্ডারিং-এ ভোগে, তাহলে সিস্টেমটি ফ্রেমগুলি এড়িয়ে যেতে বাধ্য হয়৷ যখন এটি ঘটে, ব্যবহারকারী তাদের স্ক্রিনে একটি পুনরাবৃত্ত ফ্লিকার উপলব্ধি করে, যাকে জ্যাঙ্ক হিসাবে উল্লেখ করা হয়।
যখন ঝাঁকুনি দেখা দেয়, এটি সাধারণত UI থ্রেডে কিছু হ্রাস বা অ্যাসিঙ্ক কল ব্লক করার কারণে হয় (বেশিরভাগ অ্যাপে, এটিই প্রধান থ্রেড)। সমস্যা কোথায় তা সনাক্ত করতে আপনি সিস্টেম ট্রেস ব্যবহার করতে পারেন।
Android 12 এবং উচ্চতর সংস্করণে জ্যাঙ্ক সনাক্ত করুন
Android 12 (API লেভেল 31) বা উচ্চতর ব্যবহার করা ডিভাইসগুলির জন্য, CPU প্রোফাইলারের ডিসপ্লে প্যানের নীচে Janky ফ্রেম ট্র্যাকে একটি ক্যাপচার করা ট্রেস দেখানো হয়।
জ্যাংক সনাক্ত করতে,
অ্যান্ড্রয়েড স্টুডিওতে, দেখুন > টুল উইন্ডোজ > প্রোফাইলার নির্বাচন করুন বা প্রোফাইলে ক্লিক করুন টুলবারে
ডিপ্লয়মেন্ট টার্গেট নির্বাচন করুন ডায়ালগ দ্বারা অনুরোধ করা হলে, প্রোফাইলিংয়ের জন্য আপনার অ্যাপটি যে ডিভাইসে স্থাপন করতে হবে তা চয়ন করুন। আপনি যদি USB এর মাধ্যমে একটি ডিভাইস সংযুক্ত করে থাকেন কিন্তু এটি তালিকাভুক্ত দেখতে না পান, তাহলে নিশ্চিত করুন যে আপনি USB ডিবাগিং সক্ষম করেছেন ৷
CPU প্রোফাইলার খুলতে CPU টাইমলাইনের যেকোনো জায়গায় ক্লিক করুন।
CPU প্রোফাইলারের কনফিগারেশন মেনু থেকে সিস্টেম ট্রেস নির্বাচন করুন এবং রেকর্ড ক্লিক করুন। আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করা শেষ করার পরে, থামুন-এ ক্লিক করুন।
আপনি ডিসপ্লের অধীনে Janky ফ্রেম ট্র্যাক দেখতে পাবেন। ডিফল্টরূপে, প্রোফাইলার শুধুমাত্র তদন্তের প্রার্থী হিসাবে জাঙ্কি ফ্রেমগুলি দেখায়৷ প্রতিটি জাঙ্কি ফ্রেমের মধ্যে, লাল অংশটি ফ্রেমটির রেন্ডারিং সময়সীমা অতিক্রম করার সময়কাল হাইলাইট করে।
একবার আপনি একটি জাঙ্কি ফ্রেম খুঁজে পেলে, এটিতে ক্লিক করুন; ঐচ্ছিকভাবে, আপনি নির্বাচিত ফ্রেমে ফোকাস করতে জুম সামঞ্জস্য করতে M চাপতে পারেন। প্রাসঙ্গিক ঘটনাগুলি এই থ্রেডগুলিতে হাইলাইট করা হয়েছে: প্রধান থ্রেড, রেন্ডারথ্রেড এবং GPU সমাপ্তি ।
আপনি যথাক্রমে সমস্ত ফ্রেম এবং লাইফসাইকেল চেকবক্স টগল করে সমস্ত ফ্রেম বা রেন্ডারিং সময়ের একটি ভাঙ্গন দেখতে পারেন৷
Android 11 এ জ্যাঙ্ক সনাক্ত করুন
Android 11 (API লেভেল 30) ব্যবহার করা ডিভাইসগুলির জন্য, CPU প্রোফাইলারের ফ্রেম লাইফসাইকেল বিভাগে একটি ক্যাপচার করা ট্রেস দেখানো হয়েছে।
ফ্রেম লাইফসাইকেল বিভাগে স্তরের নাম এবং চারটি ট্র্যাক রয়েছে। প্রতিটি ট্র্যাক ফ্রেম রেন্ডারিং পাইপলাইনের একটি পর্যায়ে প্রতিনিধিত্ব করে। ফ্রেম লাইফসাইকেল উপাদানগুলি নিম্নরূপ:
- ফ্রেম লাইফসাইকেল (স্তরের নাম) : বিভাগের শিরোনামে বন্ধনীতে স্তরের নাম রয়েছে। একটি স্তর রচনার একক একক।
- অ্যাপ্লিকেশান : এই ট্র্যাকটি সেই সময়টি দেখায় যখন অ্যাপ দ্বারা বাফারটি সারিবদ্ধ করা হয়েছিল থেকে কখন এটিকে আবার সারিবদ্ধ করা হয়েছিল৷ এটি সাধারণত
RenderThread
এর ট্রেস ইভেন্টের সাথে মিলে যায়। - GPU-এর জন্য অপেক্ষা করুন : এই ট্র্যাকটি দেখায় যে বাফারটি কতক্ষণ GPU-এর মালিকানাধীন ছিল৷ এটি সেই সময় যখন বাফারটি GPU তে পাঠানো হয় থেকে যখন GPU বাফারে তার কাজ শেষ করে। এটি নির্দেশ করে না যে এই সময়ে GPU শুধুমাত্র এই বাফারে কাজ করছিল। একটি নির্দিষ্ট সময়ে GPU কি কাজ করে তার বিস্তারিত তথ্যের জন্য, আপনি Android GPU Inspector ব্যবহার করতে চাইতে পারেন।
- কম্পোজিশন : এই ট্র্যাকটি দেখায় যে সময় থেকে শুরু করে সারফেসফ্লিংগার বাফারে লেগে থাকে এবং কম্পোজিশনের জন্য পাঠায়, কখন বাফারটি ডিসপ্লেতে পাঠানো হয়।
- ডিসপ্লেতে ফ্রেম : এই ট্র্যাকটি দেখায় কতক্ষণ ফ্রেমটি স্ক্রিনে ছিল।
ফ্রেম লাইফসাইকেল বিভাগটি ব্যাখ্যা করে যে কিভাবে একটি ফ্রেম বাফার রেন্ডারিং পাইপলাইনের বিভিন্ন পর্যায়ের মধ্যে চলে। ফ্রেমগুলি ফ্রেম নম্বর দ্বারা রঙিন কোড করা হয় যাতে একটি নির্দিষ্ট ফ্রেম ট্র্যাক করা সহজ হয়৷
অ্যান্ড্রয়েড স্টুডিও সমস্ত ফ্রেম ট্যাবে একটি টেবিল বিন্যাসে ট্রেসে সমস্ত ফ্রেম দেখায়৷
ফ্রেম # , অ্যাপ্লিকেশন , GPU এর জন্য অপেক্ষা করুন এবং কম্পোজিশন কলামগুলি উপরের মতো ফ্রেম লাইফসাইকেল বিভাগে ট্র্যাকের মতো একই ডেটা উপস্থাপন করে৷ কলাম ফ্রেমের সময়কাল অ্যাপ্লিকেশন শুরু থেকে ডিসপ্লেতে ফ্রেম শুরু হওয়ার সময়কে উপস্থাপন করে। এটি মূলত একটি ফ্রেম এন্ড-টু-এন্ড রেন্ডার করতে কতক্ষণ সময় নেয়।
দ্রুততম বা দীর্ঘতম ফ্রেমটি খুঁজে পেতে আপনি যেকোন কলাম দ্বারা ফ্রেম টেবিলটি সাজাতে পারেন। টেবিলটি পৃষ্ঠা সংখ্যা নিয়ন্ত্রণকেও সমর্থন করে যা আপনাকে শত শত ফ্রেমে নেভিগেট করতে সহায়তা করে।
অ্যান্ড্রয়েড 11-এ জ্যাঙ্ক সনাক্ত করতে এবং তদন্ত করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
সমস্ত ফ্রেম টেবিলকে অ্যাপ্লিকেশান কলাম দ্বারা অবরোহ ক্রমে সাজান, যাতে ফ্রেমগুলি যেগুলি সবচেয়ে বেশি সময় নেয় সেগুলি প্রথমে উপস্থিত হয়৷
দীর্ঘতম চলমান ফ্রেম খুঁজুন এবং টেবিল সারি নির্বাচন করুন. এটি বাম দিকের টাইমলাইন ভিউতে নির্বাচিত ফ্রেমে জুম করে।
ফ্রেম লাইফসাইকেল এবং থ্রেডস বিভাগে প্রাসঙ্গিক থ্রেড খুঁজুন।
Android 10 এবং তার নিচের সংস্করণে জ্যাঙ্ক শনাক্ত করুন
অ্যান্ড্রয়েড 10 (এপিআই লেভেল 29) এবং তার নিচের ডিভাইসগুলির জন্য, প্রাসঙ্গিক OS গ্রাফিক্স পাইপলাইন তথ্য ডিসপ্লে নামক CPU প্রোফাইলার সিস্টেম ট্রেসের একটি একক বিভাগে প্রদর্শিত হয়।
- ফ্রেম : এই বিভাগটি আপনার অ্যাপে UI থ্রেড এবং
RenderThread
ট্রেস ইভেন্ট দেখায়। সম্ভাব্য জাঙ্কি ফ্রেম হাইলাইট করার জন্য 16ms এর বেশি ইভেন্টগুলি লাল রঙ করা হয় কারণ তারা প্রতি সেকেন্ডে 60 ফ্রেম (fps) রেন্ডার করার সময়সীমা অতিক্রম করে। - SurfaceFlinger : এই বিভাগটি দেখায় যখন SurfaceFlinger ফ্রেম বাফারগুলিকে প্রক্রিয়া করে। SurfaceFlinger হল একটি সিস্টেম প্রক্রিয়া যা প্রদর্শনে বাফার পাঠানোর জন্য দায়ী।
- VSYNC : এই বিভাগটি VSYNC প্রদর্শন করে, একটি সংকেত যা ডিসপ্লে পাইপলাইনকে সিঙ্ক্রোনাইজ করে। ট্র্যাকটি VSYNC-অ্যাপ সংকেত প্রদর্শন করে, যা দেখায় কখন আপনার অ্যাপটি খুব দেরিতে শুরু হচ্ছে৷ সাধারণত, এটি ঘটে কারণ UI থ্রেড ব্যস্ত থাকে। এটি একটি অ্যানিমেশনের সময় আপনার স্ক্রিনে একটি দৃশ্যমান ফ্লিকার দেখায় এবং অ্যানিমেশন বা স্ক্রোল সম্পূর্ণ না হওয়া পর্যন্ত অতিরিক্ত ইনপুট লেটেন্সি যোগ করে। উচ্চ-রিফ্রেশ-রেট ডিসপ্লেগুলির জন্য এটি দেখা বিশেষভাবে গুরুত্বপূর্ণ, কারণ সেগুলি প্রতি সেকেন্ডে 60 বারের বেশি বা পরিবর্তনশীল হারে ঘটতে পারে।
- BufferQueue : এই বিভাগটি দেখায় যে কতগুলি ফ্রেম বাফার সারিবদ্ধ আছে এবং SurfaceFlinger খাওয়ার জন্য অপেক্ষা করছে। অ্যান্ড্রয়েড 9 (এপিআই স্তর 28) বা উচ্চতর চলমান ডিভাইসগুলিতে স্থাপন করা অ্যাপগুলির জন্য, এই ট্র্যাকটি অ্যাপের পৃষ্ঠতলের বাফার কিউ (
0
,1
, বা2
) এর বাফার গণনা দেখায়। BufferQueue আপনাকে ছবির বাফারগুলির অবস্থা বুঝতে সাহায্য করতে পারে যখন তারা Android গ্রাফিক্স উপাদানগুলির মধ্যে চলে যায়৷ উদাহরণস্বরূপ,2
এর মান মানে অ্যাপটি বর্তমানে ট্রিপল-বাফারযুক্ত, যার ফলে অতিরিক্ত ইনপুট লেটেন্সি হয়।
ডিসপ্লে বিভাগটি সম্ভাব্য জ্যাঙ্ক শনাক্ত করার জন্য দরকারী সংকেত প্রদান করে—উদাহরণস্বরূপ, যখন UI থ্রেড বা RenderThread
16 ms এর বেশি সময় নেয়। কী কারণে জ্যাঙ্ক হয়েছে তার সঠিক বিবরণ তদন্ত করতে, আপনি থ্রেডস বিভাগটি অনুসন্ধান করতে পারেন, যা UI রেন্ডারিংয়ের সাথে প্রাসঙ্গিক থ্রেডগুলি দেখায়।
উপরের চিত্রে, থ্রেড বিভাগটি UI থ্রেড ( java.com.google.samples.apps.iosched
), RenderThread
এবং GPU completion
থ্রেড দেখায়। এগুলি UI রেন্ডারিংয়ের সাথে প্রাসঙ্গিক থ্রেড এবং জ্যাঙ্কে অবদান রাখতে পারে।
অ্যান্ড্রয়েড 10 বা তার কম সংস্করণে জ্যাঙ্ক সনাক্ত করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
ডিসপ্লেতে ফ্রেম ট্র্যাকটি দেখুন। লাল ফ্রেম তদন্তের জন্য প্রার্থী.
একবার আপনি একটি সম্ভাব্য জ্যাঙ্কি ফ্রেম খুঁজে পেলে,
W
টিপে জুম ইন করুন বা কন্ট্রোল ধরে রাখার সময় মাউস হুইল স্ক্রোল করুন ( macOS-এ কমান্ড )। যতক্ষণ না আপনি UI থ্রেড এবংRenderThread
এ ট্রেস ইভেন্টগুলি দেখতে শুরু করেন ততক্ষণ পর্যন্ত জুম ইন করা চালিয়ে যান।উপরের চিত্রে,
Choreographer#doFrame
দেখায় যখন UI থ্রেডChoreographer
অ্যানিমেশন, ভিউ লেআউট, চিত্র অঙ্কন এবং সম্পর্কিত প্রক্রিয়াগুলির সমন্বয় করতে কল করে।RenderThread
যখন গঠন করে এবং GPU-তে প্রকৃত অঙ্কন কমান্ড ইস্যু করে তখনDrawFrames
দেখায়।আপনি যদি একটি বিশেষভাবে দীর্ঘ ট্রেস ইভেন্ট দেখতে পান, আপনি আরও জুম করতে পারেন এবং ধীর রেন্ডারিংয়ে কী অবদান রাখতে পারে তা খুঁজে বের করতে পারেন। উপরের চিত্রটি UI থ্রেডে
inflate
দেখায়, যার অর্থ অ্যাপটি লেআউটকে স্ফীত করার জন্য সময় ব্যয় করছে। আপনি যখনinflate
ইভেন্টগুলির মধ্যে একটি জুম করেন, আপনি নীচের হিসাবে প্রতিটি UI উপাদান কতক্ষণ সময় নিচ্ছে তা খুঁজে পেতে পারেন।
আরও জানুন
কীভাবে জ্যাঙ্ক কমানো যায় সে সম্পর্কে আরও জানতে, জ্যাঙ্কের সাধারণ উত্সগুলি দেখুন।