গ্রাফিক্স মেমরি খরচ কমাতে

গ্রাফিক্স স্ট্যাকে, IPC-তে ফাইল বর্ণনাকারী পাঠানোর সাথে সম্পর্কিত ওভারহেড কমাতে কম্পোজার HAL এবং SurfaceFlinger-এর মধ্যে একটি প্রতি-স্তর বাফার ক্যাশে থাকে। Android 14-এর আগে, যখন একটি GraphicBufferProducer SurfaceFlinger-এর GraphicBufferConsumer থেকে সংযোগ বিচ্ছিন্ন করে, উদাহরণস্বরূপ, যখন একটি MediaCodec SurfaceView থেকে সংযোগ বিচ্ছিন্ন করে, তখন সিস্টেমটি এই বাফার ক্যাশেটি পরিষ্কার করত না। Android 14 দিয়ে শুরু করে, আপনি গ্রাফিক্স মেমরি খরচ কমাতে জোর করে এই বাফার ক্যাশেটি পরিষ্কার করতে পারেন।

নিম্নলিখিত দুটি বিকল্পের মধ্যে একটি বেছে নিন:

  • অ্যান্ড্রয়েড ১৪ এবং তার পরবর্তী ভার্সনে লঞ্চ হওয়া ডিভাইসগুলির জন্য, আপনাকে নতুন কম্পোজার HAL API সংস্করণ ৩.২ প্রয়োগ করতে হবে। এই বিকল্পটি ডিফল্টরূপে সক্রিয় হয় এবং সর্বাধিক পরিমাণ মেমোরি সাশ্রয় করে। ১৪ এবং তার পরবর্তী ভার্সনে আপগ্রেড করা ডিভাইসগুলিও সম্পূর্ণ মেমোরি সুবিধা অর্জনের জন্য এই বিকল্পটি ব্যবহার করতে পারে।
  • যেসব ডিভাইসে Android 14 তে আপগ্রেড করা হচ্ছে এবং Composer HAL 3.2 API প্রয়োগ করতে চান না, সেসব ডিভাইসের জন্য আপনি backward-compatible বিকল্পটি সক্ষম করতে পারেন। এই বিকল্পটি পূর্ববর্তী বিকল্পের মতো প্রায় সমান মেমরি সাশ্রয় করে।

পরবর্তী দুটি বিভাগে প্রতিটি বিকল্প কীভাবে বাস্তবায়ন করতে হয় তা ব্যাখ্যা করা হয়েছে।

কম্পোজার HAL 3.2 API বাস্তবায়ন করুন

সম্পূর্ণ গ্রাফিক্স বাফার মেমরি সুবিধা অর্জন করতে, আপনাকে অবশ্যই:

  1. আপনার কম্পোজার HAL বাস্তবায়ন সংস্করণ 3.2 এ আপডেট করুন।
  2. তালিকায় পাওয়া স্লট নম্বর দ্বারা নির্দেশিত বাফার ক্যাশে এন্ট্রিগুলি পরিষ্কার করে LayerCommand::bufferSlotsToClear প্রক্রিয়া করুন।

গ্রাফিক বাফার মেমরির সাথে সম্পর্কিত কম্পোজার HAL 3.2 API গুলি, যার মধ্যে LayerCommand::bufferSlotsToClear অন্তর্ভুক্ত, LayerCommand.aidl ফাইলে রয়েছে।

ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বিকল্পটি সক্ষম করুন

ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ মেমোরি রিডাকশন অপশনটি ক্যাশে স্লটে থাকা একটি বাস্তব বাফারকে 1x1 প্লেসহোল্ডার বাফার দিয়ে প্রতিস্থাপন করে। এর ফলে বর্তমান সক্রিয় বাফার স্লট ব্যতীত সমস্ত পার্জড স্লটের জন্য মেমোরি সাশ্রয় হয়। আংশিক মেমোরি সাশ্রয় সুবিধা অর্জনের জন্য, surface_flinger.clear_slots_with_set_layer_buffer sysprop কে true এ সেট করে ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ অপশনটি সক্ষম করুন। এই syspropটি property_contexts ফাইলে পাওয়া যায়।

এই sysprop সেট করার জন্য আপনার Composer HAL বাস্তবায়নকে একই স্তরের জন্য একটি একক বর্তমান চক্রে একাধিক setLayerBuffer কমান্ড সঠিকভাবে পরিচালনা করতে হবে।

ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বিকল্পটি সক্রিয় করার ফলে নিম্নলিখিত প্রভাবগুলি দেখা যায়:

  • AIDL HAL-এর জন্য: SurfaceFlinger একটি একক স্তরের জন্য একাধিক LayerCommand ইনস্ট্যান্স পাঠায়, প্রতিটিতে একটি করে BufferCommand থাকে। প্রতিটি BufferCommand একটি 1x1 প্লেসহোল্ডার বাফার হ্যান্ডেল এবং ক্যাশে বাফার স্লটের জন্য একটি স্লট নম্বর থাকে যার জন্য শুদ্ধকরণ প্রয়োজন।

  • HIDL HAL-এর জন্য: SurfaceFlinger একাধিক SELECT_DISPLAY , SELECT_LAYER , SET_BUFFER কমান্ড পাঠায়। এই কমান্ডগুলিতে একটি 1x1 প্লেসহোল্ডার বাফার হ্যান্ডেল এবং ক্যাশে বাফার স্লটের জন্য একটি স্লট নম্বর থাকে যার জন্য শুদ্ধকরণ প্রয়োজন।

ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বিকল্পটি কিছু ডিভাইসে কম্পোজার HAL ক্র্যাশ করতে পারে। এই সমস্যাটি সমাধানের জন্য আপনি আপনার কম্পোজার HAL পরিবর্তন করতে সক্ষম হতে পারেন। এই আচরণ নিয়ন্ত্রণকারী কোডটি এখানে পাওয়া যাবে:

গ্রাফিক্স বাফার ক্যাশে মেমরি খরচ পরীক্ষা করুন

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

VTS পরীক্ষাগুলি উপলব্ধ রয়েছে যা যাচাই করে যে HAL বাস্তবায়নটি নতুন API কল (HAL সংস্করণ 3.2+) বা ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বাস্তবায়নের জন্য একাধিক setLayerBuffer কমান্ড গ্রহণ করতে কার্যকরীভাবে সক্ষম। তবে, সঠিক কার্যকারিতার জন্য এটিকে পর্যাপ্ত পরীক্ষা হিসাবে বিবেচনা করা উচিত নয়, কারণ কিছু ডিভাইস এই VTS পরীক্ষাগুলি পাস করে, কিন্তু বাস্তব-বিশ্ব ব্যবহারের ক্ষেত্রে ব্যর্থ হয়।

নতুন VTS পরীক্ষার জন্য, নিম্নলিখিত লিঙ্কগুলি দেখুন: