ক্লায়েন্ট ফ্রেমবাফার ব্যবস্থাপনা

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

রেজোলিউশন সুইচের সময় ফ্রেমবাফার ব্যবস্থাপনা

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

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

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

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

    একটি ডিসপ্লে মোড স্যুইচ করার সময়, setActiveConfig বা setActiveConfigWithConstraints কল করার আগে বিদ্যমান ক্লায়েন্ট ফ্রেমবাফারগুলির হ্যান্ডেলগুলি SurfaceFlinger দ্বারা প্রকাশ করা হয়।

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

হ্যান্ডলগুলি প্রকাশ করার ফলে সারফেসফ্লিংগার পরবর্তী অবৈধ চক্রের সময় সঞ্চালিত নতুন ফ্রেমবাফারগুলির বরাদ্দের আগে ফ্রেমবাফার মেমরিকে সম্পূর্ণরূপে ডিলকেটেড করার অনুমতি দেয়।

ফ্রেমবাফার পরিচালনার জন্য সুপারিশ

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

বিপর্যয়মূলক বরাদ্দ ব্যর্থতা এড়াতে, এই সুপারিশগুলি অনুসরণ করুন:

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

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

পরীক্ষা ফ্রেমবাফার ব্যবস্থাপনা

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

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

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

,

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

রেজোলিউশন সুইচের সময় ফ্রেমবাফার ব্যবস্থাপনা

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

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

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

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

    একটি ডিসপ্লে মোড স্যুইচ করার সময়, setActiveConfig বা setActiveConfigWithConstraints কল করার আগে বিদ্যমান ক্লায়েন্ট ফ্রেমবাফারগুলির হ্যান্ডেলগুলি SurfaceFlinger দ্বারা প্রকাশ করা হয়।

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

হ্যান্ডলগুলি প্রকাশ করার ফলে সারফেসফ্লিংগার পরবর্তী অবৈধ চক্রের সময় সঞ্চালিত নতুন ফ্রেমবাফারগুলির বরাদ্দের আগে ফ্রেমবাফার মেমরিকে সম্পূর্ণরূপে ডিলকেটেড করার অনুমতি দেয়।

ফ্রেমবাফার পরিচালনার জন্য সুপারিশ

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

বিপর্যয়মূলক বরাদ্দ ব্যর্থতা এড়াতে, এই সুপারিশগুলি অনুসরণ করুন:

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

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

পরীক্ষা ফ্রেমবাফার ব্যবস্থাপনা

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

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

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

,

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

রেজোলিউশন সুইচের সময় ফ্রেমবাফার ব্যবস্থাপনা

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

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

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

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

    একটি ডিসপ্লে মোড স্যুইচ করার সময়, setActiveConfig বা setActiveConfigWithConstraints কল করার আগে বিদ্যমান ক্লায়েন্ট ফ্রেমবাফারগুলির হ্যান্ডেলগুলি SurfaceFlinger দ্বারা প্রকাশ করা হয়।

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

হ্যান্ডলগুলি প্রকাশ করার ফলে সারফেসফ্লিংগার পরবর্তী অবৈধ চক্রের সময় সঞ্চালিত নতুন ফ্রেমবাফারগুলির বরাদ্দের আগে ফ্রেমবাফার মেমরিকে সম্পূর্ণরূপে ডিলকেটেড করার অনুমতি দেয়।

ফ্রেমবাফার পরিচালনার জন্য সুপারিশ

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

বিপর্যয়মূলক বরাদ্দ ব্যর্থতা এড়াতে, এই সুপারিশগুলি অনুসরণ করুন:

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

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

পরীক্ষা ফ্রেমবাফার ব্যবস্থাপনা

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

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

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