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