Menambahkan fungsi perekaman waktu pemuatan

Merekam saat game Anda melakukan peristiwa pemuatan sangat penting karena dua alasan, yaitu:

  1. Untuk menghindari pencemaran data waktu render frame saat memuat.
  2. Untuk menganalisis waktu pemuatan guna mengetahui saat dan tempat waktu pemuatan lebih lama dari yang dapat diterima.

Peristiwa pemuatan dapat memiliki metadata terkait:

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;

Setiap kolom yang tidak relevan dengan kebutuhan Anda dapat bernilai nol.

Peristiwa pemuatan juga dapat memiliki anotasi terkait. Ini ditentukan dengan cara yang sama seperti anotasi waktu render frame, dengan menggunakan satu atau beberapa kolom dalam pesan Annotation di file dev_tuningfork.proto.

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

Fungsi ini mulai merekam peristiwa waktu pemuatan yang terkait dengan metadata dan anotasi yang ditentukan, dan mengisi handle untuk digunakan dalam fungsi TuningFork_stopRecordingLoadingTime().

TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);

Fungsi ini berhenti merekam peristiwa yang sebelumnya dimulai oleh TuningFork_startRecordingLoadingTime(). Peristiwa diupload pada flush sesi berikutnya.

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

Sebaiknya langsung gunakan fungsi mulai dan berhenti yang dijelaskan sebelumnya. Jika tidak dapat melakukannya, Anda dapat memanggil fungsi ini untuk merekam durasi serta metadata dan anotasi terkaitnya.

Fungsi grup pemuatan

Di game, Anda dapat merekam beberapa peristiwa pemuatan untuk satu periode pemuatan yang dilihat oleh pengguna. Beberapa contohnya mencakup (tetapi tidak terbatas pada) pemuatan file, dekompresi, dan kompilasi shader.

Penting untuk memberi tahu Tuning Fork bahwa peristiwa pemuatan adalah bagian dari grup tersebut agar dapat memberikan insight yang lebih baik. Kumpulkan peristiwa pemuatan dengan fungsi mulai dan berhenti berikut untuk melakukannya.

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

Fungsi ini memulai grup pemuatan yang terkait dengan metadata dan anotasi yang ditentukan, dan mengisi handle untuk digunakan dalam fungsi TuningFork_stopLoadingGroup(). Metadata dan anotasi saat ini tidak digunakan oleh backend Play dan dapat ditetapkan ke nullptr. Semua peristiwa pemuatan berikutnya akan diberi tag oleh ID grup unik.

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

Fungsi ini menghentikan grup pemuatan yang sebelumnya dimulai oleh TuningFork_startLoadingGroup(). Peristiwa pemuatan berikutnya tidak akan memiliki ID grup hingga TuningFork_startLoadingGroup() dipanggil lagi.

Gambar 1. Contoh grup pemuatan.