Es ist aus zwei Gründen wichtig, zu erfassen, wann in Ihrem Spiel Ladeereignisse ausgeführt werden:
- Damit deine Frame Time-Daten während des Ladevorgangs nicht verschmutzt werden.
- Analysieren der Ladezeiten, um zu sehen, wann und wo sie länger als akzeptabel sind
Einem Ladeereignis können zugehörige Metadaten zugeordnet sein:
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;
Alle Felder, die für Ihre Anforderungen nicht relevant sind, können null sein.
Einem Ladeereignis kann auch eine Annotation zugeordnet sein. Dies wird auf die gleiche Weise wie Frame Time-Annotationen definiert, indem ein oder mehrere Felder in der Annotation
-Nachricht in der Datei dev_tuningfork.proto
verwendet werden.
Diese Funktion beginnt mit der Aufzeichnung eines Ladezeitereignisses, das mit den angegebenen Metadaten und der Annotation verknüpft ist, und fügt eine handle
ein, die in der Funktion TuningFork_stopRecordingLoadingTime()
verwendet werden soll.
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime(
TuningFork_LoadingEventHandle handle);
Diese Funktion beendet die Aufzeichnung eines Ereignisses, das zuvor von TuningFork_startRecordingLoadingTime()
gestartet wurde. Das Ereignis wird bei der nächsten Leerung der Sitzung hochgeladen.
Es wird dringend empfohlen, die oben beschriebenen Start- und Stoppfunktionen direkt zu verwenden. Wenn dies nicht möglich ist, können Sie die Funktion aufrufen, um eine Dauer und die zugehörigen Metadaten und Annotationen aufzuzeichnen.
Gruppenfunktionen werden geladen
In Ihrem Spiel können Sie mehrere Ladeereignisse für einen einzelnen Ladezeitraum aufzeichnen, die der Nutzer sieht. Dazu gehören unter anderem das Laden von Dateien, die Dekomprimierung und die Shader-Kompilierung.
Es ist wichtig, Abstimmung Fork darüber zu informieren, dass Ladeereignisse Teil einer solchen Gruppe sind, damit sie bessere Einblicke liefern kann. Fügen Sie dazu die folgenden Start- und Stoppfunktionen in Ihre Ladeereignisse ein.
Diese Funktion startet eine Ladegruppe, die mit den angegebenen Metadaten und Annotationen verknüpft ist, und füllt eine handle
aus, die in der Funktion TuningFork_stopLoadingGroup()
verwendet werden soll. Die Metadaten und die Annotation werden derzeit nicht vom Play-Back-End verwendet und können auf nullptr
gesetzt werden. Alle nachfolgenden Ladeereignisse werden mit einer eindeutigen Gruppen-ID gekennzeichnet.
TuningFork_ErrorCode TuningFork_stopLoadingGroup(
TuningFork_LoadingEventHandle handle);
Diese Funktion stoppt eine Ladegruppe, die zuvor von TuningFork_startLoadingGroup()
gestartet wurde. Nachfolgende Ladeereignisse haben erst dann eine Gruppen-ID, wenn TuningFork_startLoadingGroup()
noch einmal aufgerufen wird.
Abbildung 1: Beispiel für die Ladegruppe.