ধীর সেশন (শুধুমাত্র গেম)

একটি স্লো সেশন হলো এমন একটি সেশন যেখানে ২৫%-এর বেশি ফ্রেম ধীরগতির হয়। একটি ফ্রেমকে ধীরগতির বলা হয় যদি সেটি পূর্ববর্তী ফ্রেমের ৫০ মিলিসেকেন্ডের (যা ২০ FPS-এর সমতুল্য) কম সময়ের মধ্যে প্রদর্শিত না হয়। অ্যান্ড্রয়েড ভাইটালস ৩৪ মিলিসেকেন্ডের (যা ৩০ FPS-এর সমতুল্য) লক্ষ্যমাত্রা সহ দ্বিতীয় একটি স্লো সেশনস মেট্রিকও রিপোর্ট করে। স্লো সেশনস ব্যবহার করে আপনি আপনার গেমের ফ্রেম-রেট পারফরম্যান্স বুঝতে পারবেন, যা ব্যবহারকারীদের কাছে আপনার গেমটি কতটা মসৃণ ও সাবলীল মনে হবে তার উপর প্রভাব ফেলে।

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

মেট্রিকটি সম্পর্কে আরও বিস্তারিত জানতে আমাদের সহায়তা কেন্দ্র দেখুন।

পাই চার্টের মতো গ্রাফিক্স যা ধীরগতির ফ্রেম এবং দ্রুতগতির ফ্রেমের সংখ্যা দেখায়।
চিত্র ১. অ্যান্ড্রয়েড ভাইটালস-এ একটি ধীরগতির সেশন।

কীভাবে FPS পরিমাপ করবেন এবং ধীর ফ্রেম শনাক্ত করবেন

অ্যান্ড্রয়েডের dumpsys surfaceflinger timestats কমান্ডটি রেন্ডার করা হচ্ছে এমন সমস্ত লেয়ারের জন্য গড় FPS এবং বর্তমান থেকে বর্তমান সময়ের হিস্টোগ্রাম প্রদান করে। একটি ফ্রেমের বর্তমান থেকে বর্তমান সময় হলো বর্তমান ফ্রেম এবং তার আগের আঁকা ফ্রেমের মধ্যবর্তী ব্যবধান। আপনার গেমের FPS সংগ্রহ করতে কমান্ডটি ব্যবহারের ধাপে ধাপে পদ্ধতি নিচে দেওয়া হলো:

  1. তথ্য সংগ্রহ শুরু করতে enable এবং clear ফ্ল্যাগ সহ কমান্ডটি চালান:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. গেমটি যথেষ্ট সময় ধরে খেলার পর, তথ্য ডাম্প করার জন্য ` dump ফ্ল্যাগ সহ কমান্ডটি আবার চালান:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    ডাম্প করা তথ্যটি SurfaceFlinger দ্বারা রেন্ডার করা সমস্ত লেয়ারের মোট ফ্রেম এবং presentToPresent হিস্টোগ্রাম প্রদান করে। আপনাকে layerName এর উপর ভিত্তি করে ফিল্টার করে আপনার গেমের সেই অংশটি খুঁজে বের করতে হবে

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    প্রতিটি লেয়ারের তথ্যের উপর ভিত্তি করে সেশনের ধীর ফ্রেম রেট গণনা করা যেতে পারে।

    উদাহরণস্বরূপ, 20 FPS ধীর ফ্রেমের শতাংশ = (54 ms থেকে 1000 ms পর্যন্ত মানগুলির যোগফল) / মোট ফ্রেম x 100

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    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
    

    ডাম্পটিতে প্রতিটি লেয়ারের গড় এফপিএস-ও দেখানো হয়েছে:

    ...
    averageFPS = 30.179
    ...
    
  3. সমস্ত তথ্য সংগ্রহ করার পর, disable ফ্ল্যাগ ব্যবহার করে টাইমস্ট্যাটস নিষ্ক্রিয় করে দিন।

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

ধীর গতির ফ্রেমের কারণ ও সমাধান

ডেভেলপারের নির্ধারিত সময়ের চেয়ে একটি ফ্রেম স্ক্রিনে বেশি সময় ধরে প্রদর্শিত বা রেন্ডার হওয়ার অনেক কারণ থাকতে পারে। গেমটি সিপিইউ/জিপিইউ-এর উপর নির্ভরশীল হতে পারে। অথবা ডিভাইসটি অতিরিক্ত গরম হয়ে একটি থ্রটলড থার্মাল স্টেট সক্রিয় করতে পারে । কিংবা গেমের ফ্রেমরেট এবং ডিভাইসের ডিসপ্লে রিফ্রেশ রেটের মধ্যে কোনো অমিল থাকতে পারে।

এই সমস্যাগুলো সমাধান করতে এবং আপনার গেমের পারফরম্যান্স উন্নত করতে অ্যান্ড্রয়েড ফ্রেম পেসিং (সোয়াপি) , ভলকান এবং এডিপিএফ ব্যবহার করুন।

সোয়াপি কী?

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

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

  • অভ্যন্তরীণভাবে অতীতের ফ্রেমগুলিকে বাফার করে
  • দেরিতে জমা দেওয়া ফ্রেম সনাক্ত করে
  • পরবর্তী ফ্রেম শনাক্ত হলে পূর্ববর্তী ফ্রেমগুলোর প্রদর্শন পুনরাবৃত্তি করে।

জানুন কিভাবে মীর ২ সোয়াপি ব্যবহার করে তাদের স্লো সেশন রেট ৪০% থেকে ১০%-এ নামিয়ে এনেছেন

নেটিভ প্রজেক্টে কীভাবে Swappy ব্যবহার করবেন

আপনার গেমে অ্যান্ড্রয়েড ফ্রেম পেসিং লাইব্রেরিটি সংহত করতে নিম্নলিখিত নির্দেশিকাগুলো দেখুন:

ইউনিটি গেম ইঞ্জিনে সোয়াপি কীভাবে ব্যবহার করবেন

ইউনিটি তাদের ইঞ্জিনে অ্যান্ড্রয়েড ফ্রেম পেসিং অন্তর্ভুক্ত করেছে। ইউনিটি ২০১৯.২ বা তার উচ্চতর সংস্করণে এই বৈশিষ্ট্যটি সক্রিয় করতে, প্রজেক্ট সেটিংস > প্লেয়ার > অ্যান্ড্রয়েডের জন্য সেটিংস > রেজোলিউশন এবং প্রেজেন্টেশন -এর অধীনে অপটিমাইজড ফ্রেম পেসিং চেকবক্সটি চেক করুন।

প্রকল্প সেটিংস ডায়ালগ।
চিত্র ২. ইউনিটি ইঞ্জিনে ফ্রেম পেসিং সক্রিয় করুন।

বিকল্পভাবে, আপনার লজিক কোডে প্রোগ্রাম্যাটিকভাবে অপটিমাইজড ফ্রেম পেসিং অপশনটি চালু করুন, যাতে ইউনিটি ফ্রেমগুলোকে সমানভাবে বন্টন করে ফ্রেম রেটের তারতম্য কমিয়ে আনে এবং আরও মসৃণ গেমপ্লে তৈরি করে।

আনরিয়েল গেম ইঞ্জিনে কীভাবে সোয়াপি ব্যবহার করবেন

আনরিয়েল ৪.২৫ এবং এর পরবর্তী সংস্করণগুলোতে অ্যান্ড্রয়েড ফ্রেম পেসিং লাইব্রেরি সমন্বিত রয়েছে, যা অ্যান্ড্রয়েড গেম ডেভেলপমেন্ট কিট- এর একটি অংশ। মোবাইল ফ্রেম পেসিং আর্টিকেলটিতে ব্যাখ্যা করা হয়েছে কীভাবে অ্যান্ড্রয়েড ফ্রেম পেসিং লাইব্রেরি সক্রিয় করতে হয় এবং কীভাবে C++ কোড থেকে ফ্রেম পেসিং নিয়ন্ত্রণ করা যায়।

ভলকান কী?

ভুলকান হলো একটি আধুনিক ক্রস-প্ল্যাটফর্ম ৩ডি গ্রাফিক্স এপিআই, যা ডিভাইসের গ্রাফিক্স হার্ডওয়্যার এবং আপনার গেমের মধ্যেকার বিমূর্ততা কমানোর জন্য ডিজাইন করা হয়েছে। ভুলকান অ্যান্ড্রয়েডের প্রধান লো-লেভেল গ্রাফিক্স এপিআই, যা ওপেনজিএল ইএস (OpenGL ES) -কে প্রতিস্থাপন করেছে। ওপেনজিএল ইএস এখনও অ্যান্ড্রয়েডে সমর্থিত, কিন্তু এর জন্য আর সক্রিয়ভাবে ফিচার ডেভেলপমেন্ট করা হচ্ছে না।

OpenGL ES-এর তুলনায় Vulkan নিম্নলিখিত সুবিধাগুলো প্রদান করে:

  • গ্রাফিক্স ড্রাইভারে কম সিপিইউ ওভারহেড সহ একটি আরও কার্যকর আর্কিটেকচার।
  • সিপিইউ কর্মক্ষমতা উন্নত করার জন্য নতুন অপ্টিমাইজেশন কৌশল
  • OpenGL ES-এ উপলব্ধ নয় এমন নতুন গ্রাফিক্স বৈশিষ্ট্য, যেমন বাইন্ডলেস এপিআই এবং রে ট্রেসিং।

নেটিভ অ্যান্ড্রয়েড প্রজেক্টে কীভাবে ভলকান ব্যবহার করবেন

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

ইউনিটি গেম ইঞ্জিনে কীভাবে ভলকান ব্যবহার করবেন

ইউনিটিতে স্বয়ংক্রিয় ডিভাইস নির্বাচন চালু করতে, অটো গ্রাফিক্স এপিআই (Auto Graphics API) কনফিগার করার ধাপগুলো অনুসরণ করুন।

প্রকল্প সেটিংস ডায়ালগ।
চিত্র ৩. ইউনিটি অটো গ্রাফিক্স এপিআই সক্রিয় করুন।

বিকল্পভাবে, আপনি অটো গ্রাফিক্স এপিআই (Auto Graphics API) নিষ্ক্রিয় করে এবং গ্রাফিক্স এপিআই (Graphics APIs) তালিকায় ভলকানকে সর্বোচ্চ অগ্রাধিকার দিয়ে ম্যানুয়ালি ভলকান সক্রিয় করতে পারেন। আপনি যদি ইউনিটি ২০২১.১ (Unity 2021.1) বা এর পূর্ববর্তী কোনো সংস্করণ ব্যবহার করেন, তবে ভলকান ব্যবহার করার এটিই একমাত্র উপায়।

প্রকল্প সেটিংস ডায়ালগ।
চিত্র ৪। ইউনিটিতে প্রধান গ্রাফিক্স এপিআই হিসেবে ম্যানুয়ালি ভলকান (Vulkan) নির্বাচন করুন।

আপনার গেমের জন্য নির্দিষ্ট ডিভাইসে ব্যবহারের উপযোগী গ্রাফিক্স এপিআই চালু করার সময়ে সুপারিশ প্রদান করতে VkQuality ইউনিটি ইঞ্জিন প্লাগইনটি ব্যবহার করুন।

আনরিয়েল গেম ইঞ্জিনে কীভাবে ভলকান ব্যবহার করবেন

Vulkan গ্রাফিক্স এপিআই সক্রিয় করতে, প্রজেক্ট সেটিংস > প্ল্যাটফর্ম > অ্যান্ড্রয়েড > বিল্ড- এ যান এবং সাপোর্ট Vulkan নির্বাচন করুন। আপনি যখন সাপোর্ট Vulkan এবং সাপোর্ট OpenGL ES3.2 উভয়ই নির্বাচন করেন, তখন Unreal ডিফল্টরূপে Vulkan ব্যবহার করে। যদি ডিভাইসটি Vulkan সমর্থন না করে, তবে Unreal OpenGL ES 3.2 ব্যবহার করে।

প্রকল্প সেটিংস ডায়ালগ।
চিত্র ৫. আনরিয়েল ইঞ্জিনে ভলকান সক্রিয় করুন।

আপনি যদি ভলকানের এমন কিছু নির্দিষ্ট ফিচার ব্যবহার করেন যা কিছু ডিভাইসে সমস্যা তৈরি করে বলে জানা যায়, তাহলে আপনি সেই ডিভাইসগুলোকে বাদ দেওয়ার জন্য আপনার BaseDeviceProfile.ini ফাইলটি কাস্টমাইজ করতে পারেন। BaseDeviceProfile.ini কীভাবে কাস্টমাইজ করতে হয় তা জানতে Android-এর জন্য ডিভাইস প্রোফাইল এবং স্কেলেবিলিটি কাস্টমাইজ করা দেখুন। যেহেতু নতুন ডিভাইস ড্রাইভারগুলো আগে থেকে সমস্যাযুক্ত বলে পরিচিত ডিভাইসগুলোর সমাধান করতে পারে, তাই সমস্ত অপটিমাইজেশন পেতে আপনার BaseDeviceProfile.ini ফাইলটি আপডেট রাখুন।

ADPF কী?

অ্যান্ড্রয়েড ডাইনামিক পারফরম্যান্স ফ্রেমওয়ার্ক (ADPF) অ্যান্ড্রয়েডের ডাইনামিক থার্মাল, সিপিইউ এবং জিপিইউ ম্যানেজমেন্ট ফিচারের উপর ভিত্তি করে গেম অপ্টিমাইজ করে। এর মূল লক্ষ্য গেম হলেও, আপনি অন্যান্য পারফরম্যান্স-নির্ভর অ্যাপের জন্যও এই ফিচারগুলো ব্যবহার করতে পারেন।

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

ADPF-এর প্রধান বৈশিষ্ট্যগুলো হলো:

  • থার্মাল এপিআই : কোনো ডিভাইসের তাপীয় অবস্থা পর্যবেক্ষণ করে, যাতে অ্যাপ্লিকেশনটি অসহনীয় হয়ে ওঠার আগেই সক্রিয়ভাবে কাজের চাপ সামঞ্জস্য করতে পারে।
  • সিপিইউ পারফরম্যান্স হিন্ট এপিআই : পারফরম্যান্স সংক্রান্ত ইঙ্গিত প্রদান করে, যা অ্যান্ড্রয়েডকে ওয়ার্কলোডের জন্য সঠিক পারফরম্যান্স সেটিংস (যেমন, সিপিইউ অপারেটিং পয়েন্ট বা কোর) বেছে নিতে সাহায্য করে।
  • গেম মোড এপিআই এবং গেম স্টেট এপিআই : ব্যবহারকারীর সেটিংস এবং গেম-নির্দিষ্ট কনফিগারেশনের উপর ভিত্তি করে পারফরম্যান্স বা ব্যাটারি লাইফের বৈশিষ্ট্যকে অগ্রাধিকার দিয়ে গেম খেলার অপ্টিমাইজেশন সক্ষম করে।
  • স্থির পারফরম্যান্স মোড : বেঞ্চমার্কিং চলাকালীন ডিভাইসে স্থির-পারফরম্যান্স মোড চালু করুন, যাতে এমন পরিমাপ পাওয়া যায় যা ডাইনামিক সিপিইউ ক্লকিং দ্বারা পরিবর্তিত হয় না।
  • পাওয়ার এফিশিয়েন্সি মোড : সেশনকে জানায় যে পারফরম্যান্স হিন্ট সেশনের থ্রেডগুলিকে পারফরম্যান্সের চেয়ে শক্তি সাশ্রয়কে অগ্রাধিকার দিয়ে নিরাপদে শিডিউল করা যেতে পারে। অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫)-এ উপলব্ধ।

নেটিভ অ্যান্ড্রয়েড প্রজেক্টে ADPF কীভাবে ব্যবহার করবেন

"আপনার নেটিভ গেমে অ্যাডাপ্টেবিলিটি ফিচার ইন্টিগ্রেট করা" কোডল্যাবটি আপনাকে আপনার নিজের গতিতে অনুসরণ করার মতো কয়েকটি ধাপের মাধ্যমে আপনার গেমে ADPF ফিচারগুলো ইন্টিগ্রেট করতে নির্দেশনা দেয়। কোডল্যাবটির শেষে, আপনি নিম্নলিখিত ফিচারগুলো ইন্টিগ্রেট করতে সক্ষম হবেন:

  • থার্মাল এপিআই : ডিভাইসের তাপীয় অবস্থা পর্যবেক্ষণ করে এবং ডিভাইসটি থার্মাল থ্রটলিং অবস্থায় যাওয়ার আগেই ব্যবস্থা গ্রহণ করে।
  • গেম মোড এপিআই : প্লেয়ারের অপটিমাইজেশন পছন্দ (সর্বোচ্চ পারফরম্যান্স বা ব্যাটারি সাশ্রয়) বুঝুন এবং সেই অনুযায়ী সমন্বয় করুন।
  • গেম স্টেট এপিআই : আপনার গেমের অবস্থা (লোডিং, প্লেয়িং, ইউআই, ইত্যাদি) সিস্টেমকে জানান, এবং সিস্টেম সেই অনুযায়ী রিসোর্স (বুস্ট আই/ও, বা সিপিইউ, জিপিইউ, ইত্যাদি) সমন্বয় করতে পারে।
  • পারফরম্যান্স হিন্ট এপিআই : আপনার থ্রেডিং মডেল এবং ওয়ার্কলোড সম্পর্কে সিস্টেমকে জানান, যাতে সিস্টেম সেই অনুযায়ী রিসোর্স বরাদ্দ করতে পারে।

ইউনিটি গেম ইঞ্জিনে ADPF কীভাবে ব্যবহার করবেন

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

অ্যাডাপ্টিভ পারফরম্যান্স অ্যান্ড্রয়েড প্রোভাইডার আপনাকে ইউনিটিতে ADPF প্রয়োগ করার ধাপগুলো সম্পর্কে নির্দেশনা দেয়।

প্রকল্প সেটিংস ডায়ালগ।
চিত্র ৬. ইউনিটি ইঞ্জিনে ADPF সংহত করুন।

আনরিয়েল গেম ইঞ্জিনে ADPF কীভাবে ব্যবহার করবেন

প্রকল্প সেটিংস ডায়ালগ।
চিত্র ৭. আনরিয়েল ইঞ্জিনে ADPF সংহত করুন।
  1. প্লাগইনটি ডাউনলোড করুন
  2. প্লাগইনটি প্রজেক্টের প্লাগইন ফোল্ডারে কপি করুন।
  3. আনরিয়েল এডিটরে ADPF আনরিয়েল ইঞ্জিন প্লাগইনটি সক্রিয় করুন।
  4. আনরিয়েল এডিটর পুনরায় চালু করুন
  5. গেমটি তৈরি করুন এবং রান্না করুন

আনরিয়েল ইঞ্জিনের জন্য অ্যান্ড্রয়েড ডাইনামিক পারফরম্যান্স ফ্রেমওয়ার্ক (ADPF) প্লাগইনটি স্থিতিশীল পারফরম্যান্স প্রদান করে এবং থার্মাল থ্রটলিং প্রতিরোধ করে। গিটহাব থেকে প্লাগইনটি ডাউনলোড করুন । এই প্লাগইনটি আনরিয়েল কনসোলের মান সেট করার মাধ্যমে বিভিন্ন ফিচার পরিবর্তন করে।