ফ্রেম পেসিং

অ্যান্ড্রয়েড ফ্রেম পেসিং লাইব্রেরি, যা সোয়াপি নামেও পরিচিত, অ্যান্ড্রয়েড গেম SDK এর অংশ। এটি OpenGL এবং Vulkan গেমগুলিকে অ্যান্ড্রয়েডে মসৃণ রেন্ডারিং এবং সঠিক ফ্রেম পেসিং অর্জনে সহায়তা করে।

ফ্রেম পেসিং হলো একটি গেমের লজিক এবং রেন্ডারিং লুপের সাথে একটি OS এর ডিসপ্লে সাবসিস্টেম এবং অন্তর্নিহিত ডিসপ্লে হার্ডওয়্যারের সিঙ্ক্রোনাইজেশন। অ্যান্ড্রয়েড ডিসপ্লে সাবসিস্টেমটি এমনভাবে ডিজাইন করা হয়েছিল যাতে কিছু ভিজ্যুয়াল আর্টিফ্যাক্ট, যেমন ছিঁড়ে যাওয়া এড়ানো যায়। ডিসপ্লে সাবসিস্টেমটি নিম্নলিখিত কাজ করে ছিঁড়ে যাওয়া এড়ায়:

  • অভ্যন্তরীণভাবে ফ্রেমের অতীত বাফার করা হচ্ছে
  • দেরিতে ফ্রেম জমা দেওয়া শনাক্ত করা হচ্ছে
  • দেরিতে ফ্রেম শনাক্ত হলে বর্তমান ফ্রেম প্রদর্শন চালিয়ে যাওয়া

একটি গেমের রেন্ডার লুপ নেটিভ ডিসপ্লে হার্ডওয়্যারের তুলনায় ভিন্ন গতিতে চলার কারণে ফ্রেম ডিসপ্লে টাইমে অসঙ্গতি দেখা দেয়। যখন একটি গেমের রেন্ডার লুপ অন্তর্নিহিত ডিসপ্লে হার্ডওয়্যারের জন্য খুব ধীর গতিতে চলে, তখন সমস্যা দেখা দেয়, যার ফলে ডিসপ্লে টাইমে অসঙ্গতি দেখা দেয়। উদাহরণস্বরূপ, যখন 30 fps এ চলমান একটি গেম এমন একটি ডিভাইসে রেন্ডার করার চেষ্টা করে যা নেটিভভাবে 60 fps সমর্থন করে, তখন গেমের রেন্ডার লুপের ফলে একটি পুনরাবৃত্তিমূলক ফ্রেম অতিরিক্ত 16 ms এর জন্য স্ক্রিনে থাকে। এই ধরণের সংযোগ বিচ্ছিন্নতা 33 ms, 16 ms এবং 49 ms এর মতো ফ্রেম টাইমে উল্লেখযোগ্য অসঙ্গতি তৈরি করে। অত্যধিক জটিল দৃশ্যগুলি এই সমস্যাটিকে আরও জটিল করে তোলে কারণ এর ফলে মিস করা ফ্রেমগুলি দেখা দেয়।

ফ্রেম পেসিং লাইব্রেরি নিম্নলিখিত কাজগুলি সম্পাদন করে:

  • ছোট খেলার ফ্রেমের কারণে তোতলানোর জন্য ক্ষতিপূরণ দেয়।
    • উপস্থাপনার টাইমস্ট্যাম্প যোগ করে যাতে ফ্রেমগুলি সময়মতো উপস্থাপন করা হয়, তাড়াতাড়ি নয়।
    • উপস্থাপনা টাইমস্ট্যাম্প এক্সটেনশন EGL_ANDROID_presentation_time এবং VK_GOOGLE_display_timing ব্যবহার করে।
  • লম্বা ফ্রেমের জন্য সিঙ্ক ফেন্স ব্যবহার করে যা তোতলানো এবং বিলম্বিত হওয়ার দিকে পরিচালিত করে।
    • অ্যাপে ইনজেক্ট করে অপেক্ষা করে। এগুলো ডিসপ্লে পাইপলাইনকে পিছনের চাপ তৈরি হতে দেওয়ার পরিবর্তে ধরে রাখতে সাহায্য করে।
    • সিঙ্ক ফেন্স ব্যবহার করে ( EGL_KHR_fence_sync এবং VkFence )।
  • যদি আপনার ডিভাইস একাধিক রিফ্রেশ রেট সমর্থন করে, তাহলে নমনীয়তা এবং মসৃণ উপস্থাপনা প্রদানের জন্য একটি রিফ্রেশ রেট বেছে নেয়।
  • ফ্রেম স্ট্যাটস ব্যবহার করে ডিবাগিং এবং প্রোফাইলিংয়ের জন্য পরিসংখ্যান প্রদান করে।

আপনার প্রয়োজন অনুসারে বিভিন্ন মোডে পরিচালনা করার জন্য লাইব্রেরি কীভাবে কনফিগার করবেন তা শিখতে, সমর্থিত অপারেটিং মোডগুলি দেখুন।

OpenGL রেন্ডারার বা Vulkan রেন্ডারার ব্যবহার করে বাস্তবায়ন করতে, দেখুন:

আরও পড়তে, ফ্রেম পেসিং লাইব্রেরি দেখুন।

ফ্রেম প্রতি সেকেন্ড থ্রটলিং হস্তক্ষেপ

ফ্রেম পার সেকেন্ড (FPS) থ্রটলিং হস্তক্ষেপ গেমগুলিকে শুধুমাত্র প্ল্যাটফর্মের পার্শ্ব পরিবর্তন ব্যবহার করে এবং ডেভেলপারদের পক্ষ থেকে কোনও পদক্ষেপ নেওয়ার প্রয়োজন ছাড়াই উপযুক্ত FPS-এ গতি বাড়াতে সক্ষম করে।

FPS থ্রটলিং হস্তক্ষেপ বাস্তবায়নে নিম্নলিখিত উপাদানগুলি ব্যবহার করা হয়।

গেম ম্যানেজার সার্ভিস

GameManagerService কম্পোনেন্টটি গেম মোড এবং গেম ইন্টারভেনশনের সমস্ত ব্যবহারকারী এবং প্রতি-গেম তথ্য বজায় রাখে। FPS তথ্য GameManagerService-এ অন্যান্য হস্তক্ষেপের তথ্যের সাথে সংরক্ষণ করা হয়, যেমন রেজোলিউশন ডাউনস্কেলিং ফ্যাক্টর, প্রতিটি ব্যবহারকারীর প্রোফাইলের জন্য একটি <PACKAGE_NAME, Interventions> ম্যাপিংয়ে। গেম মোড পরিবর্তন করা হলে বা হস্তক্ষেপ আপডেট করা হলে FPS তথ্য অ্যাক্সেস করা হয়। একটি UID প্রতিটি PACKAGE_NAME এবং ব্যবহারকারীর জন্য অনন্য, এবং এটিকে SurfaceFlinger-এ পাঠানোর জন্য একটি <UID, Frame Rate> জোড়ায় অনুবাদ করা যেতে পারে।

সারফেসফ্লিঙ্গার

সারফেসফ্লিংগার কম্পোনেন্ট ইতিমধ্যেই একটি অ্যাপ্লিকেশনের FPS থ্রোটলিং সমর্থন করে যতক্ষণ না ফ্রেম রেট ডিসপ্লে রিফ্রেশ রেটের একটি ভাজক হয়। VSync এর ক্ষেত্রে, SurfaceFlinger থ্রোটল্ড অ্যাপ্লিকেশনের জন্য VSync এর বৈধতা পরীক্ষা করে যাচাই করে যে VSync টাইমস্ট্যাম্প অ্যাপ্লিকেশনের ফ্রেম রেটের সাথে ফেজে আছে কিনা। যদি ফ্রেম রেট VSync এর সাথে ফেজে না থাকে, তাহলে সারফেসফ্লিংগার ফ্রেমটি ধরে রাখে যতক্ষণ না ফ্রেম রেট এবং VSync ফেজে থাকে।

নিম্নলিখিত চিত্রটি GameManagerService এবং SurfaceFlinger এর মধ্যে মিথস্ক্রিয়া বর্ণনা করে:

গেমম্যানেজার সার্ভিস এবং সারফেসফ্লিংগারের মধ্যে মিথস্ক্রিয়া

চিত্র ১. গেমসার্ভিসম্যানেজার এবং সারফেসফ্লিংগারের মধ্যে মিথস্ক্রিয়া।

SurfaceFinger একটি নতুন ফ্রেম রেট থ্রোটলিং অগ্রাধিকার সেট করার জন্য একটি <UID, Frame Rate> পেয়ার ম্যাপিং বজায় রাখে। ব্যবহারকারী এবং গেমের মধ্যে UID অনন্য, যাতে প্রতিটি ব্যবহারকারী একই গেমের ফ্রেম রেটের বিভিন্ন সেটিংস রাখতে পারে। একটি গেমের ফ্রেম রেট থ্রোটল করার জন্য, GameManagerService একটি UID এর ফ্রেম রেট ওভাররাইড করার জন্য SurfaceFlinger কে কল করে। এই প্রক্রিয়ার সাহায্যে, যখনই গেম মোড পরিবর্তন করা হয় বা হস্তক্ষেপ আপডেট করা হয় তখন SurfaceFlinger ম্যাপিং আপডেট করে। SurfaceFlinger সেই অনুযায়ী বাফারগুলি ল্যাচ করে FPS পরিবর্তন পরিচালনা করে।

FPS থ্রটলিং সম্পর্কে আরও জানতে, FPS থ্রটলিং দেখুন।