Ważne jest, aby rejestrować zdarzenia wczytywania gry z 2 powodów:
- Aby uniknąć zanieczyszczenia danych o czasie renderowania klatki podczas wczytywania.
- 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
.
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.
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.
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.