UI জ্যাঙ্ক সনাক্তকরণ

অ্যান্ড্রয়েড আপনার অ্যাপ থেকে একটি ফ্রেম তৈরি করে এবং তা স্ক্রিনে প্রদর্শন করার মাধ্যমে UI রেন্ডার করে। যদি আপনার অ্যাপের UI রেন্ডারিং ধীরগতির হয়, তাহলে সিস্টেম ফ্রেম বাদ দিতে বাধ্য হয়। যখন এমনটা ঘটে, তখন ব্যবহারকারী তার স্ক্রিনে একটি পুনরাবৃত্তিমূলক ঝিকিমিকি লক্ষ্য করেন, যাকে জ্যাঙ্ক (jank ) বলা হয়।

যখন জ্যাঙ্ক ঘটে, তখন এর কারণ সাধারণত UI থ্রেডে (বেশিরভাগ অ্যাপে এটি মেইন থ্রেড) কোনো গতি হ্রাস বা ব্লকিং অ্যাসিঙ্ক কল। সমস্যাটি কোথায় তা শনাক্ত করতে আপনি সিস্টেম ট্রেস ব্যবহার করতে পারেন।

আপনি যদি Jetpack Compose ব্যবহার করেন, তাহলে ট্রেসে রেন্ডারিং পারফরম্যান্স খতিয়ে দেখার সেরা উপায় হলো কম্পোজিশন ট্রেসিং চালু করা। Compose-এর সাধারণ পারফরম্যান্স সমস্যাগুলো সম্পর্কে জানতে, Jetpack Compose Performance দেখুন।

Compose অ্যাপের ক্ষেত্রে, যখন আপনার অ্যাপের একটি ম্যাক্রো-লেভেল ভিউ প্রয়োজন হবে, তখন এই গাইডের ধাপগুলো ব্যবহার করুন। এখানে উপস্থাপিত সিস্টেম ট্রেসগুলো আপনাকে সিস্টেম-লেভেলের সমস্যা, যেমন—হেভি ডিস্ক I/O, অ্যাগ্রেসিভ গার্বেজ কালেকশন, বা GPU রেন্ডারিং বটলনেকের কারণে মেইন থ্রেড ব্লক হয়ে যাওয়ায় সৃষ্ট জ্যাঙ্ক শনাক্ত করতে সাহায্য করে। যদি আপনি জ্যাঙ্কটিকে আপনার UI লেয়ারে সীমাবদ্ধ করতে পারেন, তবে Jetpack Compose Performance গাইডটি ব্যবহার করুন। সেই গাইডটি আপনাকে Compose-এর নির্দিষ্ট অদক্ষতা, যেমন—অতিরিক্ত রিকম্পোজিশন, ভুল ফেজে স্টেট রিড করা, বা আনস্টেবল প্যারামিটার ব্যবহার করার মতো সমস্যাগুলো সমাধান করতে সাহায্য করে।

অ্যান্ড্রয়েড ১২ এবং তার পরবর্তী সংস্করণগুলিতে জ্যাঙ্ক সনাক্ত করুন।

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) বা তার উচ্চতর সংস্করণে ব্যবহৃত ডিভাইসগুলোর ক্ষেত্রে, সিপিইউ প্রোফাইলারের ডিসপ্লে প্যানেলের অধীনে জ্যাঙ্কি ফ্রেমস ট্র্যাকে একটি ক্যাপচার করা ট্রেস দেখানো হয়।

জ্যাঙ্ক শনাক্ত করতে,

  1. অ্যান্ড্রয়েড স্টুডিওতে, ভিউ > টুল উইন্ডোজ > প্রোফাইলার নির্বাচন করুন অথবা প্রোফাইলে ক্লিক করুন। টুলবারে।

    'সিলেক্ট ডিপ্লয়মেন্ট টার্গেট' ডায়ালগ বক্সে অনুরোধ করা হলে, প্রোফাইলিংয়ের জন্য আপনার অ্যাপটি যে ডিভাইসে ডিপ্লয় করতে চান, সেটি বেছে নিন। যদি আপনি USB-এর মাধ্যমে কোনো ডিভাইস সংযুক্ত করে থাকেন কিন্তু সেটি তালিকায় দেখতে না পান, তবে নিশ্চিত করুন যে আপনি USB ডিবাগিং চালু করেছেন

  2. সিপিইউ প্রোফাইলার খুলতে সিপিইউ টাইমলাইনের যেকোনো জায়গায় ক্লিক করুন।

  3. সিপিইউ প্রোফাইলারের কনফিগারেশন মেনু থেকে সিস্টেম ট্রেস নির্বাচন করুন এবং রেকর্ড-এ ক্লিক করুন। আপনার অ্যাপের ব্যবহার শেষ হলে, স্টপ-এ ক্লিক করুন।

  4. আপনি ডিসপ্লে- এর অধীনে জ্যাঙ্কি ফ্রেমস ট্র্যাকটি দেখতে পাবেন। ডিফল্টরূপে, প্রোফাইলার শুধুমাত্র জ্যাঙ্কি ফ্রেমগুলোকেই তদন্তের জন্য সম্ভাব্য প্রার্থী হিসেবে দেখায়। প্রতিটি জ্যাঙ্কি ফ্রেমের মধ্যে, লাল অংশটি ফ্রেমটির রেন্ডারিং ডেডলাইন অতিক্রম করার পর অতিবাহিত সময়কে হাইলাইট করে। জ্যাঙ্কি ফ্রেম ট্র্যাকের স্ক্রিনশট

  5. কোনো ত্রুটিপূর্ণ ফ্রেম খুঁজে পেলে সেটির উপর ক্লিক করুন; চাইলে, নির্বাচিত ফ্রেমে ফোকাস করার জন্য জুম অ্যাডজাস্ট করতে M চাপতে পারেন। প্রাসঙ্গিক ইভেন্টগুলো এই থ্রেডগুলোতে হাইলাইট করা থাকে: মেইন থ্রেড, রেন্ডারথ্রেড এবং জিপিইউ কমপ্লিশনপ্রোফাইলারের স্ক্রিনশট যেখানে জ্যাঙ্কি ফ্রেম এবং প্রধান থ্রেডগুলো দেখা যাচ্ছে

  6. আপনি চাইলে যথাক্রমে 'All Frames' এবং 'Lifecycle' চেকবক্সগুলো টগল করে সমস্ত ফ্রেম অথবা রেন্ডারিং সময়ের বিস্তারিত বিবরণ দেখতে পারেন। উপরের মতো প্রোফাইলারের স্ক্রিনশট, কিন্তু 'All Frames' এবং 'Lifecycle' চেকবক্সগুলো চেক করা অবস্থায়।

অ্যান্ড্রয়েড ১১-এ জ্যাঙ্ক শনাক্ত করুন

অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) ব্যবহৃত ডিভাইসগুলোর ক্ষেত্রে, ক্যাপচার করা ট্রেসটি সিপিইউ প্রোফাইলারের ফ্রেম লাইফসাইকেল সেকশনে দেখানো হয়।

বিভিন্ন ট্র্যাক সহ ফ্রেম লাইফসাইকেল বিভাগ

ফ্রেম লাইফসাইকেল সেকশনটিতে লেয়ারের নাম এবং চারটি ট্র্যাক থাকে। প্রতিটি ট্র্যাক ফ্রেম রেন্ডারিং পাইপলাইনের একটি পর্যায়কে নির্দেশ করে। ফ্রেম লাইফসাইকেলের উপাদানগুলো নিম্নরূপ:

  1. ফ্রেম লাইফসাইকেল (লেয়ারের নাম) : সেকশনের শিরোনামে বন্ধনীর মধ্যে লেয়ারের নাম থাকে। লেয়ার হলো কম্পোজিশনের একটি একক।
  2. অ্যাপ্লিকেশন : এই ট্র্যাকটি অ্যাপ দ্বারা বাফারটি ডি-কিউ করার মুহূর্ত থেকে পুনরায় এন-কিউ করার মুহূর্ত পর্যন্ত সময় দেখায়। এটি সাধারণত RenderThread এর ট্রেস ইভেন্টগুলোর সাথে সঙ্গতিপূর্ণ থাকে।
  3. GPU-এর জন্য অপেক্ষা করুন : এই ট্র্যাকটি দেখায় যে বাফারটি কতক্ষণ GPU-এর দখলে ছিল। এটি হলো বাফারটি GPU-তে পাঠানোর মুহূর্ত থেকে শুরু করে GPU-এর কাজ শেষ হওয়া পর্যন্ত সময়কাল। এর মানে এই নয় যে, এই সময়ে GPU শুধুমাত্র এই বাফারটিতেই কাজ করছিল। একটি নির্দিষ্ট সময়ে GPU কী নিয়ে কাজ করছে সে সম্পর্কে বিস্তারিত তথ্যের জন্য, আপনি Android GPU Inspector ব্যবহার করতে পারেন।
  4. কম্পোজিশন : এই ট্র্যাকটি সেই সময় থেকে শুরু করে, যখন সারফেসফ্লিঙ্গার বাফারটি ল্যাচ করে কম্পোজিশনের জন্য পাঠায়, এবং বাফারটি ডিসপ্লেতে পাঠানো পর্যন্ত সময়কাল দেখায়।
  5. প্রদর্শিত ফ্রেমসমূহ : এই ট্র্যাকটি দেখায় ফ্রেমটি কতক্ষণ স্ক্রিনে ছিল।

ফ্রেম লাইফসাইকেল সেকশনটি দেখায় কিভাবে একটি ফ্রেম বাফার রেন্ডারিং পাইপলাইনের বিভিন্ন ধাপের মধ্যে চলাচল করে। ফ্রেমগুলোকে ফ্রেম নম্বর অনুযায়ী রঙ দিয়ে চিহ্নিত করা হয়, যাতে একটি নির্দিষ্ট ফ্রেমকে সহজে ট্র্যাক করা যায়।

অ্যান্ড্রয়েড স্টুডিও ' অল ফ্রেমস' ট্যাবে ট্রেসের সমস্ত ফ্রেম একটি টেবিল আকারেও দেখায়।

'All Frames' ট্যাবে ট্রেসের সমস্ত ফ্রেমের একটি সারণী।

ফ্রেম # , অ্যাপ্লিকেশন , ওয়েট ফর জিপিইউ , এবং কম্পোজিশন কলামগুলো উপরে উল্লিখিত ফ্রেম লাইফসাইকেল সেকশনের ট্র্যাকগুলোর মতোই একই ডেটা উপস্থাপন করে। ফ্রেম ডিউরেশন কলামটি অ্যাপ্লিকেশন শুরু হওয়া থেকে ফ্রেমস অন ডিসপ্লে শুরু হওয়া পর্যন্ত সময়কে বোঝায়। মূলত, একটি ফ্রেম শুরু থেকে শেষ পর্যন্ত রেন্ডার করতে এই সময়টুকুই লাগে।

সবচেয়ে ছোট বা সবচেয়ে বড় ফ্রেমটি দ্রুত খুঁজে পেতে আপনি যেকোনো কলাম অনুযায়ী ফ্রেমের টেবিলটি সাজাতে পারেন। টেবিলটিতে পেজিনেশন কন্ট্রোলও রয়েছে, যা আপনাকে শত শত ফ্রেমের মধ্যে দিয়ে সহজে চলাচল করতে সাহায্য করে।

অ্যান্ড্রয়েড ১১-এ জ্যাঙ্ক শনাক্ত ও তদন্ত করতে, এই ধাপগুলো অনুসরণ করুন:

  1. 'All Frames ' টেবিলটিকে 'Application' কলাম অনুসারে অবরোহী ক্রমে সাজান, যাতে সবচেয়ে বেশি সময় নেওয়া ফ্রেমগুলো প্রথমে আসে।

    অ্যাপ্লিকেশন কলামটি অবরোহী ক্রমে সাজানো হয়েছে

  2. সবচেয়ে বেশি সময় ধরে চলা ফ্রেমগুলো খুঁজুন এবং টেবিলের সারিটি নির্বাচন করুন। এটি বাম দিকের টাইমলাইন ভিউতে নির্বাচিত ফ্রেমটিকে জুম করে দেখাবে।

    ফ্রেম টেবিলের পাশাপাশি টাইমলাইন ভিউ

  3. ফ্রেম লাইফসাইকেল এবং থ্রেডস সেকশনগুলিতে প্রাসঙ্গিক থ্রেডগুলি খুঁজুন।

    ফ্রেম লাইফসাইকেল এবং থ্রেড বিভাগ

অ্যান্ড্রয়েড ১০ এবং এর নিচের সংস্করণগুলিতে জ্যাঙ্ক সনাক্ত করুন

অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং এর থেকে নিম্নতর সংস্করণ ব্যবহারকারী ডিভাইসগুলোর ক্ষেত্রে, প্রাসঙ্গিক ওএস গ্রাফিক্স পাইপলাইন সম্পর্কিত তথ্য সিপিইউ প্রোফাইলার সিস্টেম ট্রেসের ' ডিসপ্লে' নামক একটি একক বিভাগে প্রদর্শিত হয়।

ডিসপ্লে UI উইন্ডো

  • ফ্রেম : এই বিভাগে আপনার অ্যাপের UI থ্রেড এবং RenderThread ট্রেস ইভেন্টগুলো দেখানো হয়। যে ইভেন্টগুলো ১৬ মিলিসেকেন্ডের বেশি দীর্ঘ, সেগুলোকে লাল রঙে চিহ্নিত করা হয় সম্ভাব্য জ্যাঙ্কি ফ্রেমগুলো হাইলাইট করার জন্য, কারণ এগুলো প্রতি সেকেন্ডে ৬০ ফ্রেম (fps) হারে রেন্ডার করার নির্ধারিত সময়সীমা অতিক্রম করে।
  • সারফেসফ্লিঙ্গার : এই অংশে দেখানো হয় কখন সারফেসফ্লিঙ্গার ফ্রেম বাফারগুলো প্রসেস করে। সারফেসফ্লিঙ্গার একটি সিস্টেম প্রসেস যা ডিসপ্লেতে বাফার পাঠানোর জন্য দায়ী।
  • VSYNC : এই বিভাগে VSYNC দেখানো হয়, যা ডিসপ্লে পাইপলাইনকে সিঙ্ক্রোনাইজ করার একটি সিগন্যাল। এই ট্র্যাকটি VSYNC-অ্যাপ সিগন্যাল প্রদর্শন করে, যা দেখায় কখন আপনার অ্যাপ খুব দেরিতে চালু হচ্ছে। সাধারণত, এটি ঘটে কারণ UI থ্রেড ব্যস্ত থাকে। এর ফলে কোনো অ্যানিমেশনের সময় আপনার স্ক্রিনে একটি দৃশ্যমান ঝিকিমিকি দেখা দেয় এবং অ্যানিমেশন বা স্ক্রল সম্পূর্ণ না হওয়া পর্যন্ত অতিরিক্ত ইনপুট ল্যাটেন্সি যোগ হয়। উচ্চ-রিফ্রেশ-রেটের ডিসপ্লেগুলির জন্য এটি দেখা বিশেষভাবে গুরুত্বপূর্ণ, কারণ এগুলি প্রতি সেকেন্ডে ৬০ বারের বেশি বা পরিবর্তনশীল হারে ঘটতে পারে।
  • বাফারকিউ (BufferQueue ): এই অংশটি দেখায় কতগুলো ফ্রেম বাফার সারিবদ্ধভাবে রয়েছে এবং সারফেসফ্লিঙ্গার (SurfaceFlinger) দ্বারা ব্যবহারের জন্য অপেক্ষা করছে। অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বা তার উচ্চতর সংস্করণে চালিত ডিভাইসে ডেপ্লয় করা অ্যাপগুলোর জন্য, এই ট্র্যাকটি অ্যাপটির সারফেস বাফারকিউ -এর বাফার সংখ্যা ( 0 , 1 , বা 2 ) দেখায়। অ্যান্ড্রয়েড গ্রাফিক্স কম্পোনেন্টগুলোর মধ্যে ইমেজ বাফারগুলো স্থানান্তরিত হওয়ার সময় তাদের অবস্থা বুঝতে বাফারকিউ আপনাকে সাহায্য করতে পারে। উদাহরণস্বরূপ, 2 -এর একটি মান বোঝায় যে অ্যাপটি বর্তমানে ট্রিপল-বাফারড, যার ফলে অতিরিক্ত ইনপুট ল্যাটেন্সি তৈরি হয়।

ডিসপ্লে সেকশনটি সম্ভাব্য জ্যাঙ্ক শনাক্ত করার জন্য দরকারি সংকেত প্রদান করে—উদাহরণস্বরূপ, যখন UI থ্রেড বা RenderThread ১৬ মিলিসেকেন্ডের বেশি সময় নেয়। জ্যাঙ্কটি ঠিক কী কারণে ঘটেছে তার সঠিক বিবরণ জানতে, আপনি থ্রেডস সেকশনটি দেখতে পারেন, যা UI রেন্ডারিংয়ের সাথে সম্পর্কিত থ্রেডগুলো প্রদর্শন করে।

থ্রেডস বিভাগ ডিসপ্লে

উপরের চিত্রে, থ্রেডস (Threads) অংশে UI থ্রেড ( java.com.google.samples.apps.iosched ), RenderThread এবং GPU completion থ্রেড দেখানো হয়েছে। এই থ্রেডগুলো UI রেন্ডারিংয়ের সাথে সম্পর্কিত এবং জ্যাঙ্ক (jank) সৃষ্টিতে ভূমিকা রাখতে পারে।

অ্যান্ড্রয়েড ১০ বা তার পূর্ববর্তী সংস্করণে জ্যাঙ্ক শনাক্ত করতে, এই ধাপগুলো অনুসরণ করুন:

  1. ডিসপ্লে- তে থাকা ফ্রেমস ট্র্যাকটি দেখুন। লাল ফ্রেমগুলো তদন্তের জন্য উপযুক্ত।

    ডিসপ্লের অধীনে ফ্রেম বিভাগ

  2. যখনই কোনো সম্ভাব্য ত্রুটিপূর্ণ ফ্রেম খুঁজে পাবেন, তখন W চেপে অথবা Control (macOS-এ Command ) চেপে ধরে মাউসের হুইল স্ক্রল করে জুম ইন করুন। UI থ্রেড এবং RenderThread এ ট্রেস ইভেন্টগুলো দেখতে শুরু না করা পর্যন্ত জুম ইন করতে থাকুন।

    UI থ্রেড এবং RenderThread-এ ইভেন্টগুলো ট্রেস করুন।

    উপরের চিত্রে, Choreographer#doFrame দেখায় কখন UI থ্রেড অ্যানিমেশন, ভিউ লেআউট, ইমেজ ড্রয়িং এবং সম্পর্কিত প্রক্রিয়াগুলো সমন্বয় করার জন্য Choreographer কল করে। DrawFrames দেখায় কখন RenderThread গঠিত হয় এবং GPU-কে প্রকৃত ড্রয়িং কমান্ড জারি করে।

  3. যদি আপনি প্রধান থ্রেডে একটি অস্বাভাবিক দীর্ঘ ট্রেস ইভেন্ট দেখতে পান, তবে জুম করে দেখুন কোন UI কম্পোনেন্ট বা কম্পোজেবল ফাংশন ফ্রেমটিকে বিলম্বিত করছে।

পারফেটোর সাথে উন্নত তদন্ত

অ্যান্ড্রয়েড স্টুডিও সিস্টেম ট্রেস প্রোফাইলিং টাস্কটি পারফেট্টো দ্বারা চালিত। আপনি যদি জটিল রেন্ডারিং সমস্যা নিয়ে কাজ করেন এবং কাস্টম SQL কোয়েরি বা উন্নত টাইমলাইন নেভিগেশনের প্রয়োজন হয়, তবে আপনি IDE-এর বাইরে আপনার ট্রেস বিশ্লেষণ করতে পারেন।

অ্যান্ড্রয়েড স্টুডিও থেকে আপনার সিস্টেম ট্রেস এক্সপোর্ট করতে প্রোফাইলার প্যানে থাকা এক্সপোর্ট ট্রেস আইকনে ক্লিক করুন, তারপর প্রাপ্ত ফাইলটি ওয়েব-ভিত্তিক পারফেটটো UI- তে ড্র্যাগ করুন। এটি সিস্টেম-স্তরের পারফরম্যান্স বিশ্লেষণের জন্য একটি বিশেষ পরিবেশ প্রদান করে। VSYNC, SurfaceFlinger, এবং Frame Timeline ট্র্যাকের মতো OS গ্রাফিক্স পাইপলাইনের বিবরণ কীভাবে ব্যাখ্যা করতে হয়, সে সম্পর্কে তথ্যের জন্য পারফেটটোর অফিসিয়াল ডকুমেন্টেশন দেখুন।

আরও জানুন

জ্যাঙ্ক কমানোর উপায় সম্পর্কে আরও জানতে, জ্যাঙ্কের সাধারণ উৎসসমূহ দেখুন।