অ্যান্ড্রয়েডে কিছু অন-ডিভাইস বিকাশকারী বিকল্প রয়েছে যা আপনাকে কল্পনা করতে সাহায্য করে যে আপনার অ্যাপটি এর UI রেন্ডার করার ক্ষেত্রে কোথায় সমস্যা হতে পারে, যেমন প্রয়োজনের চেয়ে বেশি রেন্ডারিং কাজ সম্পাদন করা বা দীর্ঘ থ্রেড এবং GPU ক্রিয়াকলাপ চালানো। এই পৃষ্ঠাটি বর্ণনা করে কিভাবে GPU ওভারড্র এবং প্রোফাইল GPU রেন্ডারিং ডিবাগ করতে হয়।
অন-ডিভাইস বিকাশকারী বিকল্পগুলি সম্পর্কে আরও জানতে, সেগুলিকে কীভাবে সক্ষম করবেন সহ, পড়ুন অন-ডিভাইস বিকাশকারী বিকল্পগুলি কনফিগার করুন ।
প্রোফাইল GPU রেন্ডারিং গতি
প্রোফাইল GPU রেন্ডারিং টুলটি স্ক্রলিং হিস্টোগ্রাম হিসাবে প্রদর্শন করে, প্রতি ফ্রেমে 16.67ms এর বেঞ্চমার্কের তুলনায় একটি UI উইন্ডোর ফ্রেম রেন্ডার করতে কত সময় লাগে তার একটি ভিজ্যুয়াল উপস্থাপনা।
কম শক্তিশালী GPU-তে, উপলব্ধ ফিল-রেট (যে গতিতে GPU ফ্রেম বাফার পূরণ করতে পারে) বেশ কম হতে পারে। একটি ফ্রেম আঁকার জন্য প্রয়োজনীয় পিক্সেলের সংখ্যা বাড়ার সাথে সাথে, GPU নতুন কমান্ডগুলি প্রক্রিয়া করতে বেশি সময় নিতে পারে এবং বাকি সিস্টেমটিকে এটি ধরা না হওয়া পর্যন্ত অপেক্ষা করতে বলে। প্রোফাইলিং টুল আপনাকে শনাক্ত করতে সাহায্য করে যখন GPU পিক্সেল আঁকতে গিয়ে অভিভূত হয় বা ভারী ওভারড্রের দ্বারা বোঝা হয়।
প্রোফাইলার সক্ষম করুন
আপনি শুরু করার আগে, নিশ্চিত করুন যে আপনি Android 4.1 (API লেভেল 16) বা উচ্চতর চলমান একটি ডিভাইস ব্যবহার করছেন এবং আপনি বিকাশকারী বিকল্পগুলি সক্ষম করছেন ৷ আপনার অ্যাপ ব্যবহার করার সময় প্রোফাইলিং ডিভাইস GPU রেন্ডারিং শুরু করতে, নিম্নরূপ এগিয়ে যান:
- আপনার ডিভাইসে, সেটিংসে যান এবং বিকাশকারী বিকল্পগুলিতে আলতো চাপুন।
- মনিটরিং বিভাগে, ডিভাইসে চলমান Android এর সংস্করণের উপর নির্ভর করে প্রোফাইল GPU রেন্ডারিং বা প্রোফাইল HWUI রেন্ডারিং নির্বাচন করুন।
- প্রোফাইল GPU রেন্ডারিং ডায়ালগে, আপনার ডিভাইসের স্ক্রিনে গ্রাফগুলিকে ওভারলে করতে বার হিসাবে অন স্ক্রীন বেছে নিন।
- আপনি যে অ্যাপটি প্রোফাইল করতে চান সেটি খুলুন।
আউটপুট পরিদর্শন করুন
চিত্র 1-এ দেখানো প্রোফাইল GPU রেন্ডারিং গ্রাফের বর্ধিত চিত্রটিতে, আপনি Android 6.0 (API স্তর 23) এ প্রদর্শিত রঙিন বিভাগটি দেখতে পারেন।
আউটপুট সম্পর্কে লক্ষ্য করার জন্য নিম্নলিখিত কয়েকটি বিষয় রয়েছে:
- প্রতিটি দৃশ্যমান অ্যাপ্লিকেশনের জন্য, টুলটি একটি গ্রাফ প্রদর্শন করে।
- অনুভূমিক অক্ষ বরাবর প্রতিটি উল্লম্ব বার একটি ফ্রেমের প্রতিনিধিত্ব করে এবং প্রতিটি উল্লম্ব বারের উচ্চতা ফ্রেমটি রেন্ডার করতে কত সময় নিয়েছে (মিলিসেকেন্ডে) উপস্থাপন করে।
- অনুভূমিক সবুজ রেখাটি 16.67 মিলিসেকেন্ডের প্রতিনিধিত্ব করে। প্রতি সেকেন্ডে 60 ফ্রেম অর্জন করতে, প্রতিটি ফ্রেমের জন্য উল্লম্ব বারটিকে এই লাইনের নীচে থাকতে হবে। যে কোন সময় একটি বার এই লাইন অতিক্রম করে, অ্যানিমেশনে বিরতি হতে পারে।
- টুলটি সেই ফ্রেমগুলিকে হাইলাইট করে যা 16.67 মিলিসেকেন্ড থ্রেশহোল্ড অতিক্রম করে সংশ্লিষ্ট বারকে আরও প্রশস্ত এবং কম স্বচ্ছ করে।
- প্রতিটি বারে রঙিন উপাদান রয়েছে যা রেন্ডারিং পাইপলাইনের একটি পর্যায়ে মানচিত্র করে। ডিভাইসের API স্তরের উপর নির্ভর করে উপাদানের সংখ্যা পরিবর্তিত হয়।
নিম্নলিখিত সারণীটি Android 6.0 এবং উচ্চতর সংস্করণে চালিত একটি ডিভাইস ব্যবহার করার সময় প্রোফাইলার আউটপুটে একটি উল্লম্ব বারের প্রতিটি অংশের বিবরণ প্রদান করে৷
বারের উপাদান | রেন্ডারিং স্টেজ | বর্ণনা |
---|---|---|
অদলবদল বাফার | GPU এর কাজ শেষ করার জন্য CPU অপেক্ষা করছে সেই সময়ের প্রতিনিধিত্ব করে। যদি এই বারটি লম্বা হয়, তাহলে এর মানে অ্যাপটি GPU-তে খুব বেশি কাজ করছে। | |
কমান্ড ইস্যু | ডিসপ্লে তালিকা আঁকতে এবং পুনরায় আঁকতে ওপেনজিএল-কে কমান্ড জারি করে Android এর 2D রেন্ডারার দ্বারা ব্যয় করা সময়ের প্রতিনিধিত্ব করে৷ এই বারের উচ্চতা প্রতিটি ডিসপ্লে তালিকা কার্যকর করতে যে সময় নেয় তার যোগফলের সাথে সরাসরি সমানুপাতিক — আরও প্রদর্শন তালিকা একটি লম্বা লাল বারের সমান। | |
সিঙ্ক এবং আপলোড | GPU-তে বিটম্যাপ তথ্য আপলোড করতে যে সময় লাগে তা উপস্থাপন করে। একটি বড় অংশ নির্দেশ করে যে অ্যাপটি প্রচুর পরিমাণে গ্রাফিক্স লোড করতে যথেষ্ট সময় নিচ্ছে। | |
আঁকা | দৃশ্যের প্রদর্শন তালিকাগুলি তৈরি এবং আপডেট করতে ব্যবহৃত সময়ের প্রতিনিধিত্ব করে। যদি বারের এই অংশটি লম্বা হয়, তাহলে প্রচুর কাস্টম ভিউ ড্রয়িং বা অনড্র পদ্ধতিতে অনেক কাজ হতে পারে। | |
পরিমাপ / লেআউট | ভিউ হায়ারার্কিতে onLayout এবং onMeasure কলব্যাকগুলিতে ব্যয় করা সময়ের পরিমাণ প্রতিনিধিত্ব করে। একটি বড় অংশ নির্দেশ করে যে ভিউ হায়ারার্কি প্রক্রিয়া করতে দীর্ঘ সময় নিচ্ছে। | |
ইনপুট হ্যান্ডলিং এবং অ্যানিমেশন | সেই ফ্রেমের জন্য দৌড়ানো সমস্ত অ্যানিমেটরগুলির মূল্যায়ন করতে এবং সমস্ত ইনপুট কলব্যাকগুলি পরিচালনা করতে কতটা সময় লেগেছে তা প্রতিনিধিত্ব করে৷ এই সেগমেন্টটি বড় হলে, এটি নির্দেশ করতে পারে যে একটি কাস্টম অ্যানিমেটর বা ইনপুট কলব্যাক প্রক্রিয়াকরণে অনেক বেশি সময় ব্যয় করছে। স্ক্রল করার সময় ভিউ বাইন্ডিং, যেমন RecyclerView.Adapter.onBindViewHolder() , এছাড়াও সাধারণত এই সেগমেন্টের সময় ঘটে এবং এই সেগমেন্টে মন্থরতার একটি সাধারণ উৎস। | |
বিবিধ সময় / VSync বিলম্ব | অ্যাপটি পরপর দুটি ফ্রেমের মধ্যে ক্রিয়াকলাপ সম্পাদন করার সময় ব্যয় করে তা উপস্থাপন করে। এটি UI থ্রেডে খুব বেশি প্রক্রিয়াকরণের একটি সূচক হতে পারে যা একটি ভিন্ন থ্রেডে অফলোড করা যেতে পারে। |
4.0 (API লেভেল 14) এবং 5.0 (API লেভেল 21) এর মধ্যে অ্যান্ড্রয়েড সংস্করণগুলিতে নীল, বেগুনি, লাল এবং কমলা অংশ রয়েছে। 4.0 এর নীচের Android সংস্করণগুলিতে শুধুমাত্র নীল, লাল এবং কমলা উপাদান রয়েছে৷ নিম্নলিখিত সারণীটি Android 4.0 এবং 5.0-এ উপাদান বারগুলি দেখায়৷
বারের উপাদান | রেন্ডারিং স্টেজ | বর্ণনা |
---|---|---|
প্রক্রিয়া | GPU এর কাজ শেষ করার জন্য CPU অপেক্ষা করছে সেই সময়ের প্রতিনিধিত্ব করে। যদি এই বারটি লম্বা হয়, তাহলে এর মানে অ্যাপটি GPU-তে খুব বেশি কাজ করছে। | |
এক্সিকিউট | ডিসপ্লে তালিকা আঁকতে এবং পুনরায় আঁকতে ওপেনজিএল-কে কমান্ড জারি করে Android এর 2D রেন্ডারার দ্বারা ব্যয় করা সময়ের প্রতিনিধিত্ব করে৷ এই বারের উচ্চতা প্রতিটি ডিসপ্লে তালিকা কার্যকর করতে যে সময় নেয় তার যোগফলের সাথে সরাসরি সমানুপাতিক — আরও প্রদর্শন তালিকা একটি লম্বা লাল বারের সমান। | |
এক্সফার | GPU-তে বিটম্যাপ তথ্য আপলোড করতে যে সময় লাগে তার প্রতিনিধিত্ব করে। একটি বড় অংশ নির্দেশ করে যে অ্যাপটি প্রচুর পরিমাণে গ্রাফিক্স লোড করতে যথেষ্ট সময় নিচ্ছে। এই বিভাগটি Android 4.0 বা তার নিচের সংস্করণে চলমান ডিভাইসগুলিতে দৃশ্যমান নয়৷ | |
হালনাগাদ | দৃশ্যের প্রদর্শন তালিকাগুলি তৈরি এবং আপডেট করতে ব্যবহৃত সময়ের প্রতিনিধিত্ব করে। যদি বারের এই অংশটি লম্বা হয়, তাহলে প্রচুর কাস্টম ভিউ ড্রয়িং বা অনড্র পদ্ধতিতে অনেক কাজ হতে পারে। |
প্রোফাইলিং টুল দ্বারা প্রদত্ত তথ্য কীভাবে ব্যাখ্যা করবেন সে সম্পর্কে আরও তথ্যের জন্য, প্রোফাইল GPU রেন্ডারিং এর সাথে বিশ্লেষণ পড়ুন।
দ্রষ্টব্য: যদিও এই টুলটির নাম প্রোফাইল GPU রেন্ডারিং, সমস্ত মনিটর করা প্রক্রিয়া আসলে CPU-তে ঘটে। রেন্ডারিং জিপিইউতে কমান্ড জমা দেওয়ার মাধ্যমে ঘটে এবং জিপিইউ স্ক্রিনকে অ্যাসিঙ্ক্রোনাসভাবে রেন্ডার করে। কিছু পরিস্থিতিতে, GPU-এর জন্য খুব বেশি কাজ করতে পারে এবং আপনার CPU-কে নতুন কমান্ড জমা দেওয়ার আগে অপেক্ষা করতে হবে। যখন এটি ঘটবে, আপনি কমলা এবং লাল বারগুলিতে স্পাইকগুলি দেখতে পাবেন এবং জিপিইউ কমান্ড সারিতে আরও জায়গা তৈরি না হওয়া পর্যন্ত কমান্ড জমা ব্লক করা হবে।
GPU ওভারড্র ভিজ্যুয়ালাইজ করুন
বিকাশকারী বিকল্পগুলির আরেকটি বৈশিষ্ট্য আপনাকে আপনার UI রঙ-কোডিং করে ওভারড্র শনাক্ত করতে সহায়তা করে। যখন আপনার অ্যাপ একই ফ্রেমের মধ্যে একই পিক্সেল একাধিকবার আঁকে তখন ওভারড্র হয়। সুতরাং এই ভিজ্যুয়ালাইজেশনটি দেখায় যে আপনার অ্যাপ প্রয়োজনের তুলনায় কোথায় বেশি রেন্ডারিং কাজ করছে, যা ব্যবহারকারীর কাছে দৃশ্যমান নয় এমন পিক্সেল রেন্ডার করার জন্য অতিরিক্ত GPU প্রচেষ্টার কারণে পারফরম্যান্স সমস্যা হতে পারে। সুতরাং, যখনই সম্ভব আপনার ওভারড্র ইভেন্টগুলি ঠিক করা উচিত।
আপনি যদি ইতিমধ্যে এটি না করে থাকেন তবে বিকাশকারী বিকল্পগুলি সক্ষম করুন ৷ তারপরে, আপনার ডিভাইসে ওভারড্রকে কল্পনা করতে, নিম্নরূপ এগিয়ে যান:
- আপনার ডিভাইসে, সেটিংসে যান এবং বিকাশকারী বিকল্পগুলিতে আলতো চাপুন।
- হার্ডওয়্যার অ্যাক্সিলারেটেড রেন্ডারিং বিভাগে নীচে স্ক্রোল করুন এবং ডিবাগ জিপিইউ ওভারড্র নির্বাচন করুন।
- ডিবাগ GPU ওভারড্র ডায়ালগে, ওভারড্র এলাকা দেখান নির্বাচন করুন।
অ্যান্ড্রয়েড রঙের UI উপাদানগুলি নিম্নরূপ ওভারড্রের পরিমাণ সনাক্ত করতে:
- সত্য রঙ: কোন ওভারড্র
- নীল: ওভারড্রন 1 বার
- সবুজ: ওভারড্রন 2 বার
- গোলাপী: ওভারড্রন 3 বার
- লাল: 4 বা তার বেশি বার ওভারড্রন করা হয়েছে
লক্ষ্য করুন যে এই রঙগুলি আধা-স্বচ্ছ, তাই আপনি স্ক্রিনে যে রঙটি দেখতে পাচ্ছেন তা আপনার UI এর সামগ্রীর উপর নির্ভর করে।
আপনার লেআউটে কোথায় ওভারড্র হয় তা এখন আপনি চিনতে পারেন, কীভাবে ওভারড্র কম করবেন তা পড়ুন।
মনে রাখবেন কিছু ওভারড্র অনিবার্য। আপনি যখন আপনার অ্যাপের ইউজার ইন্টারফেস টিউন করছেন, এমন একটি ভিজ্যুয়ালাইজেশনে পৌঁছানোর চেষ্টা করুন যা বেশিরভাগ সত্যিকারের রং বা শুধুমাত্র 1X ওভারড্র (নীল) দেখায়।