В этом разделе описывается, как интегрировать Android Performance Tuner, также известный как библиотека Tuning Fork, для записи и загрузки данных о времени кадра из собственных игровых движков (C и C++).
Информацию об игровом движке Unity см. в руководстве по Unity .
Фон
Ключевым компонентом игрового процесса является производительность рендеринга . Производительность рендеринга зависит от следующих двух факторов:
- Частота кадров: как часто прорисовывается кадр.
- Настройки качества графики: уровень точности представления кадра, включая точность моделирования и графики.
Для игр хорошая производительность рендеринга определяется следующим образом:
- Обеспечение стабильной и постоянной частоты кадров (т. е. процента кадров, отображаемых с желаемой частотой).
- Рендеринг кадров с максимально возможной частотой при сохранении стабильности, обычно 30 или 60 кадров в секунду в зависимости от типа игры.
- Максимизация уровня детализации для пользователя с учетом размера и плотности его экрана при сохранении желаемой стабильной частоты кадров.
Библиотека 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. Во второй части описывается, как интегрировать библиотеку Tuning Fork в вашу цепочку инструментов и как использовать функции, предоставляемые библиотекой. Нажмите ссылку «Далее» ниже, чтобы начать.