Thêm hàm ghi thời gian tải

Stay organized with collections Save and categorize content based on your preferences.

Bạn cần ghi lại thời điểm trò chơi thực hiện sự kiện tải vì hai lý do:

  1. Tránh gây xáo trộn dữ liệu thời gian kết xuất khung hình trong khi tải.
  2. Phân tích thời gian tải để xem thời điểm và vị trí xảy ra thời gian tải lâu hơn mức chấp nhận được.

Một sự kiện tải có thể có siêu dữ liệu liên kết:

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;

Bất kỳ trường nào không liên quan đến nhu cầu của bạn đều có thể bằng 0.

Sự kiện tải cũng có thể có chú giải liên quan. Điều này được xác định theo cách giống với các chú giải thời gian kết xuất khung hình, sử dụng một hoặc nhiều trường trong thông báo Annotation trong tệp dev_tuningfork.proto.

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

Hàm này bắt đầu ghi lại một sự kiện thời gian tải liên kết với siêu dữ liệu và chú giải nhất định, sau đó điền handle để dùng trong hàm TuningFork_stopRecordingLoadingTime().

TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);

Hàm này dừng ghi một sự kiện do TuningFork_startRecordingLoadingTime() bắt đầu trước đó. Sự kiện sẽ được tải lên vào lần xả phiên tiếp theo.

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

Bạn nên trực tiếp sử dụng các hàm bắt đầu và dừng đã mô tả lúc trước. Tuy nhiên, nếu không dùng được, bạn có thể gọi hàm này để ghi lại thời lượng cũng như chú giải và siêu dữ liệu liên quan.

Hàm cho nhóm tải

Trong trò chơi, bạn có thể ghi lại một số sự kiện tải trong một khoảng thời gian tải duy nhất mà người dùng đã thấy. Một số ví dụ bao gồm (nhưng không giới hạn ở) việc tải tệp, giải nén và biên dịch chương trình đổ bóng.

Bạn phải thông báo cho Tuning Fork rằng các sự kiện tải là một phần của nhóm đó để Tuning Fork có thể cung cấp thông tin chi tiết hơn. Để làm vậy, hãy sử dụng các hàm bắt đầu và dừng sau đây để bắt đầu và dừng các sự kiện tải của bạn.

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

Hàm này bắt đầu một nhóm tải liên kết với siêu dữ liệu và chú giải nhất định, sau đó điền handle để sử dụng trong hàm TuningFork_stopLoadingGroup(). Siêu dữ liệu và chú giải hiện không được phần phụ trợ của Play sử dụng và có thể được đặt thành nullptr. Tất cả các sự kiện tải tiếp theo sẽ được gắn một mã nhận dạng nhóm duy nhất.

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

Hàm này dừng một nhóm tải do TuningFork_startLoadingGroup() bắt đầu trước đó. Các sự kiện tải tiếp theo sẽ không có mã nhận dạng nhóm cho đến khi TuningFork_startLoadingGroup() được gọi lại.

Hình 1. Ví dụ về nhóm tải.