بهینه سازی نرخ تازه سازی

اندروید ۱۵ برای بهینه‌سازی مصرف برق، نرخ تازه‌سازی پیش‌فرض ۶۰ هرتز را برای بازی‌ها تعیین می‌کند. برای دسترسی به نرخ‌های فریم بالاتر مانند ۱۲۰ فریم بر ثانیه، اکنون باید صریحاً آنها را با استفاده از API نرخ فریم یا کتابخانه Swappy درخواست کنید.

با این حال، سیستم ممکن است بر اساس عواملی مانند سطح باتری یا دمای دستگاه، این درخواست را نادیده بگیرد. در حالی که نرخ‌های نوسازی بالاتر، روان بودن تصویر را افزایش می‌دهند، اما به انرژی بیشتری نیز نیاز دارند و گرمای اضافی تولید می‌کنند. بنابراین، بسیار مهم است که به کاربران این امکان را بدهیم که نرخ نوسازی دلخواه خود را انتخاب کنند و عملکرد را با دقت زیر نظر داشته باشند تا از یک تجربه کاربری متعادل اطمینان حاصل شود.

از API setFrameRate() استفاده کنید.

API setFrameRate() به توسعه‌دهندگان بازی اجازه می‌دهد تا از یک نرخ تازه‌سازی نمایشگر خاص استفاده کنند. برای انجام این کار دو مرحله وجود دارد:

  1. سازگاری دستگاه و نسخه اندروید را بررسی کنید.
  2. درخواست FPS بالا با استفاده از setFrameRate()

سازگاری دستگاه و نسخه اندروید را بررسی کنید:

از متدهای Display.getSupportedModes() برای تعیین اینکه آیا دستگاه از نرخ‌های نوسازی ۹۰ هرتز، ۱۲۰ هرتز یا سایر نرخ‌های نوسازی پشتیبانی می‌کند، استفاده کنید. اگر دستگاه به ۶۰ هرتز محدود شده باشد، تجاوز از این حد امکان‌پذیر نیست.

کاتلین

val display = windowManager.defaultDisplay
val supportedModes = display.supportedModes
for (mode in supportedModes) {
  Log.d("DisplayInfo", "Supported mode: ${mode.physicalWidth}x${mode.physicalHeight}, ${mode.refreshRate}Hz")
}

درخواست FPS بالا

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

حتی اگر نرخ تازه‌سازی بالاتری درخواست کنید، سیستم ممکن است به دلیل عواملی مانند حالت صرفه‌جویی در مصرف انرژی یا تنظیم دمای دستگاه، نرخ تازه‌سازی را به ۶۰ هرتز محدود کند. اگر عملکرد رندر بازی شما به FPS هدف نرسد، درخواست نرخ تازه‌سازی بالاتر ممکن است باعث مصرف برق غیرضروری و افزایش دمای دستگاه شود.

قطعه کد زیر نحوه جلوگیری از نرخ نوسازی بیش از حد بالا را با استفاده از API setFrameRate() نشان می‌دهد.

کاتلین

val targetFps = 120f
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
  window.setFrameRate(
      targetFps,
      Window.FrameRateCompatibility.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,
      0
  )
}

صفحه Framerate اطلاعات دقیق‌تری را برای مطالعه بیشتر ارائه می‌دهد.

از کتابخانه تنظیم سرعت فریم استفاده کنید

کتابخانه تنظیم سرعت فریم یا Swappy، یک کتابخانه متن‌باز است که برای ساده‌سازی مدیریت VSync و زمان‌بندی فریم در موتورهای بازی اندروید C/C++ طراحی شده است. این ابزار فرآیند بهینه‌سازی نرخ تازه‌سازی را ساده می‌کند و به طور مؤثر به عنوان یک لایه انتزاعی سطح بالاتر بر روی قابلیت‌هایی مانند setFrameRate() عمل می‌کند. علاوه بر این، Swappy ویژگی‌های اضافی ارائه می‌دهد که می‌تواند روان بودن و عملکرد کلی بازی شما را افزایش دهد.

صفحه Swappy اطلاعات دقیق‌تری ارائه می‌دهد.

نکات اضافی برای بهترین نتایج

بخش زیر چندین نکته برتر را ارائه می‌دهد:

  1. تغییر نرخ فریم پویا.
  2. نظارت بر عملکرد.
  3. گزینه‌های FPS را بر اساس حداکثر نرخ تازه‌سازی صفحه نمایش ارائه دهید.

تغییر نرخ فریم پویا

برای بهینه‌سازی عملکرد و مصرف برق، پیاده‌سازی تغییر پویای نرخ فریم در بازی خود را در نظر بگیرید. این تکنیک به شما امکان می‌دهد تا به طور یکپارچه بین نرخ‌های تازه‌سازی بالاتر مانند ۱۲۰ هرتز برای گیم‌پلی روان‌تر در صحنه‌های سنگین و نرخ‌های پایین‌تر مانند ۶۰ هرتز در لحظات کم‌فشارتر یا زمانی که عمر باتری نگران‌کننده است یا هدف زیر ۶۰FPS است، جابجا شوید. اجرای مداوم با نرخ ۱۲۰ هرتز می‌تواند منجر به تولید گرمای بیش از حد و تخلیه سریع باتری شود که به طور بالقوه منجر به یک تجربه کاربری منفی می‌شود. با تنظیم هوشمندانه نرخ تازه‌سازی بر اساس بار رندر فعلی و شرایط دستگاه، می‌توانید تعادلی بین وفاداری بصری و بهره‌وری انرژی برقرار کنید.

نظارت بر عملکرد

برای اطمینان از عملکرد بهینه بازی در نرخ‌های نوسازی بالاتر، ابزارهای نظارت بر عملکرد مانند شمارنده فریم یا پوشش عملکرد را ادغام کنید. این ابزارها بازخورد بلادرنگ از نرخ فریم واقعی بازی شما ارائه می‌دهند و به شما این امکان را می‌دهند که تأیید کنید که آیا به طور مداوم به هدف ۱۲۰ فریم در ثانیه دست می‌یابید یا خیر.

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

ارائه گزینه‌های FPS بر اساس حداکثر نرخ نوسازی نمایشگر

بازی شما باید حداکثر نرخ تازه‌سازی صفحه نمایش پشتیبانی شده توسط دستگاه فعلی، مانند ۶۰ هرتز، ۹۰ هرتز یا ۱۲۰ هرتز را تشخیص دهد و تنظیمات FPS را بر اساس آن محدود کند. به عنوان مثال، اگر دستگاه فقط تا ۶۰ هرتز پشتیبانی می‌کند، توصیه می‌شود هر گزینه بالاتر از ۶۰ فریم بر ثانیه را در تنظیمات بازی غیرفعال کنید تا از گیج شدن بازیکن جلوگیری شود.