Обзор Android Performance Tuner (родной)

В этой теме описывается, как интегрировать Android Performance Tuner, также известный как библиотека Tuning Fork, для записи и загрузки данных времени кадра из собственных игровых движков (C и C++).

Информацию об игровом движке Unity см. в руководстве по Unity .

Фон

Ключевым компонентом игрового процесса является производительность рендеринга . Пр��изводительность рендеринга зависит от следующих двух факторов:

  • Частота кадров: как часто отрисовывается кадр.
  • Настройки качества графики: уровень точности представления кадра, включая точность моделирования и графики.

Для игр хорошая производительность рендеринга определяется следующим образом:

  • Обеспечение стабильной и постоянной частоты кадров (то есть процента кадров, отображаемых с желаемой частотой).
  • Рендеринг кадров с максимально возможной частотой при сохранении стабильности, обычно 30 или 60 FPS в зависимости от типа игры.
  • Максимизация уровня детализации для пользователя с учетом размера и плотности его экрана при сохранении желаемой стабильной частоты кадров.

Библиотека Android Frame Pacing ограничивает значительную часть колебаний времени кадра, обеспечивая стабильную частоту кадров в играх. Оставшиеся колебания времени кадра обусловлены уровнем детализации в определенных сценах игрового процесса и графическими возможностями устройства. С помощью Android Performance Tuner вы можете точно определить моменты в игре, когда время кадра медленнее или быстрее целевого значения, и сопоставить эти проблемы и возможности со следующими факторами:

  • Конкретные настройки качества
  • Конкретные сцены в вашей игре
  • Конкретные модели устройств или характеристики устройств

Запись и загрузка данных

Библиотека Tuning Fork использует одну из своих функций тика , вызываемую в каждом кадре библиотекой Android Frame Pacing. В библиотеке эта информация о тиках агрегируется в гистограммы, которые затем периодически загружаются в Google Play через конечную точку HTTP. Каждый тик регистрируется как связанный с клавишей инструмента и аннотацией , определения которых указываются в файле буфера протокола.

Клавиши инструментов

Ключ инструмента указывает, откуда в кадре берётся тик, и представляет собой целое число, которое необходимо передавать при каждом вызове функции тика. Библиотека Android Frame Pacing использует предопределённый набор ключей инструментов, определённый в swappy_common.h . Вы также можете определить собственные ключи инструментов, если не используете библиотеку Frame Pacing.

Аннотации

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

  • Текущий уровень игры
  • На экране «большой босс»
  • Любая другая важная информация о состоянии игры

Аннотации определяются сообщением буфера протокола com.google.tuningfork.Annotation . Чтобы установить текущую аннотацию, необходимо передать сериализацию определенного вами сообщения в TuningFork_setCurrentAnnotation() . Все последующие данные тика будут связаны с этой аннотацией, пока не будет установлена другая аннотация. Ниже приведен пример определения протокола для аннотаций:

import "tuningfork.proto"
enum Level {
  INVALID_LEVEL = 0;
  Level_1 = 1;
  Level_2 = 2;
  Level_3 = 3;
}
message Annotation {
  optional Level level = 1;
}

Параметры точности

Параметры точности влияют на производительность и графическую точность вашей игры, такие как уровень детализации сетки, разрешение текстур и метод сглаживания. Как и аннотации, параметры точности определяются с помощью буферного сообщения протокола com.google.tuningfork.FidelityParams . Ниже приведён пример определения параметров точности в протоколе:

import "tuningfork.proto"
message FidelityParams {
  int32 texture_quality_level = 1;
  int32 shadow_resolution = 2;
  float terrain_details_percent = 3;
  int32 post_processing_effects_level = 4;
}

При инициализации Tuning Fork вы передаёте сериализацию параметров, используемых игрой. Вы можете изменить эти параметры, например, если пользователь изменит настройки рендеринга игры, и ваши последующие загруженные данные будут связаны с новыми параметрами.

Чтобы Google Play распознавал заданные вами а��нотации и параметры качества, файл буфера протокола, содержащий эти определения, должен быть упакован в APK-файл игры вместе с настройками инициализации. Вам также необходимо указать значения по умолчанию для распространённых комбинаций параметров качества в вашем APK-файле, чтобы ваши данные сегментировались по ним в пользовательском интерфейсе Google Play. Подробнее см. в разделе Определение уровней качества .

Накладные расходы на память и ЦП

Вся память, используемая библиотекой Tuning Fork, выделяется при инициализации, чтобы избежать непредвиденных ситуаций во время игры. Объём данных зависит от количества клавиш инструментов, количества возможных аннотаций и количества сегментов в каждой гистограмме; он кратен всем этим значениям и четырём байтам для каждого сегмента. Также существуют две копии всех гистограмм, что позволяет отп��авлять данные с двойной буферизацией.

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

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

Интеграция библиотеки Tuning Fork

Это руководство по интеграции разделено на две части. В первой части описывается, как провести сквозное тестирование с использованием демонстрационного приложения и Google Play Console. Во второй части описывается, как интегрировать библиотеку Tuning Fork в ваш набор инструментов и как использовать её функции. Нажмите ссылку «Далее» ниже, чтобы начать.