Merekam saat game Anda melakukan peristiwa pemuatan sangat penting karena dua alasan, yaitu:
- Untuk menghindari pencemaran data waktu render frame saat memuat.
- 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
.
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.
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.
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.