È importante registrare gli eventi di caricamento del gioco per due motivi:
- Per evitare di contaminare i dati sulla durata frame durante il caricamento.
- Per analizzare i tempi di caricamento per capire quando e dove i tempi di caricamento sono più lunghi di quelli accettabili.
Un evento di caricamento può avere metadati associati:
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;
Tutti i campi non pertinenti alle tue esigenze possono essere uguali a zero.
Un evento di caricamento può anche avere un'annotazione associata. È definito allo stesso modo delle annotazioni della durata frame, utilizzando uno o più campi nel messaggio Annotation
nel file dev_tuningfork.proto
.
Questa funzione inizia a registrare un evento relativo al tempo di caricamento associato ai metadati e all'annotazione specificati e compila un handle
da utilizzare nella funzione TuningFork_stopRecordingLoadingTime()
.
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime(
TuningFork_LoadingEventHandle handle);
Questa funzione interrompe la registrazione di un evento avviato in precedenza da
TuningFork_startRecordingLoadingTime()
. L'evento viene caricato al successivo
svuotamento della sessione.
Ti consigliamo vivamente di utilizzare direttamente le funzioni di avvio e di arresto descritte in precedenza. Se non puoi farlo, tuttavia, puoi chiamare questa funzione per registrare una durata e i metadati e l'annotazione associati.
Caricamento delle funzioni di gruppo in corso...
Nel tuo gioco, puoi registrare diversi eventi di caricamento per un singolo periodo di caricamento rilevato dall'utente. Alcuni esempi includono, a titolo esemplificativo, il caricamento dei file, la decompressione e la compilazione dello strumento.
È importante comunicare a Tuning Fork che gli eventi di caricamento fanno parte di un gruppo di questo tipo, in modo che possa fornire insight migliori. A questo scopo, associa gli eventi di caricamento alle seguenti funzioni di avvio e arresto.
Questa funzione avvia un gruppo di caricamento associato ai metadati e all'annotazione specificati e compila un valore handle
da utilizzare nella funzione TuningFork_stopLoadingGroup()
. I metadati e le annotazioni non sono attualmente utilizzati dal backend di Google Play e possono essere impostati su nullptr
. A tutti gli eventi di caricamento successivi verranno assegnati tag da un ID gruppo univoco.
TuningFork_ErrorCode TuningFork_stopLoadingGroup(
TuningFork_LoadingEventHandle handle);
Questa funzione interrompe il caricamento di un gruppo avviato in precedenza da TuningFork_startLoadingGroup()
. Gli eventi di caricamento successivi non avranno un ID gruppo fino a quando TuningFork_startLoadingGroup()
non viene richiamato.
Figura 1. Esempio del gruppo di caricamento.