Funktionen zur Aufzeichnung der Ladezeit hinzufügen

Es ist aus zwei Gründen wichtig, die Ladeereignisse Ihres Spiels aufzuzeichnen:

  1. Um eine Verschmutzung Ihrer Frame Time-Daten beim Laden zu vermeiden.
  2. Um Ladezeiten zu analysieren, um zu ermitteln, wann und wo Ladezeiten länger sind als akzeptabel.

Ein Ladeereignis kann zugehörige Metadaten haben:

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.

Ein Ladeereignis kann auch mit einer Anmerkung verknüpft sein. Dies wird in den wie bei Frame Time-Anmerkungen, wobei ein oder mehrere Felder im Annotation verwendet werden in der Datei dev_tuningfork.proto.

TuningFork_ErrorCode TuningFork_startRecordingLoadingTime( const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation, TuningFork_LoadingEventHandle* handle);

Diese Funktion beginnt mit der Aufzeichnung eines Ladezeitereignisses, das mit dem Metadaten und Annotationen gegeben und füllt ein handle aus, das im TuningFork_stopRecordingLoadingTime().

TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);

Diese Funktion beendet die Aufzeichnung eines Ereignisses, das zuvor durch gestartet wurde. TuningFork_startRecordingLoadingTime() Die Veranstaltung wird am nächsten Leeren der Sitzung.

TuningFork_ErrorCode TuningFork_recordLoadingTime( uint64_t time_ns, const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation);

Wir empfehlen dringend, die Start- und Stopp-Funktionen direkt zu verwenden. beschrieben. Sollte dies nicht möglich sein, können Sie diese Funktion aufrufen, um eine Dauer und die zugehörigen Metadaten und Anmerkungen aufzuzeichnen.

Gruppenfunktionen werden geladen

Sie können in Ihrem Spiel mehrere Ladeereignisse für einen einzigen Ladezeitraum aufzeichnen. die für die Nutzenden sichtbar sind. Dazu zählen unter anderem das Laden von Dateien, Dekomprimierung und Shader-Kompilierung.

Es ist wichtig, Abstimmungs Fork darüber zu informieren, dass Ladeereignisse die zu einer solchen Gruppe gehören, damit sie bessere Erkenntnisse liefern kann. In eckige Klammern mit den folgenden Start- und Stopp-Funktionen verwenden.

TuningFork_ErrorCode TuningFork_startLoadingGroup( const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation, TuningFork_LoadingEventHandle* handle);

Diese Funktion startet eine Ladegruppe, die dem Metadaten und Annotationen gegeben und füllt ein handle aus, das im TuningFork_stopLoadingGroup(). Die Metadaten und Annotationen wird derzeit nicht vom Play-Backend verwendet und kann auf nullptr gesetzt werden. Alle nachfolgenden mit einer eindeutigen Gruppen-ID gekennzeichnet.

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

Diese Funktion stoppt eine Ladegruppe, die zuvor durch TuningFork_startLoadingGroup() Nachfolgende Ladeereignisse haben keinen Gruppen-ID, bis TuningFork_startLoadingGroup() noch einmal aufgerufen wird.

Abbildung 1: Beispiel für die Ladegruppe.