অ্যান্ড্রয়েড ফ্রেম পেসিং লাইব্রেরি, যা সোয়াপি নামেও পরিচিত, এটি অ্যান্ড্রয়েড গেম SDK- এর অংশ৷ এটি ওপেনজিএল এবং ভলকান গেমগুলিকে অ্যান্ড্রয়েডে মসৃণ রেন্ডারিং এবং সঠিক ফ্রেম পেসিং অর্জনে সহায়তা করে।
ফ্রেম পেসিং হল একটি 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 রেন্ডারার ব্যবহার করে বাস্তবায়ন করতে, দেখুন
- আপনার OpenGL রেন্ডারারে অ্যান্ড্রয়েড ফ্রেম পেসিং একীভূত করুন
- আপনার ভলকান রেন্ডারারে অ্যান্ড্রয়েড ফ্রেম পেসিং সংহত করুন
আরও পড়তে, সঠিক ফ্রেম পেসিং অর্জন দেখুন।
ফ্রেম প্রতি সেকেন্ড থ্রোটলিং হস্তক্ষেপ
ফ্রেম পার সেকেন্ড (FPS) থ্রোটলিং হস্তক্ষেপ গেমগুলিকে শুধুমাত্র প্ল্যাটফর্ম সাইড পরিবর্তন ব্যবহার করে এবং ডেভেলপারদের পক্ষ থেকে কোনো পদক্ষেপের প্রয়োজন ছাড়াই উপযুক্ত FPS-এ গতি দিতে সক্ষম করে।
FPS থ্রটলিং হস্তক্ষেপের বাস্তবায়ন নিম্নলিখিত উপাদানগুলি ব্যবহার করে:
গেম ম্যানেজার সার্ভিস
GameManagerService উপাদানটি গেম মোড এবং গেম হস্তক্ষেপের সমস্ত প্রতি-ব্যবহারকারী এবং প্রতি-গেম তথ্য বজায় রাখে। প্রতিটি ব্যবহারকারীর প্রোফাইলের জন্য একটি <PACKAGE_NAME, Interventions>
ম্যাপিং-এ FPS তথ্য অন্যান্য হস্তক্ষেপ তথ্য, যেমন রেজোলিউশন ডাউনস্কেলিং ফ্যাক্টর সহ GameManagerService-এ সংরক্ষণ করা হয়। যখন গেমের মোড পরিবর্তন করা হয় বা হস্তক্ষেপ আপডেট করা হয় তখন FPS তথ্য অ্যাক্সেস করা হয়। একটি UID
প্রতিটি PACKAGE_NAME
এবং ব্যবহারকারীর জন্য অনন্য, এবং সারফেসফ্লিংগারে পাঠানোর জন্য আরও একটি <UID, Frame Rate>
জোড়ায় অনুবাদ করা যেতে পারে।
সারফেসফ্লিংগার
সারফেসফ্লিংগার কম্পোনেন্ট ইতিমধ্যেই একটি অ্যাপ্লিকেশনের FPS থ্রোটলিং সমর্থন করে যতক্ষণ না ফ্রেম রেট ডিসপ্লে রিফ্রেশ হারের একটি বিভাজক হয়। একটি vsync হওয়ার ক্ষেত্রে, সারফেসফ্লিংগার থ্রোটল করা অ্যাপ্লিকেশনটির জন্য vsync-এর বৈধতা যাচাই করে যাচাই করে যে vsync টাইমস্ট্যাম্পটি অ্যাপ্লিকেশনের ফ্রেম হারের সাথে পর্যায়ে আছে কিনা। যদি ফ্রেম রেট vsync এর সাথে ফেজে না হয়, তাহলে সারফেসফ্লিংগার ফ্রেমটিকে ধরে রাখে যতক্ষণ না ফ্রেম রেট এবং vsync ফেজ এ থাকে।
নিম্নলিখিত চিত্রটি গেম ম্যানেজার সার্ভিস এবং সারফেসফ্লিংগারের মধ্যে মিথস্ক্রিয়া বর্ণনা করে:
![GameManagerService এবং SurfaceFlinger এর মধ্যে মিথস্ক্রিয়া](https://source.android.com/static/docs/core/graphics/images/fps-throttling-flow.png?authuser=0&hl=bn)
চিত্র 1. গেমসার্ভিস ম্যানেজার এবং সারফেসফ্লিংগারের মধ্যে মিথস্ক্রিয়া
SurfaceFinger একটি নতুন ফ্রেম রেট থ্রোটলিং অগ্রাধিকার সেট করতে একটি <UID, Frame Rate>
জোড়া ম্যাপিং বজায় রাখে। UID
ব্যবহারকারী এবং গেমগুলির মধ্যে অনন্য, যাতে একটি একক ডিভাইসে প্রতিটি ব্যবহারকারী একই গেমের ফ্রেম হারের বিভিন্ন সেটিংস থাকতে পারে। একটি গেমের ফ্রেম রেট থ্রোটল করতে, গেমসার্ভিস ম্যানেজার সারফেসফ্লিংগারকে একটি UID-এর জন্য ফ্রেম রেট ওভাররাইড করতে কল করে। এই পদ্ধতির সাহায্যে, যখনই গেমের মোড পরিবর্তন করা হয় বা হস্তক্ষেপ আপডেট করা হয় তখনই সারফেসফ্লিংগার ম্যাপিং আপডেট করে। সারফেসফ্লিঙ্গার সেই অনুযায়ী বাফার ল্যাচ করে FPS পরিবর্তন পরিচালনা করে।
FPS থ্রটলিং সম্পর্কে আরও বুঝতে, FPS থ্রটলিং ভূমিকা দেখুন।