Android-এর জরুরি পরিসংখ্যানে, স্লো সেশন হল এমন একটি সেশন যেখানে ২৫%-এর বেশি ফ্রেম স্লো। আগের ফ্রেমের (২০ FPS-এর সমতুল্য) ৫০ মিলিসেকেন্ডের কম সময়ের মধ্যে কোনও ফ্রেম দেখানো না হলে, সেটিকে স্লো ফ্রেম বলা হয়। Android Vitals-এ ৩৪ মিলিসেকেন্ড (৩০ FPS-এর সমতুল্য) টার্গেট সহ দ্বিতীয় স্লো সেশন মেট্রিকও রিপোর্ট করা হয়। স্লো সেশন ব্যবহার করে, আপনি আপনার গেমের ফ্রেম-রেট পারফর্ম্যান্স বুঝতে পারবেন, যা ব্যবহারকারীদের কাছে আপনার গেম কতটা মসৃণ এবং ফ্লুইড মনে হয় তা প্রভাবিত করে।
কিছুদিনের মধ্যেই, Play সেইসব গেম থেকে ব্যবহারকারীদের দূরে সরিয়ে নিয়ে যেতে শুরু করবে যেগুলি তাদের ফোনে ২০ FPS-এ চলতে পারে না। মনে রাখবেন, আপনার গেম এক মিনিট ধরে চলার পরেই Android Vitals ফ্রেম রেট মনিটর করা শুরু করে।
মেট্রিক সম্পর্কে আরও জানতে আমাদের সহায়তা কেন্দ্র দেখুন।
কীভাবে FPS পরিমাপ এবং স্লো ফ্রেম শনাক্ত করতে হয়
Android dumpsys SurfaceFlinger --timestats কমান্ড, রেন্ডার করা হচ্ছে এমন সব লেয়ারের জন্য
গড় FPS এবং প্রেজেন্ট টু প্রেজেন্ট টাইমিং হিস্টোগ্রাম
প্রদান করে। একটি ফ্রেমের বর্তমান থেকে বর্তমান সময় হল বর্তমান ফ্রেম এবং
আগের ফ্রেম আঁকার মধ্যবর্তী ব্যবধান। আপনার গেমের FPS সংগ্রহ করার জন্য
কমান্ড ব্যবহার করতে এইসব ধাপ অনুসরণ করুন:
তথ্য ক্যাপচার করা শুরু করতে
enableএবংclearফ্ল্যাগ সহ কমান্ড রান করুন:adb shell dumpsys SurfaceFlinger --timestats -clear -enableগেমটি যথেষ্ট সময় ধরে খেলা হয়ে গেলে, তথ্য ডাম্প করার জন্য
dumpফ্ল্যাগ সহ কমান্ডটি আবার চালান:adb shell dumpsys SurfaceFlinger --timestats -dumpডাম্প করা তথ্য মোট ফ্রেম এবং
presentToPresentSurfaceFlinger দ্বারা রেন্ডার করা সমস্ত লেয়ারের হিস্টোগ্রাম প্রদান করে।layerName-এর ভিত্তিতে ফিল্টার করে আপনার গেমের বিভাগ খুঁজে নিতে হবে:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833প্রতিটি লেয়ারের তথ্যের উপর ভিত্তি করে আপনি সেশনের স্লো ফ্রেম রেট গণনা করতে পারবেন।
যেমন, ২০ FPS স্লো ফ্রেমের শতাংশ = (৫৪ মিলি সেকেন্ড থেকে ১০০০ মিলি সেকেন্ড পর্যন্ত মানের যোগফল) / totalFrames x ১০০
totalFrames = 274 ... presentToPresent histogram: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0ডাম্পে প্রতিটি লেয়ারের গড় FPS-ও দেখানো হয়:
... averageFPS = 30.179 ...সব তথ্য সংগ্রহ করার পরে,
disableফ্ল্যাগ ব্যবহার করে timestats বন্ধ করুন:adb shell dumpsys SurfaceFlinger --timestats -disable
ফ্রেম স্লো হওয়ার কারণ ও সমাধান
আপনার টার্গেটের চেয়ে স্ক্রিনে ফ্রেম বেশি সময় ধরে দেখানো বা রেন্ডার করার অনেক কারণ থাকতে পারে। আপনার গেম CPU- বা GPU-বাউন্ড হতে পারে, ডিভাইস অতিরিক্ত গরম হয়ে যেতে পারে এবং থ্রটলড থার্মাল স্টেট অ্যাক্টিভেট করতে পারে অথবা গেমের ফ্রেমরেট এবং ডিভাইসের ডিসপ্লে রিফ্রেশ রেটের মধ্যে অমিল থাকতে পারে।
এইসব সমস্যার সমাধান করতে এবং আপনার গেমের পারফর্ম্যান্স উন্নত করতে Android ফ্রেম পেসিং (Swappy), Vulkan এবং ADPF ব্যবহার করুন।
Swappy কী
Android ফ্রেম পেসিং লাইব্রেরি, যা Swappy নামেও পরিচিত, সেটি AGDK লাইব্রেরির অংশ। Swappy, OpenGL এবং Vulkan গেমকে Android-এ মসৃণ রেন্ডারিং এবং সঠিক ফ্রেম পেসিং অর্জন করতে সাহায্য করে।
ফ্রেম পেসিং হল গেমের লজিক এবং রেন্ডারিং লুপের সাথে OS-এর ডিসপ্লে সাবসিস্টেম এবং অন্তর্নিহিত ডিসপ্লে হার্ডওয়্যারের সিঙ্ক্রোনাইজেশন। Android ডিসপ্লে সাবসিস্টেম এমনভাবে ডিজাইন করা হয়েছে যাতে ভিজ্যুয়াল আর্টিফ্যাক্ট (টিয়ারিং নামে পরিচিত) এড়ানো যায়। আপডেট করার সময় ডিসপ্লে হার্ডওয়্যার নতুন ফ্রেম পার্টওয়েতে সুইচ করলে এটি হতে পারে। এইসব আর্টিফ্যাক্ট এড়াতে, ডিসপ্লে সাবসিস্টেম নিম্নলিখিত কাজ করে:
- ইন্টার্নালি আগের ফ্রেম বাফার করে।
- দেরিতে ফ্রেম জমা দেওয়ার ঘটনা শনাক্ত করে।
- দেরিতে ফ্রেম শনাক্ত করা হলে, পুরনো ফ্রেমের ডিসপ্লে রিপিট করে।
Mir 2 কীভাবে Swappy ব্যবহার করে তাদের স্লো সেশন রেট ৪০% থেকে কমিয়ে ১০% করেছে তা জানুন।
নেটিভ প্রোজেক্টে Swappy কীভাবে ব্যবহার করবেন
আপনার গেমে Android ফ্রেম পেসিং লাইব্রেরি ইন্টিগ্রেট করতে নিম্নলিখিত নির্দেশিকা দেখুন:
- আপনার OpenGL রেন্ডারারে Android ফ্রেম পেসিং ইন্টিগ্রেট করা
- আপনার Vulkan রেন্ডারারে Android ফ্রেম পেসিং ইন্টিগ্রেট করুন
Unity গেম ইঞ্জিনে Swappy কীভাবে ব্যবহার করবেন
Unity তাদের ইঞ্জিনে Android Frame Pacing ইন্টিগ্রেট করেছে। Unity 2019.2 বা তার পরবর্তী ভার্সনে এই ফিচার চালু করতে, Android > রেজোলিউশন ও প্রেজেন্টেশন-এর জন্য প্রোজেক্ট সেটিংস > প্লেয়ার > সেটিংস-এর অধীনে অপ্টিমাইজ করা ফ্রেম পেসিং চেকবক্সে টিকচিহ্ন দিন:
বিকল্প হিসেবে, আপনার লজিক কোডে অপ্টিমাইজ করা ফ্রেম পেসিং বিকল্প প্রোগ্রাম্যাটিকভাবে চালু করুন যাতে Unity ফ্রেম রেটে কম তারতম্যের জন্য ফ্রেমগুলি সমানভাবে বিতরণ করতে পারে, যার ফলে গেমপ্লে আরও মসৃণ হয়।
Unreal গেম ইঞ্জিনে Swappy কীভাবে ব্যবহার করবেন
Unreal 4.25 এবং তার পরবর্তী ভার্সন Android Frame Pacing Library-এর সাথে ইন্টিগ্রেট করে, যা Android Game Development Kit-এর অংশ। মোবাইল ফ্রেম পেসিং নিবন্ধে ব্যাখ্যা করা হয়েছে যে কীভাবে Android ফ্রেম পেসিং লাইব্রেরি চালু করতে হয় এবং C++ কোড থেকে কীভাবে ফ্রেম পেসিং কন্ট্রোল করতে হয়।
Vulkan কী
Vulkan হল একটি আধুনিক ক্রস-প্ল্যাটফর্ম 3D গ্রাফিক্স API যা ডিভাইসের গ্রাফিক্স হার্ডওয়্যার এবং আপনার গেমের মধ্যে অ্যাবস্ট্রাকশন কম করার জন্য ডিজাইন করা হয়েছে। Vulkan হল Android-এর প্রাথমিক লো-লেভেল গ্রাফিক্স API, যা OpenGL ES-এর পরিবর্তে ব্যবহার করা হয়। Android-এ এখনও OpenGL ES কাজ করে, তবে এর ফিচার ডেভেলপমেন্টের কাজ আর সক্রিয়ভাবে করা হচ্ছে না।
OpenGL ES-এর তুলনায় Vulkan নিম্নলিখিত সুবিধাগুলি অফার করে:
- গ্রাফিক্স ড্রাইভারের সিপিইউ ওভারহেড কম করে আরও দক্ষ আর্কিটেকচার
- সিপিইউ পারফর্ম্যান্স উন্নত করার জন্য নতুন অপ্টিমাইজেশন স্ট্র্যাটেজি
- OpenGL ES-এ নতুন গ্রাফিক্স ফিচার উপলভ্য নয়, যেমন বাইন্ডলেস API এবং রে ট্রেসিং
নেটিভ Android প্রোজেক্টে Vulkan কীভাবে ব্যবহার করবেন
Android-এ Vulkan-এর মাধ্যমে শুরু করা কোডল্যাব আপনাকে Vulkan রেন্ডারিং পাইপলাইন সেট-আপ করার মাধ্যমে এবং তারপর স্ক্রিনে টেক্সচার্ড, ঘূর্ণায়মান ত্রিভুজ রেন্ডার করার মাধ্যমে গাইড করে। আপনার গেম গ্রাফিক্স কীভাবে রেন্ডার করবেন তা জানতে কোডল্যাব ব্যবহার করুন।
Unity গেম ইঞ্জিনে Vulkan কীভাবে ব্যবহার করবেন
Unity-তে অটোমেটিক ডিভাইস বেছে নেওয়ার সুবিধা চালু করতে, অটো গ্রাফিক্স API কনফিগার করার ধাপগুলি অনুসরণ করুন।
বিকল্প হিসেবে, আপনি অটো গ্রাফিক্স API বন্ধ করে ম্যানুয়ালি Vulkan চালু করতে পারেন, এবং গ্রাফিক্স API তালিকায় Vulkan-কে সবচেয়ে বেশি অগ্রাধিকার দিতে পারেন। আপনি যদি Unity 2021.1 বা এর আগের কোনও ভার্সন ব্যবহার করেন, তাহলে Vulkan ব্যবহার করার এটিই একমাত্র উপায়।
নির্দিষ্ট ডিভাইসে আপনার গেমের জন্য গ্রাফিক্স API-এর লঞ্চ-টাইম সাজেশন প্রদান করতে VkQuality Unity ইঞ্জিন প্লাগ-ইন ব্যবহার করুন।
Unreal গেম ইঞ্জিনে Vulkan কীভাবে ব্যবহার করতে হয়
Vulkan গ্রাফিক্স API চালু করতে, প্রোজেক্ট সেটিংস > প্ল্যাটফর্ম > Android > বিল্ড বিকল্পে গিয়ে Vulkan-এর জন্য সহায়তা বিকল্প বেছে নিন। আপনি Vulkan-এ কাজ করে এবং OpenGL ES3.2-এ কাজ করে, দুটি বিকল্পই বেছে নিলে, Unreal ডিফল্ট হিসেবে Vulkan ব্যবহার করে। ডিভাইসে Vulkan কাজ না করলে, Unreal, OpenGL ES 3.2-এ ফিরে যায়।
আপনি যদি নির্দিষ্ট কিছু Vulkan ফিচার ব্যবহার করেন যেগুলি কিছু ডিভাইসে
খারাপভাবে কাজ করে বলে জানা যায়, তাহলে আপনি সেই ডিভাইসগুলিকে বাদ দিতে
আপনার BaseDeviceProfile.ini ফাইল কাস্টমাইজ করতে পারেন। BaseDeviceProfile.ini কীভাবে কাস্টমাইজ করতে হয় তা জানতে,
Android-এর জন্য ডিভাইস প্রোফাইল ও স্কেলেবিলিটি
কাস্টমাইজ করা দেখুন। নতুন ডিভাইস ড্রাইভার আগে থেকে জানা খারাপ ডিভাইস ঠিক করতে পারে, তাই সব অপ্টিমাইজেশন পেতে আপনার
BaseDeviceProfile.ini ফাইল আপডেট রাখুন।
ADPF কী
Android ডায়নামিক পারফর্ম্যান্স ফ্রেমওয়ার্ক (ADPF), Android-এ ডায়নামিক থার্মাল, CPU ও GPU ম্যানেজমেন্ট ফিচারের উপর ভিত্তি করে গেম অপ্টিমাইজ করে। গেমের উপর ফোকাস করা হলেও, আপনি অন্যান্য পারফর্ম্যান্স-ইনটেনসিভ অ্যাপের জন্যও ফিচারগুলি ব্যবহার করতে পারেন।
ADPF হল API-এর একটি সেট যা গেম এবং পারফর্ম্যান্স-ইনটেনসিভ অ্যাপকে Android ডিভাইসের পাওয়ার এবং থার্মাল সিস্টেমের সাথে আরও সরাসরি ইন্টার্যাক্ট করতে দেয়। এইসব API-এর সাহায্যে, আপনি Android সিস্টেমে ডায়নামিক আচরণ মনিটর করতে এবং গেমের পারফর্ম্যান্স এমন একটি টেকসই লেভেলে অপ্টিমাইজ করতে পারবেন যাতে ডিভাইস ওভারহিট না হয়।
ADPF-এর প্রধান ফিচারগুলি এখানে দেওয়া হল:
- থার্মাল API: ডিভাইসের থার্মাল স্টেট মনিটর করে যাতে অ্যাপ্লিকেশনটি কাজের চাপ অসহনীয় হওয়ার আগেই সক্রিয়ভাবে তা অ্যাডজাস্ট করতে পারে।
- CPU পারফর্ম্যান্স হিন্ট API: পারফর্ম্যান্স সংক্রান্ত হিন্ট প্রদান করে যা Android-কে ওয়ার্কলোডের জন্য সঠিক পারফর্ম্যান্স সেটিংস (যেমন, CPU অপারেটিং পয়েন্ট বা কোর) বেছে নিতে দেয়।
- গেম মোড API এবং গেম স্টেট API: ব্যবহারকারীর সেটিংস এবং গেমের নির্দিষ্ট কনফিগারেশনের উপর ভিত্তি করে, পারফর্ম্যান্স বা ব্যাটারির আয়ুর বৈশিষ্ট্যগুলিকে অগ্রাধিকার দিয়ে গেম প্লে অপ্টিমাইজেশন চালু করুন।
- ফিক্সড পারফর্ম্যান্স মোড: বেঞ্চমার্কিংয়ের সময় ডিভাইসে ফিক্সড পারফর্ম্যান্স মোড চালু করুন যাতে ডায়নামিক CPU ক্লকিংয়ের কারণে পরিবর্তিত হয়নি এমন পরিমাপ পাওয়া যায়।
- পাওয়ার এফিশিয়েন্সি মোড: সেশনকে নির্দেশ করে যে পারফর্ম্যান্স হিন্ট সেশনের থ্রেডগুলি পারফর্ম্যান্সের চেয়ে পাওয়ার এফিশিয়েন্সি পছন্দ করার জন্য নিরাপদে শিডিউল করা যেতে পারে। Android 15 (API লেভেল ৩৫)-এ উপলভ্য।
নেটিভ Android প্রোজেক্টে কীভাবে ADPF ব্যবহার করবেন
আপনার নেটিভ গেমে অ্যাডাপ্টিবিলিটি ফিচার ইন্টিগ্রেট করা কোডল্যাব আপনাকে নিজের গতিতে অনুসরণ করতে পারেন এমন ধাপগুলির মাধ্যমে আপনার গেমে ADPF ফিচার ইন্টিগ্রেট করতে গাইড করে। কোডল্যাবের শেষে, আপনি নিম্নলিখিত ফিচার ইন্টিগ্রেট করতে পারবেন:
- থার্মাল API: ডিভাইসের থার্মাল কন্ডিশন শুনুন এবং ডিভাইস থার্মাল থ্রটলিং স্টেটে যাওয়ার আগে প্রতিক্রিয়া জানান।
- গেম মোড API: প্লেয়ারের অপ্টিমাইজেশন সংক্রান্ত পছন্দ (পারফর্ম্যান্স বাড়ানো বা ব্যাটারি বাঁচানো) বুঝে সেই অনুযায়ী অ্যাডজাস্ট করুন।
- গেম স্টেট API: সিস্টেমকে আপনার গেমের অবস্থা জানান (লোড হচ্ছে, খেলা হচ্ছে, UI ইত্যাদি) এবং সিস্টেম সেই অনুযায়ী রিসোর্স অ্যাডজাস্ট করতে পারে (I/O বা CPU, GPU ইত্যাদি বুস্ট করা)।
- পারফর্ম্যান্স হিন্ট API: সিস্টেমকে আপনার থ্রেডিং মডেল এবং ওয়ার্কলোড সম্পর্কে জানান যাতে সিস্টেম সেই অনুযায়ী রিসোর্স বরাদ্দ করতে পারে।
Unity গেম ইঞ্জিনে কীভাবে ADPF ব্যবহার করবেন
Unity-র Adaptive Performance হল এমন একটি টুল যা গেম ডেভেলপারদের মোবাইল ডিভাইসে, বিশেষ করে বিভিন্ন Android ইকোসিস্টেমের জন্য, তাদের গেম অপ্টিমাইজ করতে সাহায্য করে। অ্যাডাপ্টিভ পারফর্ম্যান্স আপনার গেমকে রিয়েল-টাইমে ডিভাইসের পারফর্ম্যান্স এবং থার্মাল বৈশিষ্ট্যের সাথে মানিয়ে নিতে সাহায্য করে, যার ফলে আপনি মসৃণ এবং দক্ষ গেমিং অভিজ্ঞতা পান।
অ্যাডাপ্টিভ পারফর্ম্যান্স Android প্রোভাইডার Unity-তে ADPF প্রয়োগ করার জন্য আপনাকে ধাপে ধাপে নির্দেশিকা প্রদান করে। এছাড়াও, ADPF Unity অ্যাডাপ্টিভ পারফর্ম্যান্স এবং Android প্রোভাইডার দেখুন।
Unreal গেম ইঞ্জিনে কীভাবে ADPF ব্যবহার করবেন
- প্লাগ-ইন ডাউনলোড করুন।
- প্রোজেক্ট প্লাগ-ইন ফোল্ডারে প্লাগ-ইন কপি করুন।
- Unreal এডিটরে ADPF Unreal Engine প্লাগ-ইন চালু করুন।
- Unreal এডিটর আবার চালু করুন।
- গেমটি তৈরি করুন ও রান্না করুন।
Unreal Engine-এর জন্য Android ডায়নামিক পারফর্ম্যান্স ফ্রেমওয়ার্ক (ADPF) প্লাগ-ইন স্থিতিশীল পারফর্ম্যান্স প্রদান করে এবং থার্মাল থ্রটলিং প্রতিরোধ করে। GitHub থেকে প্লাগ-ইন ডাউনলোড করুন। এই প্লাগ-ইন Unreal কনসোল ভ্যালু সেট করার মাধ্যমে ফিচার পরিবর্তন করে। আরও জানতে, ADPF Unreal Engine প্লাগ-ইন দেখুন।