Оптимизация частоты обновления

В Android 15 для игр установлена ​​частота обновления по умолчанию 60 Гц для оптимизации энергопотребления. Чтобы разблокировать более высокую частоту кадров, например 120 FPS, теперь необходимо явно запросить её с помощью API частоты кадров или библиотеки Swappy.

Однако система может проигнорировать этот запрос, исходя из таких факторов, как уровень заряда батареи или температура устройства. Хотя более высокая частота обновления улучшает плавность изображения, она также потребляет больше энергии и выделяет дополнительное тепло. Поэтому крайне важно предоставить пользователям возможность выбора предпочтительной частоты обновления и тщательно отслеживать производительность, чтобы обеспечить сбалансированный пользовательский опыт.

Используйте API setFrameRate()

Функция setFrameRate() позволяет разработчикам игр использовать определенную частоту обновления экрана. Для этого необходимо выполнить два шага:

  1. Проверьте совместимость устройства и версии Android.
  2. Запросите высокую частоту кадров с помощью setFrameRate() .

Проверьте совместимость устройства и версии Android:

Используйте метод Display.getSupportedModes() , чтобы определить, поддерживает ли устройство частоту обновления 90 Гц, 120 Гц или другие частоты. Если устройство ограничено частотой 60 Гц, превысить этот предел невозможно.

Котлин

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")
}

Запрос на высокую частоту кадров

Вызывайте setFrameRate() при запуске цикла рендеринга, во время инициализации игрового окна или когда целевому значению FPS необходимо изменить частоту обновления дисплея.

Даже если вы запросите более высокую частоту обновления, система может ограничить её до 60 Гц из-за таких факторов, как режим энергосбережения или перегрев. Если производительность рендеринга в вашей игре не достигает целевой частоты кадров, запрос более высокой частоты обновления может привести к излишнему потреблению энергии и повышению температуры устройства.

Следующий фрагмент кода демонстрирует, как избежать слишком высокой частоты обновления при использовании 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
  )
}

На странице «Частота кадров» представлена ​​более подробная информация для дальнейшего ознакомления.

Используйте библиотеку Frame Pacing.

Библиотека синхронизации кадров , или Swappy, — это библиотека с открытым исходным кодом, разработанная для упрощения управления VSync и планирования кадров в игровых движках Android на C/C++. Этот инструмент оптимизирует процесс настройки частоты обновления, фактически выступая в качестве более высокого уровня абстракции над такими функциями, как setFrameRate() . Кроме того, Swappy предоставляет дополнительные возможности, которые могут повысить общую плавность и производительность вашей игры.

Более подробная информация представлена ​​на странице Swappy .

Дополнительные советы для достижения наилучших результатов

В следующем разделе изложены несколько важных советов:

  1. Динамическое переключение частоты кадров.
  2. Мониторинг производительности.
  3. Предоставьте параметры частоты кадров (FPS) в зависимости от максимальной частоты обновления экрана.

Динамическое переключение частоты кадров

Для оптимизации как производительности, так и энергопотребления, рассмотрите возможность внедрения динамического переключения частоты кадров в вашей игре. Этот метод позволяет плавно переключаться между более высокими частотами обновления, такими как 120 Гц, для более плавной игры в ресурсоемких сценах, и более низкими частотами, такими как 60 Гц, в менее интенсивные моменты или когда важна экономия заряда батареи, или когда требуется частота кадров ниже 60 FPS. Постоянная работа на частоте 120 Гц может привести к чрезмерному выделению тепла и быстрому разряду батареи, что потенциально может негативно сказаться на пользовательском опыте. Интеллектуально регулируя частоту обновления в зависимости от текущей нагрузки на рендеринг и состояния устройства, вы можете найти баланс между качеством изображения и энергоэффективностью .

Мониторинг производительности

Чтобы обеспечить оптимальную производительность игры при более высоких частотах обновления экрана, используйте инструменты мониторинга производительности, такие как счетчик кадров или наложение графики. Эти инструменты предоставляют обратную связь в реальном времени о фактической частоте кадров в игре, позволяя проверить, стабильно ли вы достигаете целевых 120 FPS.

Если частота кадров значительно колеблется, попробуйте установить более низкую достижимую частоту кадров на данном устройстве. Это обеспечит более плавную работу без сбоев, которые могут возникнуть при стремлении к максимальной частоте обновления.

Предоставьте параметры частоты кадров (FPS) в зависимости от максимальной частоты обновления экрана.

Ваша игра должна определять максимальную частоту обновления экрана, поддерживаемую текущим устройством, например, 60 Гц, 90 Гц или 120 Гц, и соответствующим образом ограничивать настройки FPS. Например, если устройство поддерживает только до 60 Гц, рекомендуется отключить все параметры, превышающие 60 FPS, в настройках игры, чтобы избежать путаницы у игрока.