ধীর সেশন

স্লো সেশন হল Google Play কনসোলে একটি নতুন Android ভাইটাল মেট্রিক। একটি ধীর সেশন হল একটি সেশন যেখানে 25% এর বেশি ফ্রেম ধীর হয়। একটি ফ্রেম ধীর হয় যদি এটি পূর্ববর্তী ফ্রেমের (20 FPS এর সমতুল্য) পরে 50ms এর কম উপস্থাপন না করা হয়। অ্যান্ড্রয়েড ভাইটাল 34ms (30FPS এর সমতুল্য) লক্ষ্য সহ একটি দ্বিতীয় স্লো সেশন মেট্রিকও রিপোর্ট করে। স্লো সেশন ব্যবহার করে, আপনি আপনার গেমের ফ্রেম-রেট পারফরম্যান্স বুঝতে পারেন, যা ব্যবহারকারীদের কাছে আপনার গেমটি কতটা মসৃণ এবং তরল অনুভব করে তা প্রভাবিত করে।

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

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

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

কিভাবে 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
    

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

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

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

ধীর ফ্রেমের কারণ এবং সমাধান

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

এই সমস্যাগুলি সমাধান করতে এবং আপনার গেমের কর্মক্ষমতা উন্নত করতে Android Frame Pacing (Swappy) , Vulkan , এবং ADPF ব্যবহার করুন৷

স্বাপি কি

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

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

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

নেটিভ প্রজেক্টে কীভাবে সোয়াপি ব্যবহার করবেন

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

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

ইউনিটি তাদের ইঞ্জিনে অ্যান্ড্রয়েড ফ্রেম পেসিংকে একীভূত করেছে। ইউনিটি 2019.2 বা উচ্চতর এই বৈশিষ্ট্যটি সক্ষম করতে, প্রজেক্ট সেটিংস > প্লেয়ার > Android এর জন্য সেটিংস > রেজোলিউশন এবং উপস্থাপনার অধীনে অপ্টিমাইজড ফ্রেম পেসিং চেকবক্সটি চেক করুন:

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

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

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

অবাস্তব 4.25 এবং উচ্চতর অ্যান্ড্রয়েড ফ্রেম পেসিং লাইব্রেরি একীভূত করে, যা অ্যান্ড্রয়েড গেম ডেভেলপমেন্ট কিটের অংশ। মোবাইল ফ্রেম পেসিং নিবন্ধটি ব্যাখ্যা করে যে কীভাবে অ্যান্ড্রয়েড ফ্রেম পেসিং লাইব্রেরি সক্ষম করা যায় এবং কীভাবে C++ কোড থেকে ফ্রেম পেসিং নিয়ন্ত্রণ করা যায়।

ভলকান কি

ভলকান হল একটি আধুনিক ক্রস-প্ল্যাটফর্ম 3D গ্রাফিক্স API যা ডিভাইস গ্রাফিক্স হার্ডওয়্যার এবং আপনার গেমের মধ্যে বিমূর্ততা কমানোর জন্য ডিজাইন করা হয়েছে। Vulkan হল Android এর প্রাথমিক নিম্ন-স্তরের গ্রাফিক্স API, OpenGL ES প্রতিস্থাপন করে। OpenGL ES এখনও অ্যান্ড্রয়েডে সমর্থিত, কিন্তু সক্রিয় বৈশিষ্ট্য বিকাশের অধীনে আর নেই।

Vulkan OpenGL ES এর উপর নিম্নলিখিত সুবিধাগুলি অফার করে:

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

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

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

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

ইউনিটিতে স্বয়ংক্রিয় ডিভাইস নির্বাচন সক্ষম করতে, অটো গ্রাফিক্স API কনফিগার করার পদক্ষেপগুলি অনুসরণ করুন৷

প্রকল্প সেটিংস ডায়ালগ।
চিত্র 3. ইউনিটি অটো গ্রাফিক্স API সক্ষম করুন।

বিকল্পভাবে, আপনি স্বয়ংক্রিয় গ্রাফিক্স API অক্ষম করে Vulkan ম্যানুয়ালি সক্ষম করতে পারেন এবং Vulkan কে গ্রাফিক্স API তালিকায় সর্বোচ্চ অগ্রাধিকারে রাখতে পারেন। আপনি যদি ইউনিটি 2021.1 বা পূর্ববর্তী সংস্করণ ব্যবহার করেন তবে এটি ভলকান ব্যবহার করার একমাত্র উপায়।

প্রকল্প সেটিংস ডায়ালগ।
চিত্র 4. ইউনিটিতে প্রধান গ্রাফিক্স API হিসাবে ম্যানুয়ালি ভলকান নির্বাচন করুন।

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

অবাস্তব গেম ইঞ্জিনে ভলকান কীভাবে ব্যবহার করবেন

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

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

আপনি যদি নির্দিষ্ট Vulkan বৈশিষ্ট্যগুলি ব্যবহার করেন যেগুলি নির্দিষ্ট ডিভাইসগুলিতে খারাপ আচরণ করার জন্য পরিচিত, আপনি সেই ডিভাইসগুলি বাদ দিতে আপনার BaseDeviceProfile.ini ফাইলটি কাস্টমাইজ করতে পারেন৷ BaseDeviceProfile.ini কিভাবে কাস্টমাইজ করতে হয় তা শিখতে Android এর জন্য কাস্টমাইজিং ডিভাইস প্রোফাইল এবং স্কেলেবিলিটি দেখুন। যেহেতু নতুন ডিভাইস ড্রাইভারগুলি পূর্বে পরিচিত খারাপ ডিভাইসগুলি ঠিক করতে পারে, তাই সমস্ত অপ্টিমাইজেশান পেতে আপনার BaseDeviceProfile.ini ফাইল আপডেট রাখুন৷

ADPF কি

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

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

এখানে প্রধান ADPF বৈশিষ্ট্য আছে:

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

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

আপনার নেটিভ গেম কোডল্যাবের মধ্যে একীভূত অভিযোজন বৈশিষ্ট্যগুলি আপনাকে আপনার নিজের গতিতে অনুসরণ করতে পারে এমন পদক্ষেপগুলির সাথে আপনার গেমে ADPF বৈশিষ্ট্যগুলিকে একীভূত করতে গাইড করে৷ কোডল্যাবের শেষে, আপনি নিম্নলিখিত বৈশিষ্ট্যগুলিকে একত্রিত করবেন:

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

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

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

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

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

অবাস্তব গেম ইঞ্জিনে কীভাবে ADPF ব্যবহার করবেন

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

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