ওভারড্র কম করুন

এই পৃষ্ঠায় ওভারড্র কী, কীভাবে এটি নির্ণয় করা যায় এবং এটি দূর বা প্রশমিত করার উপায়গুলো ব্যাখ্যা করা হয়েছে।

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

ওভারড্র সম্পর্কে

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

ওভারড্র সমস্যা খুঁজুন

ওভারড্র আপনার অ্যাপের পারফরম্যান্সকে প্রভাবিত করছে কিনা, তা নির্ধারণ করতে প্ল্যাটফর্মটি নিম্নলিখিত টুলগুলো প্রদান করে।

জিপিইউ ওভারড্র টুল ডিবাগ করুন

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

আরও তথ্যের জন্য, GPU ওভারড্র ভিজ্যুয়ালাইজ করুন দেখুন।

প্রোফাইল জিপিইউ রেন্ডারিং টুল

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

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

আরও তথ্যের জন্য, প্রোফাইল জিপিইউ রেন্ডারিং স্পিড দেখুন।

ওভারড্র ঠিক করুন

ওভারড্র কমাতে বা দূর করতে আপনি নিম্নলিখিত পদক্ষেপগুলো নিতে পারেন:

  • লেআউট থেকে অপ্রয়োজনীয় ব্যাকগ্রাউন্ড সরিয়ে ফেলুন।
  • স্বচ্ছতা হ্রাস করুন।

এই অংশে এই উভয় পদ্ধতি সম্পর্কে তথ্য প্রদান করা হয়েছে।

লেআউট থেকে অপ্রয়োজনীয় ব্যাকগ্রাউন্ড সরিয়ে ফেলুন

ডিফল্টরূপে, একটি লেআউটের কোনো ব্যাকগ্রাউন্ড থাকে না, যার মানে এটি নিজে থেকে সরাসরি কিছু রেন্ডার করে না। তবে, যখন লেআউটগুলির ব্যাকগ্রাউন্ড থাকে, তখন সেগুলি ওভারড্র-তে ভূমিকা রাখতে পারে।

অপ্রয়োজনীয় ব্যাকগ্রাউন্ড সরিয়ে দিয়ে আপনি রেন্ডারিং পারফরম্যান্স উন্নত করতে পারেন; যেমন এমন কোনো ব্যাকগ্রাউন্ড যা অ্যাপের আঁকা অন্য সবকিছুর দ্বারা সম্পূর্ণরূপে ঢাকা পড়ে অদৃশ্য হয়ে যায়। উদাহরণস্বরূপ, একটি চাইল্ড Box বা .background মডিফায়ারযুক্ত কোনো লেআউট তার প্যারেন্ট কন্টেইনারের ব্যাকগ্রাউন্ডকে সম্পূর্ণরূপে ঢেকে ফেলতে পারে, যার ফলে প্যারেন্টের ড্রয়িং পাস ব্যবহারকারীর কাছে পুরোপুরি অদৃশ্য হয়ে যায়, অথচ তা জিপিইউ দ্বারা সম্পূর্ণরূপে প্রসেসড হতে থাকে।

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

স্বচ্ছতা হ্রাস করুন

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

স্বচ্ছ অ্যানিমেশন, ফেড-আউট এবং ড্রপ শ্যাডোর মতো ভিজ্যুয়াল ইফেক্টগুলোতে কিছুটা স্বচ্ছতা থাকে, এবং একারণে এগুলো ওভারড্র-তে উল্লেখযোগ্যভাবে অবদান রাখতে পারে। এই পরিস্থিতিতে আপনি রেন্ডার করা স্বচ্ছ অবজেক্টের সংখ্যা কমিয়ে ওভারড্র উন্নত করতে পারেন। উদাহরণস্বরূপ, আপনি একটি Text কম্পোজেবলে কালো টেক্সট এঁকে এবং modifier = Modifier.alpha(0.5f) ব্যবহার করে একটি স্বচ্ছ আলফা ভ্যালু প্রয়োগ করে ধূসর টেক্সট পেতে পারেন। তবে, আপনি সরাসরি কম্পোজেবলটির টেক্সট কালারকে একটি অস্বচ্ছ ধূসর রঙে সেট করে আরও ভালো পারফরম্যান্সের সাথে একই ইফেক্ট পেতে পারেন: color = Color.Black.copy(alpha = 0.5f)

সম্পূর্ণ ড্রয়িং পাইপলাইন জুড়ে স্বচ্ছতার কারণে সৃষ্ট পারফরম্যান্স খরচ সম্পর্কে আরও জানতে, “Hidden Costs of Transparency ” দেখুন।