В этом документе описывается, как устанавливать аннотации, параметры точности и настройки в вашем проекте.
Аннотации и параметры точности
Аннотации предоставляют контекстную информацию о том, что делает ваша игра, когда записывается тик. Параметры Fidelity отражают производительность и графические настройки вашей игры. Вы определяете их с помощью буферов протокола, которые представляют собой нейтральный к языку структурированный формат обмена данными Google. Дополнительную информацию об использовании буферов протокола в игре см. в разделе «О буферах протокола» .
Возможные аннотации и параметры точности для вашей игры определены в файле dev_tuningfork.proto
, который находится в каталоге assets/tuningfork
вашего проекта. Ниже приведен пример демонстрационного приложения:
syntax = "proto3";
package com.google.tuningfork;
enum InstrumentKey {
CPU = 0;
GPU = 1;
SWAPPY_WAIT = 2;
SWAPPY_SWAP = 3;
CHOREOGRAPHER = 4;
}
enum Level {
// 0 is not a valid value
LEVEL_INVALID = 0;
LEVEL_1 = 1;
LEVEL_2 = 2;
LEVEL_3 = 3;
};
message Annotation {
Level level = 1;
}
message FidelityParams {
int32 num_spheres = 1;
float tesselation_percent = 2;
}
Обратите внимание на следующее:
- Пакет должен быть
com.google.tuningfork
. - Имена сообщений должны быть именно
Annotation
иFidelityParams
. - В составе аннотаций можно использовать только
enums
, определенные в этом файле. - В полях
FidelityParams
можно использовать толькоenums
,int32s
илиfloats
. - Инструмент проверки обеспечивает соблюдение этих соглашений.
Настройки
Сообщение Settings
определяется tuningfork.proto
. Полный пример смотрите в следующем файле:
gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/tuningfork_settings.txt
Вы должны определить настройки своей игры в файле tuningfork_settings.txt
, расположенном в каталоге assets/tuningfork
вашего проекта. Вам необходимо указать только следующие поля:
aggregation_strategy
: сообщение, содержащее следующее:-
method
:TIME_BASED
для загрузки каждые n миллисекунд илиTICK_BASED
для загрузки каждые n тиков. -
intervalms_or_count
: n для поляmethod
. -
max_instrumentation_keys
: количество используемых инструментов. Установите значение4
если используете библиотеку Android Frame Pacing. -
annotation_enum_size
: необязательное поле, поскольку размер рассчитывается при запуске из дескриптора.
-
api_key
: ключ API облачного проекта вашего приложения, используемый для проверки запросов к конечной точке. Чтобы сгенерировать этот ключ, см. раздел «Включение API» . Если вы видите ошибки подключения вlogcat
, проверьте правильность ключа API.default_fidelity_parameters_filename
: набор параметров точности, используемый при инициализации (необязательно, если вы установилиtraining_fidelity_params
в своем коде).level_annotation_index
: (Необязательно) Индекс номера уровня в полях аннотаций.
Ниже приведен пример текстового представления:
aggregation_strategy: {method: TIME_BASED, intervalms_or_count: 10000,
max_instrumentation_keys: 5, annotation_enum_size: [3,4]}
api_key: "API-KEY-FROM-GOOGLE-CLOUD-CONSOLE"
default_fidelity_parameters_filename: "dev_tuningfork_fidelityparams_3.bin"
level_annotation_index: 1
Установка аннотаций
Вам необходимо вручную устанавливать аннотации во время игры. Вы можете увидеть пример этого в демо-приложении, поскольку оно автоматически проходит все игровые уровни. Для получения дополнительной информации см. функцию SetAnnotations()
в insightsdemo.cpp
.
В этом случае в аннотации указывается только номер уровня.
message Annotation {
Level level = 1;
}
Определить уровни качества
Используйте уровни качества для аннотирования сеансов, чтобы можно было определить, работают ли устройства на слишком высоком (приводящем к снижению производительности) или слишком низком (приводящем к ненужному снижению точности) уровне качества.
Вы должны определить хотя бы один, а лучше несколько уровней качества для своей игры. Уровень качества соответствует экземпляру вашего сообщения FidelityParams
. Эти уровни должны быть заданы в порядке возрастания точности в следующем формате имени файла:
dev_tuningfork_fidelityparams_i.txt
где i
— индекс, начинающийся с 1 и максимальное значение 15. Эти файлы должны находиться в каталоге assets/tuningfork
вашего проекта. В примере проекта показан пример этой структуры в каталоге gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/
.
О буферах протокола
Библиотека Tuning Fork использует формат буфера протокола Google для настроек, аннотаций и параметров точности. Это четко определенный многоязычный протокол для расширяемых структурированных данных. Дополнительную информацию см. в документации по протокольным буферам .
Прото2 против Прото3
Версия формата буфера протокола задается в первой строке файла:
syntax="proto2";
Proto2 и proto3 — две часто используемые версии буферов протокола. Они оба используют один и тот же формат проводов, но файлы определений несовместимы. Ключевые различия между двумя версиями заключаются в следующем:
-
optional
иrequired
ключевые слова больше не разрешены в proto3. - В proto3 все фактически
optional
. - Расширения не поддерживаются в proto3.
Используйте proto3 в своих файлах прототипов, поскольку их можно скомпилировать в C#. Proto2 также работает с ограниченным набором функций, используемым в библиотеке Tuning Fork.
Текст против двоичных представлений
Бинарный проводной формат protobuf четко определен и стабилен в различных версиях protobuf (сгенерированный код — нет). Существует также текстовый формат, который может генерировать и читать полная версия библиотеки protobuf. Этот формат не так четко определен, но он стабилен для ограниченного набора функций библиотеки Tuning Fork. Вы можете конвертировать между двоичными и текстовыми форматами с помощью компилятора protoc
. Следующая команда преобразует текстовый protobuf в двоичный:
protoc --encode com.google.tuningfork.Settings tuningfork.proto < tuningfork_settings.txt > tuningfork_settings.bin
Вы должны включать в APK двоичные файлы, а не текстовые файлы, поскольку размер полной библиотеки protobuf составляет несколько МБ; если бы библиотека Tuning Fork зависела от нее, размер вашей игры увеличился бы на такую же величину.
Полный против Lite против Nano
Помимо полной библиотеки protobuf, существует облегченная версия, которая уменьшает объем кода за счет удаления некоторых функций, таких как отражение, FileDescriptors
и потоковая передача в текстовые форматы и из них. Эта версия по-прежнему требует нескольких МБ дополнительного кода, поэтому библиотека Tuning Fork внутренне использует библиотеку nanopb . Исходный код этой библиотеки включен в проект Android Open Source Project в external/nanopb-c
и является частью ветки gamesdk
. Используйте эту библиотеку в своей игре, если размер кода является проблемой.
В gamesdk/src/protobuf
есть файлы CMake, которые помогут вам интегрировать все три версии protobuf. В образцах используется смесь как nanopb, так и полного protobuf.