Dodaj funkcje rejestrowania czasu wczytywania

Ważne jest, aby rejestrować zdarzenia wczytywania gry z 2 powodów:

  1. Aby uniknąć zanieczyszczenia danych o czasie renderowania klatki podczas wczytywania.
  2. Aby przeanalizować czasy wczytywania i sprawdzić, kiedy i gdzie czas wczytywania jest dłuższy niż jest akceptowalna.

Zdarzenie wczytywania może mieć powiązane metadane:

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;

Wartość wszystkich pól, które nie są związane z Twoimi potrzebami, może wynosić zero.

Zdarzenie wczytywania może też mieć powiązaną adnotację. Jest to zdefiniowane w tak samo jak w przypadku adnotacji o czasie renderowania klatki, używając co najmniej 1 pola w panelu Annotation w pliku dev_tuningfork.proto.

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

Ta funkcja rozpoczyna rejestrowanie zdarzenia wczytywania powiązanego z parametrem danych i adnotacji oraz wypełnia pole handle, które ma być używane TuningFork_stopRecordingLoadingTime().

TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);

Ta funkcja zatrzymuje rejestrowanie zdarzenia, które zostało wcześniej rozpoczęte przez TuningFork_startRecordingLoadingTime() Wydarzenie zostanie przesłane o usuwanie sesji.

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

Zdecydowanie zalecamy bezpośrednie korzystanie z funkcji uruchamiania i zatrzymywania opisane powyżej. Jeśli jednak to niemożliwe, możesz wywołać tę funkcję do rejestrowania czasu trwania oraz powiązanych z nimi metadanych i adnotacji.

Wczytuję funkcje grupy

W jednym okresie wczytywania w grze możesz zarejestrować kilka zdarzeń wczytywania widoczne dla użytkownika. To na przykład wczytywanie plików, dekompresji i kompilacji cieni.

Ważne jest, aby poinformować Tuning Fork, że zdarzenia wczytywania należą do takiej grupy, aby uzyskać lepsze informacje. Dodaj słowa kluczowe wczytanie zdarzeń z podanymi niżej funkcjami uruchamiania i zatrzymywania.

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

Ta funkcja uruchamia grupę wczytywania powiązaną z parametrem danych i adnotacji oraz wypełnia pole handle, które ma być używane TuningFork_stopLoadingGroup(). Metadane i adnotacje są obecnie nie jest używana przez backend Google Play. Można go ustawić na nullptr. Wszystkie kolejne zdarzenia wczytywania zostaną otagowane unikalnym identyfikatorem grupy.

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

Ta funkcja zatrzymuje grupę wczytywania, która została uruchomiona wcześniej przez TuningFork_startLoadingGroup() Kolejne zdarzenia wczytywania nie będą miały parametru identyfikator grupy do TuningFork_startLoadingGroup().

Rysunek 1. Przykład grupy wczytywanej.