ক্লায়েন্ট ফ্রেমবাফার ম্যানেজমেন্ট

Android 13 থেকে শুরু করে, ডিসপ্লে রেজোলিউশন পরিবর্তন হলে, সিস্টেম নতুন ফ্রেমবাফার অ্যাসাইন করে, যা ক্লায়েন্ট কম্পোজিশনের সময় ব্যবহার করা হয়। রেজোলিউশন পরিবর্তনের পরে SurfaceFlinger পরবর্তী ইনভ্যালিডেট চক্রে এই অ্যাসাইনমেন্ট পারফর্ম করে।

রেজোলিউশন পরিবর্তন করার সময় ফ্রেমবাফার ম্যানেজমেন্ট

নিম্নলিখিত দুটি পরিস্থিতির মধ্যে একটির কারণে রেজোলিউশন পরিবর্তন হয়:

  • একটি হটপ্লাগ ইভেন্ট, যা হার্ডওয়্যার কম্পোজার (HWC) দ্বারা শুরু হয়, যা ঘটে যখন একটি এক্সটার্নাল ডিসপ্লে থেকে অন্য এক্সটার্নাল ডিসপ্লেতে অদলবদল করা হয় যার একটি ভিন্ন ডিফল্ট রেজোলিউশন আছে।

    হটপ্লাগ ইভেন্টের সময়, HWC পুরনো ডিসপ্লে ডেটা ডিঅ্যালোকেট করলে, পুরনো ফ্রেমবাফার -এর হ্যান্ডেল রিলিজ করে দেয়।

  • SurfaceFlinger-এর মাধ্যমে ডিসপ্লে মোড সুইচ করার প্রসেস শুরু হয়, যা তখনই হয় যখন আপনি ব্যবহারকারীর সেটিংস ব্যবহার করে রেজোলিউশন পরিবর্তন করেন অথবা কোনও অ্যাপ preferredDisplayModeId ব্যবহার করে রেজোলিউশন পরিবর্তন করে।

    ডিসপ্লে মোড পরিবর্তন করার সময়, SurfaceFlinger setActiveConfig বা setActiveConfigWithConstraints কল করার আগে বিদ্যমান ক্লায়েন্ট ফ্রেমবাফার থেকে হ্যান্ডেল রিলিজ করে।

যথেষ্ট ফ্রেমবাফার মেমরি নেই এমন ডিভাইসে মেমরি ফ্র্যাগমেন্টেশনের মতো মারাত্মক সমস্যা প্রতিরোধ করতে, HWC-কে অবশ্যই পুরনো ফ্রেমবাফারের হ্যান্ডেল রিলিজ করতে হবে। নিম্নলিখিত ক্ষেত্রে এটি খুবই গুরুত্বপূর্ণ:

  • হটপ্লাগ ইভেন্টের জন্য, onHotplug কল করার ঠিক আগে।

  • মোড পরিবর্তন করার জন্য, setActiveConfig বা setActiveConfigWithConstraints কল করার সাথে সাথেই।

হ্যান্ডেল রিলিজ করলে, SurfaceFlinger-এর পরবর্তী invalidate চক্র চলাকালীন নতুন ফ্রেমবাফার অ্যালোকেট করার আগে ফ্রেমবাফার মেমরি সম্পূর্ণভাবে ডিঅ্যালোকেট করা যায়।

ফ্রেমবাফার ম্যানেজমেন্ট সংক্রান্ত সাজেশন

HWC যদি পুরনো ফ্রেমবাফারের হ্যান্ডেল সময়মতো রিলিজ না করে, তাহলে পুরনো ফ্রেমবাফার ডিলোক্যাট করার আগেই নতুন ফ্রেমবাফার অ্যালোকেট করা হয়। ফ্র্যাগমেন্টেশন বা অন্যান্য সমস্যার কারণে নতুন অ্যালোকেশন ব্যর্থ হলে এটি মারাত্মক সমস্যার কারণ হতে পারে। এমনকি, HWC যদি এই হ্যান্ডেলগুলি একেবারেই রিলিজ না করে, তাহলে মেমরি লিক হতে পারে।

ভয়াবহ অ্যালোকেশন সংক্রান্ত সমস্যা এড়াতে, এইসব সাজেশন অনুসরণ করুন:

  • নতুন ক্লায়েন্ট ফ্রেমবাফার না দেওয়া পর্যন্ত HWC-কে যদি পুরনো ক্লায়েন্ট ফ্রেমবাফার ব্যবহার করা চালিয়ে যেতে হয়, তাহলে পুরনো ও নতুন দুটি ফ্রেমবাফারের জন্যই যথেষ্ট মেমরি রিজার্ভ করা এবং ফ্রেমবাফার মেমরি স্পেসে সম্ভবত ডিফ্র্যাগমেন্টেশন অ্যালগরিদম চালানো অত্যন্ত গুরুত্বপূর্ণ।

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

ফ্রেমবাফার ম্যানেজমেন্ট পরীক্ষা করা

OEM-কে পরামর্শ দেওয়া হয় যে তাদের ডিভাইসের জন্য রেজোলিউশন সুইচ জুড়ে সঠিক ক্লায়েন্ট ফ্রেমবাফার মেমরি ম্যানেজমেন্টের জন্য পরীক্ষা করে দেখুন। এটি নিম্নলিখিতভাবে বর্ণনা করা হয়েছে:

  • হটপ্লাগ ইভেন্টের জন্য, আলাদা আলাদা রেজোলিউশন আছে এমন দুটি আলাদা ডিসপ্লে আনপ্লাগ করে আবার কানেক্ট করুন।

  • মোড পরিবর্তন করার জন্য, ফ্রেমবাফার মেমরি আচরণ পরীক্ষা করতে ModeSwitchingTestActivity CTS Verifier টেস্ট ব্যবহার করুন। এই পরীক্ষাটি এমন সমস্যাগুলি দৃশ্যত শনাক্ত করতে পারে যা প্রোগ্রামগতভাবে শনাক্ত করা কঠিন ।