Rejestrowanie momentów, w których gra wykonuje zdarzenia wczytywania, jest ważne z 2 powodów:
- Aby uniknąć zanieczyszczenia danych o czasie klatki podczas wczytywania.
- Analizować czasy wczytywania, aby sprawdzać, kiedy i gdzie są one dłuższe niż akceptowalne.
Z wydarzeniem ładowania mogą być 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;
Wszystkie pola, które nie są istotne, mogą mieć wartość zero.
Z wydarzeniem wczytywania może być też powiązana adnotacja. Jest to zdefiniowane w taki sam sposób jak adnotacje dotyczące czasu klatki, przy użyciu co najmniej 1 pola w wiadomości Annotation
w pliku dev_tuningfork.proto
.
Ta funkcja rozpoczyna rejestrowanie zdarzenia czasu wczytywania powiązanego z podanymi metadanymi i adnotacją oraz wypełnia wartość handle
, która będzie używana w funkcji TuningFork_stopRecordingLoadingTime()
.
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime(
TuningFork_LoadingEventHandle handle);
Ta funkcja zatrzymuje rejestrowanie zdarzenia rozpoczęte wcześniej przez funkcję TuningFork_startRecordingLoadingTime()
. Wydarzenie zostanie przesłane podczas następnego opróżniania sesji.
Zdecydowanie zalecamy bezpośrednie korzystanie z funkcji rozpoczęcia i zatrzymania opisanych wcześniej. Jeśli nie możesz tego zrobić, możesz wywołać tę funkcję, aby zarejestrować czas trwania oraz powiązane z nim metadane i adnotacje.
Wczytuję funkcje grupy
W grze możesz rejestrować kilka zdarzeń wczytywania w jednym okresie wczytywania widocznym dla użytkownika. Przykłady to m.in. wczytywanie plików, dekompresja i kompilacja shaderów.
Ważne jest, aby poinformować narzędzie Tuning Fork, że zdarzenia wczytywania należą do takiej grupy, aby mogło ono dostarczać lepsze statystyki. Aby to zrobić, umieść zdarzenia ładowania w nawiasach za pomocą tych funkcji rozpoczęcia i zatrzymania.
Ta funkcja uruchamia grupę ładowania powiązaną z podanymi metadanymi i adnotacją oraz wypełnia element handle
, który będzie używany w funkcji TuningFork_stopLoadingGroup()
. Metadane i adnotacje nie są obecnie używane przez backend Play i można je ustawić na nullptr
. Wszystkie kolejne zdarzenia ładowania będą oznaczane unikalnym identyfikatorem grupy.
TuningFork_ErrorCode TuningFork_stopLoadingGroup(
TuningFork_LoadingEventHandle handle);
Ta funkcja zatrzymuje grupę ładowania, która została wcześniej uruchomiona przez funkcję
TuningFork_startLoadingGroup()
. Kolejne zdarzenia wczytywania nie będą miały identyfikatora grupy, dopóki ponownie nie zostanie wywołana funkcja TuningFork_startLoadingGroup()
.
Rysunek 1. Przykład grupy wczytywania