Медленные сеансы (только игры)

Медленные сеансы – это новый показатель Android Vitals в консоли Google Play. Медленный сеанс — это сеанс, в котором более 25% кадров являются медленными. Кадр считается медленным, если он не отображается менее чем через 50 мс после предыдущего кадра (что эквивалентно 20 кадрам в секунду). Android Vitals также сообщает о втором показателе медленных сеансов с целевым значением 34 мс (что эквивалентно 30 кадрам в секунду). Используя медленные сеансы, вы можете оценить производительность вашей игры с частотой кадров, которая влияет на то, насколько плавной и плавной она воспринимается пользователями.

Со временем Play начнет отвлекать пользователей от игр, которые не могут достичь 20 FPS на их телефонах. Обратите внимание, что Android Vitals начинает отслеживать частоту кадров только после того, как ваша игра проработает одну минуту.

Посетите наш Справочный центр для получения более подробной информации об этом показателе.

Графика в виде круговой диаграммы, показывающая количество медленных и немедленных кадров.
Рисунок 1. Медленный сеанс в Android Vitals.

Как измерить FPS и обнаружить медленные кадры

Команда Android dumpsys surfaceflinger timestats предоставляет средний FPS и представляет временную гистограмму для всех слоев, которые визуализируются. Текущее время кадра — это интервал между текущим и предыдущим рисуемым кадром. Вот шаги за шагом, как использовать команду для сбора FPS вашей игры:

  1. Запустите команду с enable и clear флагами, чтобы начать сбор информации:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Когда игра продлится достаточно долго, снова запустите команду с флагом dump , чтобы сбросить информацию:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    Сохраненная информация содержит общее количество кадров и гистограмму PresentToPresent для всех слоев, отображаемых SurfaceFlinger . Вы должны найти раздел своей игры, отфильтровав его по layerName :

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

    Медленная частота кадров сеанса может быть рассчитана на основе информации каждого уровня.

    Например, процент медленных кадров при 20 кадрах в секунду = (сумма значений от 54 мс до 1000 мс) / totalFrames 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
    

Причины медленного кадра и решения

Существует множество причин, по которым кадр может отображаться или отображаться на экране дольше, чем планировалось разработчиком. Игра может быть привязана к процессору/графическому процессору . Или устройство перегревается и активирует дросселируемое тепловое состояние . Либо частота кадров в игре не соответствует частоте обновления дисплея устройства .

Используйте Android Frame Pacing (Swappy) , Vulkan и ADPF , чтобы решить эти проблемы и повысить производительность игры.

Что такое Свапи

Библиотека Android Frame Pacing, также известная как Swappy, является частью библиотек AGDK . Swappy помогает играм OpenGL и Vulkan добиться плавного рендеринга и правильной частоты кадров на Android.

Скорость кадров — это синхронизация логики игры и цикла рендеринга с подсистемой отображения ОС и базовым аппаратным обеспечением дисплея. Подсистема отображения Android была разработана так, чтобы избежать визуальных артефактов (известных как разрывы), которые могут возникнуть, когда аппаратное обеспечение дисплея переключается на новый кадр во время обновления. Чтобы избежать этих артефактов, подсистема отображения делает следующее:

  • Внутренне буферизует прошлые кадры
  • Обнаруживает позднюю отправку кадров
  • Повторяет отображение прошлых кадров при обнаружении поздних кадров.

Как использовать Swappy в собственных проектах

См. следующие руководства по интеграции библиотеки Android Frame Pacing в вашу игру:

Как использовать Swappy в игровом движке Unity

Unity интегрировала Android Frame Pacing в свой движок. Чтобы включить эту функцию в Unity 2019.2 или более поздней версии, установите флажок «Оптимизированное перемещение кадров» в разделе «Настройки проекта» > «Проигрыватель» > «Настройки для Android» > «Разрешение и презентация» :

Диалог настроек проекта.
Рисунок 2. Включите синхронизацию кадров в Unity Engine.

Альтернативно, программно включите опцию «Оптимизированное изменение частоты кадров» в вашем логическом коде, чтобы позволить Unity равномерно распределять кадры для меньшего отклонения в частоте кадров, создавая более плавный игровой процесс.

Как использовать Swappy в игровом движке Unreal

В Unreal 4.25 и выше интегрирована библиотека Android Frame Pacing Library , которая является частью Android Game Development Kit . В статье «Мобильная синхронизация кадров» объясняется, как включить библиотеку кадровой синхронизации Android и как управлять синхронизацией кадров из кода C++.

Что такое Вулкан

Vulkan — это современный кроссплатформенный API 3D-графики, предназначенный для минимизации абстракции между графическим оборудованием устройства и вашей игрой. Vulkan — это основной низкоуровневый графический API на Android, заменяющий OpenGL ES . OpenGL ES по-прежнему поддерживается на Android, но активная разработка функций больше не ведется.

Vulkan предлагает следующие преимущества перед OpenGL ES:

  • Более эффективная архитектура с меньшими нагрузками на процессор в графическом драйвере.
  • Новые стратегии оптимизации для повышения производительности процессора
  • Новые графические функции, недоступные в OpenGL ES, такие как API без привязки и трассировка лучей.

Как использовать Vulkan в собственных проектах Android

Лаборатория кода «Начало работы с Vulkan на Android» поможет вам настроить конвейер рендеринга Vulkan, а затем отрисовать текстурированный вращающийся треугольник на экране. Используйте кодовую лабораторию, чтобы узнать, как визуализировать игровую графику.

Как использовать Vulkan в игровом движке Unity

Чтобы включить автоматический выбор устройства в Unity, выполните действия по настройке Auto Graphics API .

Диалог настроек проекта.
Рисунок 3. Включите Unity Auto Graphics API.

Кроме того, вы можете включить Vulkan вручную, отключив Auto Graphics API , и поставив Vulkan в наивысший приоритет в списке графических API . Если вы используете Unity 2021.1 или более раннюю версию, это единственный способ использовать Vulkan.

Диалог настроек проекта.
Рисунок 4. Вручную выберите Vulkan в качестве основного графического API в Unity.

Используйте плагин движка VkQuality Unity , чтобы предоставить рекомендации по запуску графического API для вашей игры, которые можно использовать на определенных устройствах.

Как использовать Vulkan в игровом движке Unreal

Чтобы включить графический API Vulkan, перейдите в «Настройки проекта» > «Платформы» > «Android» > «Сборка» и выберите «Поддержка Vulkan» . Когда вы выбираете «Поддержка Vulkan» и «Поддержка OpenGL ES3.2» , Unreal использует Vulkan по умолчанию. Если устройство не поддерживает Vulkan, Unreal возвращается к OpenGL ES 3.2.

Диалог настроек проекта.
Рисунок 5. Включите Vulkan в Unreal Engine.

Если вы используете определенные функции Vulkan, которые, как известно, плохо работают на определенных устройствах, вы можете настроить файл BaseDeviceProfile.ini , чтобы исключить эти устройства. Ознакомьтесь с разделом Настройка профилей устройств и масштабируемости для Android , чтобы узнать, как настроить BaseDeviceProfile.ini . Поскольку новые драйверы устройств могут исправить ранее известные неисправные устройства, обновляйте файл BaseDeviceProfile.ini , чтобы получить все возможности оптимизации.

Что такое АДПФ

Android Dynamic Performance Framework (ADPF) оптимизирует игры на основе функций динамического управления температурой, процессором и графическим процессором на Android. Основное внимание уделяется играм, но вы также можете использовать эти функции и для других приложений, требующих высокой производительности.

ADPF — это набор API-интерфейсов, которые позволяют играм и приложениям, требующим высокой производительности, более напрямую взаимодействовать с системами электропитания и охлаждения устройств Android. С помощью этих API вы можете отслеживать динамическое поведение систем Android и оптимизировать производительность игр на устойчивом уровне, не вызывающем перегрева устройств.

Вот основные функции ADPF:

  • Thermal API : отслеживайте тепловое состояние устройства, чтобы приложение могло заранее регулировать рабочую нагрузку, прежде чем она станет неустойчивой.
  • API подсказок по производительности ЦП : предоставляет подсказки по производительности, которые позволяют Android выбрать правильные настройки производительности (например, рабочую точку или ядро ​​ЦП) для рабочей нагрузки.
  • API игрового режима и API состояния игры : включите оптимизацию игрового процесса, установив приоритеты производительности или времени автономной работы на основе настроек пользователя и конкретных конфигураций игры.
  • Режим фиксированной производительности . Включите режим фиксированной производительности на устройстве во время тестирования, чтобы получать измерения, которые не изменяются при динамической тактовой частоте ЦП.
  • Режим энергоэффективности : сообщает сеансу, что потоки в сеансе подсказок по производительности можно безопасно запланировать, чтобы отдать предпочтение энергоэффективности над производительностью. Доступно в Android 15 (уровень API 35).

Как использовать ADPF в собственных проектах Android

Лаборатория «Интеграция функций адаптивности в вашу собственную игру» поможет вам интегрировать функции ADPF в вашу игру, выполнив шаги, которые вы можете выполнять в удобном для вас темпе. В конце работы над кодом вы интегрируете следующие функции:

  • Thermal API : отслеживайте тепловое состояние устройства и реагируйте до того, как устройство перейдет в состояние теплового регулирования.
  • API игрового режима . Узнайте предпочтения игрока по оптимизации (максимальная производительность или экономия заряда батареи) и внесите соответствующие изменения.
  • API состояния игры . Сообщите системе о состоянии вашей игры (загрузка, игра, пользовательский интерфейс и т. д.), и система сможет соответствующим образом настроить ресурсы (увеличить скорость ввода-вывода или процессор, графический процессор и т. д.).
  • API подсказок по производительности : сообщите системе вашу модель потоков и рабочую нагрузку, чтобы она могла соответствующим образом распределять ресурсы.

Как использовать ADPF в игровом движке Unity

Unity Adaptive Performance — это инструмент для разработчиков игр, желающих оптимизировать свои игры на мобильных устройствах, особенно для разнообразной экосистемы Android. Адаптивная производительность позволяет вашей игре адаптироваться к производительности и тепловым характеристикам устройства в режиме реального времени, обеспечивая плавный и эффективный игровой процесс.

Поставщик Adaptive Performance для Android проведет вас через шаги по реализации 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 обеспечивает стабильную производительность и предотвращает тепловое регулирование. Загрузите плагин с GitHub. Этот плагин меняет функции, устанавливая значения консоли Unreal .