Важно записывать, когда ваша игра выполняет события загрузки, по двум причинам:
- Чтобы избежать загрязнения данных о времени кадра во время загрузки.
- Чтобы проанализировать время загрузки, чтобы увидеть, когда и где время загрузки превышает допустимое.
Событие загрузки может иметь связанные метаданные:
typedef struct TuningFork_LoadingTimeMetadata {
enum LoadingState {
UNKNOWN_STATE = 0,
// The first time the game is run
FIRST_RUN = 1,
// App is not backgrounded
COLD_START = 2,
// App is backgrounded
WARM_START = 3,
// App is backgrounded, least work needed
HOT_START = 4,
// Asset loading between levels
INTER_LEVEL = 5
} state;
enum LoadingSource {
UNKNOWN_SOURCE = 0,
// Uncompressing data.
MEMORY = 1,
// Reading assets from APK bundle.
APK = 2,
// Reading assets from device storage.
DEVICE_STORAGE = 3,
// Reading assets from external storage, e.g. SD card.
EXTERNAL_STORAGE = 4,
// Loading assets from the network.
NETWORK = 5,
// Shader compilation.
SHADER_COMPILATION = 6,
// Time spent between process starting and onCreate.
PRE_ACTIVITY = 7,
// Total time spent between process starting and first render frame.
FIRST_TOUCH_TO_FIRST_FRAME = 8
} source;
int32_t compression_level; // 0 = no compression, 100 = max compression
enum NetworkConnectivity {
UNKNOWN = 0,
WIFI = 1,
CELLULAR_NETWORK = 2
} network_connectivity;
uint64_t network_transfer_speed_bps; // bandwidth in bits per second
uint64_t network_latency_ns; // latency in nanoseconds
} TuningFork_LoadingTimeMetadata;
Любые поля, которые не соответствуют вашим потребностям, могут быть нулевыми.
Событие загрузки также может иметь связанную аннотацию. Это определяется так же, как аннотации времени кадра, с использованием одного или нескольких полей в сообщении Annotation
в файле dev_tuningfork.proto
.
Эта функция начинает запись события времени загрузки, связанного с заданными метаданными и аннотацией, и заполняет handle
, который будет использоваться в функции TuningFork_stopRecordingLoadingTime()
.
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);
Эта функция останавливает запись события, ранее запущенного TuningFork_startRecordingLoadingTime()
. Событие загружается при следующем сбросе сеанса.
Мы настоятельно рекомендуем напрямую использовать функции запуска и остановки, описанные ранее. Однако если вы не можете этого сделать, вы можете вызвать эту функцию для записи продолжительности и связанных с ней метаданных и аннотаций.
Загрузка групповых функций
В вашей игре вы можете записать несколько событий загрузки за один период загрузки, видимый пользователем. Некоторые примеры включают (но не ограничиваются) загрузку файлов, распаковку и компиляцию шейдеров.
Важно сообщить Tuning Fork, что события загрузки являются частью такой группы, чтобы она могла предоставить более полную информацию. Для этого заключите события загрузки в скобки с помощью следующих функций запуска и остановки.
Эта функция запускает группу загрузки, связанную с заданными метаданными и аннотацией, и заполняет handle
, который будет использоваться в функции TuningFork_stopLoadingGroup()
. Метаданные и аннотации в настоящее время не используются серверной частью Play, и для них можно задать значение nullptr
. Все последующие события загрузки будут помечены уникальным идентификатором группы.
TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);
Эта функция останавливает группу загрузки, ранее запущенную TuningFork_startLoadingGroup()
. Последующие события загрузки не будут иметь идентификатор группы до тех пор, пока TuningFork_startLoadingGroup()
не будет вызвана снова.
Рисунок 1. Пример группы загрузки.