Добавить функции записи времени загрузки

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

  1. Чтобы избежать загрязнения данных о времени кадра во время загрузки.
  2. Чтобы проанализировать время загрузки, чтобы увидеть, когда и где время загрузки превышает допустимое.

Событие загрузки может иметь связанные метаданные:

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 .

TuningFork_ErrorCode TuningFork_startRecordingLoadingTime( const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation, TuningFork_LoadingEventHandle* handle);

Эта функция начинает запись события времени загрузки, связанного с заданными метаданными и аннотацией, и заполняет handle , который будет использоваться в функции TuningFork_stopRecordingLoadingTime() .

TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);

Эта функция останавливает запись события, ранее запущенного TuningFork_startRecordingLoadingTime() . Событие загружается при следующем сбросе сеанса.

TuningFork_ErrorCode TuningFork_recordLoadingTime( uint64_t time_ns, const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation);

Мы настоятельно рекомендуем напрямую использовать функции запуска и остановки, описанные ранее. Однако если вы не можете этого сделать, вы можете вызвать эту функцию для записи продолжительности и связанных с ней метаданных и аннотаций.

Загрузка групповых функций

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

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

TuningFork_ErrorCode TuningFork_startLoadingGroup( const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation, TuningFork_LoadingEventHandle* handle);

Эта функция запускает группу загрузки, связанную с заданными метаданными и аннотацией, и заполняет handle , который будет использоваться в функции TuningFork_stopLoadingGroup() . Метаданные и аннотации в настоящее время не используются серверной частью Play, и для них можно задать значение nullptr . Все последующие события загрузки будут помечены уникальным идентификатором группы.

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

Эта функция останавливает группу загрузки, ранее запущенную TuningFork_startLoadingGroup() . Последующие события загрузки не будут иметь идентификатор группы до тех пор, пока TuningFork_startLoadingGroup() не будет вызвана снова.

Рисунок 1. Пример группы загрузки.