جلسات آهسته (فقط بازی)

Slow Sessions یک معیار جدید حیاتی اندروید در کنسول Google Play است. جلسه آهسته جلسه ای است که در آن بیش از 25 درصد فریم ها کند هستند. اگر فریم کمتر از 50 میلی ثانیه پس از فریم قبلی (معادل 20 فریم در ثانیه) ارائه نشود، کند است. Android vitals همچنین یک متریک دوم Slow Sessions را با هدف 34 میلی‌ثانیه (معادل 30 فریم در ثانیه) گزارش می‌کند. با استفاده از Slow Sessions، می‌توانید عملکرد نرخ فریم بازی خود را درک کنید، که بر میزان روان و روان بازی شما برای کاربران تأثیر می‌گذارد.

به مرور زمان، Play کاربران را از بازی‌هایی که نمی‌توانند 20 فریم در ثانیه روی گوشی‌های خود به دست آورند، دور می‌کند. توجه داشته باشید که Android vitals تنها پس از اجرای بازی شما برای یک دقیقه شروع به نظارت بر نرخ فریم می کند.

برای جزئیات بیشتر در مورد سنجه، از مرکز راهنمایی ما دیدن کنید.

گرافیک های نمودار دایره مانند که تعداد فریم های کند و فریم های غیر آهسته را نشان می دهد.
شکل 1. یک جلسه آهسته در اندروید حیاتی.

نحوه اندازه گیری FPS و تشخیص فریم های کند

دستور Android dumpsys surfaceflinger timestats میانگین FPS و هیستوگرام زمان‌بندی حال حاضر را برای همه لایه‌هایی که در حال رندر هستند ارائه می‌کند. زمان حال تا حال یک فریم فاصله بین فریم فعلی و فریم قبلی ترسیم شده است. در اینجا گام به گام برای استفاده از دستور جمع آوری FPS بازی خود آورده شده است:

  1. برای شروع گرفتن اطلاعات، دستور را با پرچم‌ها enable و clear کنید:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. وقتی بازی به اندازه کافی طولانی شد، دستور را دوباره با flag dump برای تخلیه اطلاعات اجرا کنید:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    اطلاعات تخلیه شده کل فریم ها و هیستوگرام presentToPresent را برای همه لایه های ارائه شده توسط SurfaceFlinger ارائه می دهد. شما باید بخش بازی خود را با فیلتر کردن بر اساس 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 هر لایه نیز در dump نشان داده شده است:

    ...
    averageFPS = 30.179
    ...
    
  3. پس از جمع آوری تمام اطلاعات، باید با استفاده از flag disable ، آمارهای زمانی را غیرفعال کنید:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

چارچوب آهسته علل و راه حل

دلایل زیادی وجود دارد که ممکن است یک فریم بیشتر از هدف توسعه دهنده روی صفحه نمایش داده شود یا نمایش داده شود. بازی ممکن است به CPU/GPU محدود شود. یا دستگاه بیش از حد گرم می شود و حالت حرارتی دریچه گاز را فعال می کند . یا عدم تطابق در نرخ فریم بازی و نرخ تازه سازی نمایشگر دستگاه وجود دارد.

از Android Frame Pacing (Swappy) ، Vulkan و ADPF برای رفع این مشکلات و بهبود عملکرد بازی خود استفاده کنید.

Swappy چیست

کتابخانه Android Frame Pacing که با نام Swappy نیز شناخته می‌شود، بخشی از کتابخانه‌های AGDK است. Swappy به بازی‌های OpenGL و Vulkan کمک می‌کند تا رندر نرم و سرعت فریم صحیح را در اندروید انجام دهند.

فریم ریتم همگام سازی منطق و حلقه رندر بازی با زیرسیستم نمایش سیستم عامل و سخت افزار نمایشگر زیرین است. زیرسیستم نمایشگر اندروید برای جلوگیری از مصنوعات بصری (معروف به پاره شدن) طراحی شده است که ممکن است زمانی رخ دهد که سخت افزار نمایشگر از طریق به روز رسانی به یک قاب جدید تغییر مکان دهد. برای جلوگیری از این مصنوعات، زیرسیستم نمایشگر موارد زیر را انجام می دهد:

  • فریم های گذشته را به صورت داخلی بافر می کند
  • ارسال فریم های دیرهنگام را تشخیص می دهد
  • نمایش فریم های گذشته را در صورت شناسایی فریم های دیرهنگام تکرار می کند

نحوه استفاده از Swappy در پروژه های بومی

برای ادغام کتابخانه Android Frame Pacing در بازی خود به راهنماهای زیر مراجعه کنید:

نحوه استفاده از Swappy در موتور بازی سازی Unity

Unity Android Frame Pacing را در موتور خود ادغام کرده است. برای فعال کردن این ویژگی در یونیتی 2019.2 یا بالاتر، چک باکس Optimized Frame Pacing را در قسمت تنظیمات پروژه > پخش کننده > تنظیمات اندروید > وضوح و ارائه علامت بزنید:

گفتگوی تنظیمات پروژه
شکل 2. Frame Pacing را در Unity Engine فعال کنید.

از طرف دیگر، گزینه Optimized Frame Pacing را به صورت برنامه‌نویسی در کد منطقی خود فعال کنید تا به یونیتی اجازه دهد تا فریم‌ها را به طور مساوی برای واریانس کمتر در نرخ فریم توزیع کند و گیم‌پلی نرم‌تری ایجاد کند.

نحوه استفاده از Swappy در موتور بازی سازی Unreal

Unreal 4.25 و بالاتر کتابخانه Android Frame Pacing را که بخشی از کیت توسعه بازی اندروید است یکپارچه می کند. مقاله Mobile Frame Pacing توضیح می‌دهد که چگونه کتابخانه Android Frame Pacing را فعال کنید و چگونه سرعت فریم را از طریق کد C++ کنترل کنید.

ولکان چیست

Vulkan یک API گرافیک سه بعدی متقابل پلتفرم مدرن است که برای به حداقل رساندن انتزاع بین سخت افزار گرافیک دستگاه و بازی شما طراحی شده است. Vulkan اولین API گرافیکی سطح پایین در اندروید است که جایگزین OpenGL ES شده است. OpenGL ES هنوز در اندروید پشتیبانی می شود، اما دیگر تحت توسعه ویژگی فعال نیست.

Vulkan مزایای زیر را نسبت به OpenGL ES ارائه می دهد:

  • معماری کارآمدتر با سربار CPU کمتر در درایور گرافیک
  • استراتژی های بهینه سازی جدید برای بهبود عملکرد CPU
  • ویژگی‌های گرافیکی جدیدی که در OpenGL ES موجود نیستند، مانند APIهای بی‌نتیجه و ردیابی پرتو

نحوه استفاده از Vulkan در پروژه های بومی اندروید

شروع با Vulkan در نرم‌افزار Android Code Lab شما را از طریق راه‌اندازی خط لوله رندر Vulkan و سپس رندر کردن یک مثلث بافت‌دار و چرخان روی صفحه راهنمایی می‌کند. برای یادگیری نحوه رندر کردن گرافیک بازی خود از کدلب استفاده کنید.

نحوه استفاده از Vulkan در موتور بازی سازی Unity

برای فعال کردن انتخاب خودکار دستگاه در Unity، مراحل پیکربندی Auto Graphics API را دنبال کنید.

گفتگوی تنظیمات پروژه
شکل 3. Unity Auto Graphics API را فعال کنید.

همچنین، می‌توانید Vulkan را با غیرفعال کردن Auto Graphics API به صورت دستی فعال کنید و Vulkan را در بالاترین اولویت در لیست Graphics APIs قرار دهید. اگر از Unity 2021.1 یا نسخه قبلی استفاده می کنید، این تنها راه استفاده از Vulkan است.

گفتگوی تنظیمات پروژه
شکل 4. به صورت دستی Vulkan را به عنوان Graphics API اصلی در Unity انتخاب کنید.

از افزونه موتور VkQuality Unity برای ارائه توصیه‌های زمان راه‌اندازی API گرافیکی برای بازی خود برای استفاده در دستگاه‌های خاص استفاده کنید.

نحوه استفاده از Vulkan در موتور بازی سازی Unreal

برای فعال کردن Vulkan graphics API، به Project Settings > Platforms > Android > Build بروید و Support Vulkan را انتخاب کنید. وقتی هر دو Support Vulkan و Support OpenGL ES3.2 را انتخاب می کنید، Unreal به طور پیش فرض از Vulkan استفاده می کند. اگر دستگاه از Vulkan پشتیبانی نمی کند، Unreal به OpenGL ES 3.2 برمی گردد.

گفتگوی تنظیمات پروژه
شکل 5. Vulkan را در Unreal Engine فعال کنید.

اگر از ویژگی‌های خاص Vulkan استفاده می‌کنید که در برخی دستگاه‌ها بد رفتار می‌کنند، می‌توانید فایل BaseDeviceProfile.ini خود را برای حذف آن دستگاه‌ها سفارشی کنید. برای یادگیری نحوه سفارشی‌سازی BaseDeviceProfile.ini ، سفارشی‌سازی نمایه‌های دستگاه و مقیاس‌پذیری را برای Android بررسی کنید. از آنجایی که درایورهای دستگاه جدید ممکن است دستگاه های بد شناخته شده قبلی را برطرف کنند، فایل BaseDeviceProfile.ini خود را به روز نگه دارید تا همه بهینه سازی ها را دریافت کنید.

ADPF چیست؟

Android Dynamic Performance Framework (ADPF) بازی‌ها را بر اساس ویژگی‌های مدیریت حرارتی پویا، CPU و GPU در اندروید بهینه می‌کند. تمرکز روی بازی‌ها است، اما می‌توانید از این ویژگی‌ها برای سایر برنامه‌های پرفورمنس نیز استفاده کنید.

ADPF مجموعه‌ای از API است که به بازی‌ها و برنامه‌های پرفورمنس امکان تعامل مستقیم‌تر با سیستم‌های برق و حرارتی دستگاه‌های اندرویدی را می‌دهد. با استفاده از این APIها، می‌توانید رفتار پویا را در سیستم‌های اندرویدی نظارت کنید و عملکرد بازی را در سطحی پایدار بهینه کنید که دستگاه‌ها را بیش از حد داغ نکند.

در اینجا ویژگی های اصلی ADPF آمده است:

  • Thermal API : وضعیت حرارتی یک دستگاه را کنترل کنید تا برنامه بتواند پیش از اینکه ناپایدار شود، بار کاری را به طور فعال تنظیم کند.
  • CPU Performance Hint API : نکات عملکردی را ارائه می دهد که به Android اجازه می دهد تنظیمات عملکرد مناسب (به عنوان مثال، نقطه کار CPU یا هسته) را برای حجم کاری انتخاب کند.
  • Game Mode API و Game State API : بهینه‌سازی بازی را با اولویت‌بندی ویژگی‌های عملکرد یا عمر باتری، بر اساس تنظیمات کاربر و پیکربندی‌های خاص بازی، فعال کنید.
  • حالت عملکرد ثابت : حالت عملکرد ثابت را در یک دستگاه در حین محک زدن فعال کنید تا اندازه‌گیری‌هایی را دریافت کنید که توسط ساعت پویا CPU تغییر نمی‌کنند.
  • حالت بهره وری انرژی : به جلسه می گوید که رشته ها در جلسه راهنمایی عملکرد را می توان به طور ایمن برنامه ریزی کرد تا بازده انرژی را بر عملکرد ترجیح دهد. موجود در Android 15 (API Leve 35).

نحوه استفاده از ADPF در پروژه های بومی اندروید

ادغام ویژگی‌های سازگاری در آزمایشگاه کد بازی بومی شما را راهنمایی می‌کند تا ویژگی‌های ADPF را با مراحلی که می‌توانید با سرعت خود دنبال کنید، در بازی خود ادغام کنید. در پایان کد لبه، ویژگی های زیر را ادغام خواهید کرد:

  • API حرارتی : به وضعیت حرارتی دستگاه گوش دهید و قبل از اینکه دستگاه در حالت دریچه گاز قرار گیرد واکنش نشان دهید.
  • Game Mode API : اولویت‌های بهینه‌سازی بازیکن را درک کنید (به حداکثر رساندن عملکرد یا حفظ باتری) و بر اساس آن تنظیم کنید.
  • Game State API : به سیستم اجازه دهید از وضعیت بازی شما (بارگیری، بازی، رابط کاربری و غیره) مطلع شود و سیستم می تواند منابع را بر اساس آن تنظیم کند (تقویت I/O یا CPU، GPU و غیره).
  • Performance Hint API : به سیستم اجازه دهید مدل رشته و حجم کاری شما را بداند تا سیستم بتواند منابع را بر اساس آن تخصیص دهد.

نحوه استفاده از ADPF در موتور بازی Unity

Unity's Adaptive Performance ابزاری برای توسعه دهندگان بازی است که به دنبال بهینه سازی بازی های خود در دستگاه های تلفن همراه هستند، به ویژه برای اکوسیستم متنوع اندروید. عملکرد تطبیقی ​​بازی شما را قادر می‌سازد تا با عملکرد و ویژگی‌های حرارتی دستگاه در زمان واقعی منطبق شود و تجربه بازی روان و کارآمدی را تضمین می‌کند.

ارائه دهنده عملکرد تطبیقی ​​اندروید شما را در مراحل پیاده سازی ADPF در Unity راهنمایی می کند.

گفتگوی تنظیمات پروژه
شکل 6. ADPF را در Unity Engine یکپارچه کنید.

نحوه استفاده از ADPF در موتور بازی سازی Unreal

گفتگوی تنظیمات پروژه
شکل 7. ADPF را در Unreal Engine ادغام کنید.
  1. افزونه را دانلود کنید
  2. افزونه را در پوشه افزونه پروژه کپی کنید
  3. افزونه ADPF Unreal Engine را در ویرایشگر Unreal فعال کنید
  4. ویرایشگر Unreal را دوباره راه اندازی کنید
  5. بازی را بسازید و بپزید

پلاگین Android Dynamic Performance Framework (ADPF) برای Unreal Engine عملکرد پایداری را ارائه می دهد و از انقباض حرارتی جلوگیری می کند. افزونه را از گیت هاب دانلود کنید . این افزونه با تنظیم مقادیر کنسول Unreal ویژگی ها را تغییر می دهد.