অ্যান্ড্রয়েড ১৩ থেকে শুরু করে, সিস্টেমটি ক্লায়েন্ট কম্পোজিশনের সময় ব্যবহৃত নতুন ফ্রেমবাফার বরাদ্দ করে, যখনই ডিসপ্লে রেজোলিউশন পরিবর্তন হয়। রেজোলিউশন পরিবর্তনের পর পরবর্তী অবৈধ চক্রে সারফেসফ্লিংগার এই বরাদ্দ সম্পাদন করে।
রেজোলিউশন সুইচের সময় ফ্রেমবাফার ব্যবস্থাপনা
নিম্নলিখিত দুটি পরিস্থিতির একটির কারণে রেজোলিউশন পরিবর্তন ঘটে:
হার্ডওয়্যার কম্পোজার (HWC) দ্বারা শুরু হওয়া একটি হটপ্লাগ ইভেন্ট , যা একটি বাহ্যিক ডিসপ্লে থেকে অন্য একটি বাহ্যিক ডিসপ্লেতে অদলবদল করার সময় ঘটে যার ডিফল্ট রেজোলিউশন ভিন্ন।
হটপ্লাগ ইভেন্টের সময়, HWC পুরানো ডিসপ্লে ডেটা ডিলোকেট করার সময় পুরানো ফ্রেমবাফারগুলিতে হ্যান্ডেলগুলি ছেড়ে দেয়।
SurfaceFlinger দ্বারা শুরু করা একটি ডিসপ্লে মোড সুইচ, যা তখন ঘটে যখন আপনি ব্যবহারকারীর সেটিংস ব্যবহার করে রেজোলিউশন পরিবর্তন করেন, অথবা কোনও অ্যাপ
preferredDisplayModeIdব্যবহার করে রেজোলিউশন পরিবর্তন করে।ডিসপ্লে মোড স্যুইচ করার সময়, SurfaceFlinger
setActiveConfigবাsetActiveConfigWithConstraintsকল করার আগে বিদ্যমান ক্লায়েন্ট ফ্রেমবাফারগুলিতে হ্যান্ডেলগুলি প্রকাশ করে।
পর্যাপ্ত ফ্রেমবাফার মেমোরি ছাড়া ডিভাইসগুলিতে মেমোরি ফ্র্যাগমেন্টেশনের মতো ভয়াবহ সমস্যা প্রতিরোধ করতে, HWC-কে অবশ্যই পুরানো ফ্রেমবাফারগুলিতে হ্যান্ডেলগুলি ছেড়ে দিতে হবে। নিম্নলিখিত ক্ষেত্রে এটি অত্যন্ত গুরুত্বপূর্ণ:
হটপ্লাগ ইভেন্টের জন্য,
onHotplugকল করার ঠিক আগে।মোড সুইচের জন্য,
setActiveConfigঅথবাsetActiveConfigWithConstraintsকল করার পরপরই।
হ্যান্ডেলগুলি রিলিজ করার ফলে পরবর্তী অবৈধ চক্রের সময় SurfaceFlinger নতুন ফ্রেমবাফার বরাদ্দ করার আগে ফ্রেমবাফার মেমরি সম্পূর্ণরূপে ডিলোকেট করা সম্ভব হয়।
ফ্রেমবাফার ব্যবস্থাপনার জন্য সুপারিশ
যদি HWC সময়মতো পুরানো ফ্রেমবাফারগুলিতে হ্যান্ডেলগুলি প্রকাশ না করে, তাহলে পুরানো ফ্রেমবাফার ডিলোকেশনের আগে নতুন ফ্রেমবাফার বরাদ্দ ঘটে। ফ্র্যাগমেন্টেশন বা অন্যান্য সমস্যার কারণে নতুন বরাদ্দ ব্যর্থ হলে এটি বিপর্যয়কর সমস্যার সৃষ্টি করতে পারে। আরও খারাপ, যদি HWC এই হ্যান্ডেলগুলি একেবারেই প্রকাশ না করে, তাহলে মেমরি লিক হতে পারে।
বিপর্যয়কর বরাদ্দ ব্যর্থতা এড়াতে, এই সুপারিশগুলি অনুসরণ করুন:
যদি HWC-কে নতুন ক্লায়েন্ট ফ্রেমবাফার সরবরাহ না করা পর্যন্ত পুরানো ক্লায়েন্ট ফ্রেমবাফার ব্যবহার চালিয়ে যেতে হয়, তাহলে পুরানো এবং নতুন ফ্রেমবাফার উভয়ের জন্য পর্যাপ্ত মেমরি সংরক্ষণ করা এবং সম্ভবত ফ্রেমবাফার মেমরি স্পেসে ডিফ্র্যাগমেন্টেশন অ্যালগরিদম চালানো অত্যন্ত গুরুত্বপূর্ণ।
ফ্রেমবাফারগুলির জন্য একটি ডেডিকেটেড মেমোরি পুল বরাদ্দ করুন যা বাকি গ্রাফিক বাফার মেমোরি থেকে আলাদা। এটি গুরুত্বপূর্ণ কারণ একটি তৃতীয় পক্ষের প্রক্রিয়া ফ্রেমবাফার ডিলোকেশন এবং রিলোকেশনের মধ্যে গ্রাফিক্স মেমোরি বরাদ্দ করার চেষ্টা করতে পারে। যদি ফ্রেমবাফার একই গ্রাফিক্স মেমোরি পুল ব্যবহার করে এবং গ্রাফিক্স মেমোরি পূর্ণ থাকে, তাহলে তৃতীয় পক্ষের প্রক্রিয়াটি ফ্রেমবাফার দ্বারা পূর্বে বরাদ্দ করা মেমোরি দখল করতে পারে। এর ফলে ফ্রেমবাফার রিলোকেশন বা মেমোরি ফ্র্যাগমেন্টেশনের জন্য অপর্যাপ্ত মেমোরি হতে পারে।
ফ্রেমবাফার ব্যবস্থাপনা পরীক্ষা করুন
OEM-গুলিকে তাদের ডিভাইসের জন্য রেজোলিউশন সুইচগুলিতে সঠিক ক্লায়েন্ট ফ্রেমবাফার মেমরি ব্যবস্থাপনা পরীক্ষা করার পরামর্শ দেওয়া হচ্ছে, যা নিম্নরূপ বর্ণনা করা হয়েছে:
হটপ্লাগ ইভেন্টের জন্য, দুটি ভিন্ন ডিসপ্লে আনপ্লাগ করে পুনরায় সংযোগ করুন যার রেজোলিউশন ভিন্ন।
মোড সুইচের জন্য, ফ্রেমবাফার মেমরি আচরণ পরীক্ষা করার জন্য একটি মোড সুইচ শুরু করতে
ModeSwitchingTestActivityCTS Verifier পরীক্ষা ব্যবহার করুন। এই পরীক্ষাটি দৃশ্যত এমন সমস্যাগুলি সনাক্ত করতে পারে যা প্রোগ্রাম্যাটিকভাবে সনাক্ত করা কঠিন।