GPU রেন্ডারিং গতি এবং ওভারড্র পরিদর্শন করুন

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

ডিভাইসে ডেভেলপার বিকল্পগুলি সম্পর্কে আরও জানতে, কীভাবে সেগুলি সক্ষম করবেন তা সহ, "ডিভাইসে ডেভেলপার বিকল্পগুলি কনফিগার করুন" পড়ুন।

প্রোফাইল GPU রেন্ডারিং গতি

প্রোফাইল জিপিইউ রেন্ডারিং টুলটি একটি স্ক্রোলিং হিস্টোগ্রাম হিসেবে, প্রতি ফ্রেমের ১৬.৬৭ মিলিসেকেন্ড বেঞ্চমার্কের সাপেক্ষে একটি UI উইন্ডোর ফ্রেম রেন্ডার করতে কত সময় লাগে তার একটি ভিজ্যুয়াল উপস্থাপনা প্রদর্শন করে।

কম শক্তিশালী GPU গুলিতে, উপলব্ধ ফিল-রেট (GPU যে গতিতে ফ্রেম বাফার পূরণ করতে পারে) বেশ কম হতে পারে। একটি ফ্রেম আঁকার জন্য প্রয়োজনীয় পিক্সেলের সংখ্যা বৃদ্ধি পাওয়ার সাথে সাথে, GPU নতুন কমান্ড প্রক্রিয়া করতে বেশি সময় নিতে পারে, যার ফলে বাকি সিস্টেমকে GPU তা পূরণ না করা পর্যন্ত অপেক্ষা করতে হয়।

প্রোফাইলিং টুলটি আপনাকে সনাক্ত করতে সাহায্য করে যে কখন GPU পিক্সেল আঁকার সময় অতিরিক্ত চাপের সম্মুখীন হয় অথবা অতিরিক্ত ওভারড্রয়ের কারণে চাপের সম্মুখীন হয়।

প্রোফাইলার সক্ষম করুন

শুরু করার আগে, নিশ্চিত করুন যে আপনি Android 4.1 (API লেভেল 16) বা তার বেশি চলমান একটি ডিভাইস ব্যবহার করছেন এবং আপনি বিকাশকারী বিকল্পগুলি সক্ষম করেছেন । আপনার অ্যাপ ব্যবহার করার সময় ডিভাইস GPU রেন্ডারিং প্রোফাইলিং শুরু করতে, নিম্নলিখিতভাবে এগিয়ে যান:

  1. আপনার ডিভাইসে, সেটিংসে যান এবং ডেভেলপার বিকল্পসমূহ এ আলতো চাপুন।
  2. মনিটরিং বিভাগে, ডিভাইসে চলমান অ্যান্ড্রয়েডের সংস্করণের উপর নির্ভর করে প্রোফাইল GPU রেন্ডারিং বা প্রোফাইল HWUI রেন্ডারিং নির্বাচন করুন।
  3. প্রোফাইল জিপিইউ রেন্ডারিং ডায়ালগে, আপনার ডিভাইসের স্ক্রিনে গ্রাফগুলি ওভারলে করতে অন স্ক্রিন অ্যাজ বার নির্বাচন করুন।
  4. আপনি যে অ্যাপটি প্রোফাইল করতে চান সেটি খুলুন।

আউটপুট পরীক্ষা করুন

চিত্র ১-এ দেখানো প্রোফাইল জিপিইউ রেন্ডারিং গ্রাফের বর্ধিত ছবিতে, আপনি অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) তে প্রদর্শিত রঙিন অংশটি দেখতে পাচ্ছেন।

চিত্র ১. বর্ধিত প্রোফাইল GPU রেন্ডারিং গ্রাফ।

আউটপুট সম্পর্কে নিম্নলিখিত কয়েকটি বিষয় মনে রাখবেন:

  • প্রতিটি দৃশ্যমান অ্যাপ্লিকেশনের জন্য, টুলটি একটি গ্রাফ প্রদর্শন করে।
  • অনুভূমিক অক্ষ বরাবর প্রতিটি উল্লম্ব বার একটি ফ্রেমকে প্রতিনিধিত্ব করে এবং প্রতিটি উল্লম্ব বারের উচ্চতা ফ্রেমটি রেন্ডার করতে কতটা সময় নেয় (মিলিসেকেন্ডে) তা প্রতিনিধিত্ব করে।
  • অনুভূমিক সবুজ রেখাটি ১৬.৬৭ মিলিসেকেন্ডকে প্রতিনিধিত্ব করে। প্রতি সেকেন্ডে ৬০টি ফ্রেম অর্জন করতে, প্রতিটি ফ্রেমের জন্য উল্লম্ব বারটি এই লাইনের নীচে থাকতে হবে। যেকোনো সময় একটি বার এই লাইন অতিক্রম করে, অ্যানিমেশনগুলিতে বিরতি থাকতে পারে।
  • এই টুলটি ১৬.৬৭ মিলিসেকেন্ডের সীমা অতিক্রমকারী ফ্রেমগুলিকে হাইলাইট করে, যার ফলে সংশ্লিষ্ট বারটি আরও প্রশস্ত এবং কম স্বচ্ছ হয়।
  • প্রতিটি বারে রঙিন উপাদান থাকে যা রেন্ডারিং পাইপলাইনের একটি পর্যায়ে ম্যাপ করে। ডিভাইসের API স্তরের উপর নির্ভর করে উপাদানের সংখ্যা পরিবর্তিত হয়।

অ্যান্ড্রয়েড ৬.০ এবং তার পরবর্তী ভার্সন ব্যবহার করার সময় প্রোফাইলার আউটপুটে উল্লম্ব বারের প্রতিটি অংশের বর্ণনা নিম্নলিখিত টেবিলে দেওয়া হয়েছে।

বারের উপাদান রেন্ডারিং পর্যায় বিবরণ
সোয়াপ বাফার GPU এর কাজ শেষ হওয়ার জন্য CPU কতক্ষণ অপেক্ষা করছে তা নির্দেশ করে। যদি এই বারটি লম্বা হয়, তাহলে এর অর্থ হল অ্যাপটি GPU তে খুব বেশি কাজ করছে।
কমান্ড ইস্যু OpenGL-কে ডিসপ্লে তালিকা আঁকতে এবং পুনরায় আঁকতে কমান্ড প্রদান করে অ্যান্ড্রয়েডের 2D রেন্ডারার কত সময় ব্যয় করে তা প্রতিনিধিত্ব করে। এই বারের উচ্চতা প্রতিটি ডিসপ্লে তালিকা কার্যকর করতে যে সময় লাগে তার সমষ্টির সাথে সরাসরি সমানুপাতিক - আরও ডিসপ্লে তালিকা একটি লম্বা লাল বারের সমান।
সিঙ্ক এবং আপলোড GPU-তে বিটম্যাপ তথ্য আপলোড করতে যে সময় লাগে তা প্রতিনিধিত্ব করে। একটি বৃহৎ অংশ নির্দেশ করে যে অ্যাপটি প্রচুর পরিমাণে গ্রাফিক্স লোড করতে যথেষ্ট সময় নিচ্ছে।
আঁকা ভিউয়ের ডিসপ্লে তালিকা তৈরি এবং আপডেট করতে ব্যবহৃত সময় প্রতিনিধিত্ব করে। যদি বারের এই অংশটি লম্বা হয়, তাহলে অনেক কাস্টম ভিউ অঙ্কন থাকতে পারে, অথবা onDraw পদ্ধতিতে অনেক কাজ করতে হতে পারে।
পরিমাপ / লেআউট ভিউ হায়ারার্কিতে onLayout এবং onMeasure কলব্যাকের জন্য ব্যয় করা সময়ের পরিমাণ প্রতিনিধিত্ব করে। একটি বৃহৎ অংশ নির্দেশ করে যে ভিউ হায়ারার্কি প্রক্রিয়া করতে দীর্ঘ সময় নিচ্ছে।
ইনপুট হ্যান্ডলিং এবং অ্যানিমেশন সেই ফ্রেমের জন্য চালানো সমস্ত অ্যানিমেটর মূল্যায়ন করতে এবং সমস্ত ইনপুট কলব্যাক পরিচালনা করতে যে পরিমাণ সময় লেগেছে তা প্রতিনিধিত্ব করে। যদি এই সেগমেন্টটি বড় হয়, তাহলে এটি নির্দেশ করতে পারে যে একটি কাস্টম অ্যানিমেটর বা ইনপুট কলব্যাক প্রক্রিয়াকরণে খুব বেশি সময় ব্যয় করছে। স্ক্রোলিংয়ের সময় ভিউ বাইন্ডিং, যেমন RecyclerView.Adapter.onBindViewHolder() , সাধারণত এই সেগমেন্টের সময় ঘটে এবং এই সেগমেন্টে ধীরগতির একটি সাধারণ উৎস।
বিবিধ সময় / VSync বিলম্ব দুটি পরপর ফ্রেমের মধ্যে অ্যাপটি অপারেশন সম্পাদন করতে যে সময় ব্যয় করে তা প্রতিনিধিত্ব করে। এটি UI থ্রেডে অত্যধিক প্রক্রিয়াকরণের একটি সূচক হতে পারে যা অন্য থ্রেডে অফলোড করা যেতে পারে।

সারণী ১. অ্যান্ড্রয়েড ৬.০ এবং উচ্চতর সংস্করণে কম্পোনেন্ট বার।

৪.০ (এপিআই লেভেল ১৪) এবং ৫.০ (এপিআই লেভেল ২১) এর মধ্যে থাকা অ্যান্ড্রয়েড ভার্সনগুলিতে নীল, বেগুনি, লাল এবং কমলা রঙের অংশ রয়েছে। ৪.০ এর নীচের অ্যান্ড্রয়েড ভার্সনগুলিতে কেবল নীল, লাল এবং কমলা রঙের উপাদান রয়েছে। নিম্নলিখিত টেবিলে অ্যান্ড্রয়েড ৪.০ এবং ৫.০ এর কম্পোনেন্ট বারগুলি দেখানো হয়েছে।

বারের উপাদান রেন্ডারিং পর্যায় বিবরণ
প্রক্রিয়া GPU এর কাজ শেষ হওয়ার জন্য CPU কতক্ষণ অপেক্ষা করছে তা নির্দেশ করে। যদি এই বারটি লম্বা হয়, তাহলে এর অর্থ হল অ্যাপটি GPU তে খুব বেশি কাজ করছে।
সম্পাদন করুন OpenGL-কে ডিসপ্লে তালিকা আঁকতে এবং পুনরায় আঁকতে কমান্ড প্রদান করে অ্যান্ড্রয়েডের 2D রেন্ডারার কত সময় ব্যয় করে তা প্রতিনিধিত্ব করে। এই বারের উচ্চতা প্রতিটি ডিসপ্লে তালিকা কার্যকর করতে যে সময় লাগে তার সমষ্টির সাথে সরাসরি সমানুপাতিক - আরও ডিসপ্লে তালিকা একটি লম্বা লাল বারের সমান।
XFer সম্পর্কে GPU তে বিটম্যাপ তথ্য আপলোড করতে যে সময় লাগে তা নির্দেশ করে। একটি বড় অংশ নির্দেশ করে যে অ্যাপটি প্রচুর পরিমাণে গ্রাফিক্স লোড করতে যথেষ্ট সময় নিচ্ছে। এই অংশটি Android 4.0 বা তার নিচের সংস্করণে চলমান ডিভাইসগুলিতে দৃশ্যমান নয়।
আপডেট ভিউয়ের ডিসপ্লে তালিকা তৈরি এবং আপডেট করতে ব্যবহৃত সময় প্রতিনিধিত্ব করে। যদি বারের এই অংশটি লম্বা হয়, তাহলে অনেক কাস্টম ভিউ অঙ্কন থাকতে পারে, অথবা onDraw পদ্ধতিতে অনেক কাজ করতে হতে পারে।

টেবিল ২। অ্যান্ড্রয়েড ৪.০ এবং ৫.০-এর কম্পোনেন্ট বার।

প্রোফাইলিং টুল দ্বারা প্রদত্ত তথ্য কীভাবে ব্যাখ্যা করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, "প্রোফাইল GPU রেন্ডারিং সহ বিশ্লেষণ" পড়ুন।

দ্রষ্টব্য: যদিও এই টুলটির নাম প্রোফাইল জিপিইউ রেন্ডারিং, সমস্ত পর্যবেক্ষণকৃত প্রক্রিয়া আসলে সিপিইউতেই ঘটে। রেন্ডারিং জিপিইউতে কমান্ড জমা দেওয়ার মাধ্যমে ঘটে এবং জিপিইউ স্ক্রিনটিকে অ্যাসিঙ্ক্রোনাসভাবে রেন্ডার করে। কিছু পরিস্থিতিতে, জিপিইউতে অনেক বেশি কাজ করতে হতে পারে এবং আপনার সিপিইউকে নতুন কমান্ড জমা দেওয়ার জন্য অপেক্ষা করতে হবে। যখন এটি ঘটবে, তখন আপনি কমলা এবং লাল বারগুলিতে স্পাইক দেখতে পাবেন এবং জিপিইউ কমান্ড কিউতে আরও জায়গা না হওয়া পর্যন্ত কমান্ড জমা ব্লক হয়ে যাবে।

GPU ওভারড্র ভিজ্যুয়ালাইজ করুন

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

যদি আপনি ইতিমধ্যেই এটি না করে থাকেন, তাহলে ডেভেলপার অপশন সক্রিয় করুন । তারপর, আপনার ডিভাইসে ওভারড্র কল্পনা করতে, নিম্নলিখিতভাবে এগিয়ে যান:

  1. আপনার ডিভাইসে, সেটিংসে যান এবং ডেভেলপার বিকল্পসমূহ এ আলতো চাপুন।
  2. হার্ডওয়্যার অ্যাক্সিলারেটেড রেন্ডারিং বিভাগে স্ক্রোল করুন এবং ডিবাগ জিপিইউ ওভারড্র নির্বাচন করুন।
  3. ডিবাগ GPU ওভারড্র ডায়ালগে, Show overdraw areas নির্বাচন করুন।

ওভারড্রয়ের পরিমাণ সনাক্ত করতে অ্যান্ড্রয়েড UI উপাদানগুলিকে নিম্নরূপ রঙ করে:

  • আসল রঙ: কোনও ওভারড্র নেই
  • নীল: ১ বার ওভারড্র করা হয়েছে
  • সবুজ: ২ বার ওভারড্র করা হয়েছে
  • গোলাপী: ৩ বার ওভারড্র করা হয়েছে
  • লাল: ৪ বা তার বেশি বার ওভারড্র করা হয়েছে

চিত্র ২। একটি অ্যাপ যেমনটি সাধারণত দেখা যায় (বামে), এবং যেমনটি দেখা যায় GPU ওভারড্র সক্ষম (ডানে) সহ।

লক্ষ্য করুন যে এই রঙগুলি আধা-স্বচ্ছ, তাই আপনি স্ক্রিনে ঠিক কোন রঙটি দেখতে পাবেন তা আপনার UI এর বিষয়বস্তুর উপর নির্ভর করে।

এখন যেহেতু আপনি বুঝতে পারছেন যে আপনার লেআউটে কোথায় ওভারড্র করা হয়, তাই কীভাবে ওভারড্রা কমাবেন তা পড়ুন।

মনে রাখবেন যে কিছু ওভারড্র অনিবার্য। আপনার অ্যাপের ইউজার ইন্টারফেস টিউন করার সময়, এমন একটি ভিজ্যুয়ালাইজেশনে পৌঁছানোর চেষ্টা করুন যা বেশিরভাগ সত্যিকারের রঙ দেখায় অথবা শুধুমাত্র 1X ওভারড্র (নীল) দেখায়।

চিত্র ৩। এমন একটি অ্যাপের উদাহরণ যেখানে প্রচুর ওভারড্র (বামে) এবং অনেক কম ওভারড্র (ডানে) রয়েছে।