È importante registrare gli eventi di caricamento del gioco per due motivi:
- Per evitare di inquinare i dati della durata frame durante il caricamento.
- Per analizzare i tempi di caricamento per vedere quando e dove i tempi di caricamento sono maggiori di accettabile.
A un evento di caricamento possono essere associati 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;
I campi non pertinenti alle tue esigenze possono essere pari a zero.
Un evento di caricamento può anche essere associato a un'annotazione. Questo è definito nel
nello stesso modo delle annotazioni relative alla durata frame, usando uno o più campi in Annotation
nel file dev_tuningfork.proto
.
Questa funzione avvia la registrazione di un evento relativo al tempo di caricamento associato al
metadati e un'annotazione specifici e compila il campo handle
da utilizzare nel
Funzione TuningFork_stopRecordingLoadingTime()
.
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime(
TuningFork_LoadingEventHandle handle);
Questa funzione interrompe la registrazione di un evento avviato precedentemente da
TuningFork_startRecordingLoadingTime()
. L'evento viene caricato il giorno successivo
lavaggio sessione.
Consigliamo vivamente di utilizzare direttamente le funzioni di avvio e arresto descritti in precedenza. Se non è possibile farlo, tuttavia, è possibile richiamare 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 in un singolo periodo di caricamento. visualizzate dall'utente. Alcuni esempi includono (a titolo esemplificativo) il caricamento di file, decompression e compilation di shaker.
È importante comunicare al Tuning Fork che gli eventi di caricamento fanno parte di questo gruppo, in modo da poter fornire insight migliori. Imposta il gruppo caricare eventi con le seguenti funzioni di avvio e arresto.
Questa funzione avvia un gruppo di caricamento associato al
metadati e un'annotazione specifici e compila il campo handle
da utilizzare nel
Funzione TuningFork_stopLoadingGroup()
. I metadati e l'annotazione sono
attualmente non utilizzato dal backend di Google Play e può essere impostato su nullptr
. Tutti i successivi
eventi di caricamento verranno taggati con un ID gruppo univoco.
TuningFork_ErrorCode TuningFork_stopLoadingGroup(
TuningFork_LoadingEventHandle handle);
Questa funzione interrompe un gruppo di caricamento avviato in precedenza da
TuningFork_startLoadingGroup()
. Gli eventi di caricamento successivi non avranno un
ID gruppo fino a quando TuningFork_startLoadingGroup()
non viene richiamato di nuovo.
Figura 1. Esempio del gruppo di caricamento.