È importante registrare gli eventi di caricamento del gioco per due motivi:
- Per evitare di inquinare i dati sulla durata frame durante il caricamento.
- Per analizzare i tempi di caricamento per capire quando e dove sono più lunghi di quanto accettabili.
Un evento di caricamento può essere associato a metadati:
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 zero.
A un evento di caricamento può anche essere associata un'annotazione. Questo è definito come le annotazioni della durata frame, utilizzando uno o più campi nel messaggio Annotation
nel file dev_tuningfork.proto
.
Questa funzione inizia a registrare un evento del tempo di caricamento associato ai
metadati e all'annotazione specificati e compila un valore 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 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 rilevati dall'utente. Alcuni esempi includono, a titolo esemplificativo, il caricamento di file, la decompressione e la compilazione delloshadowr.
È 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 dati e compila un valore handle
da utilizzare nella
funzione TuningFork_stopLoadingGroup()
. I metadati e l'annotazione
al momento non sono utilizzati dal backend di Google Play e possono essere impostati su nullptr
. Tutti gli eventi di caricamento successivi verranno taggati 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.