記錄遊戲何時執行載入事件很重要,原因有二:
- 避免在載入過程中汙染影格時間資料。
- 分析載入時間,找出載入時間超出可接受範圍的時間和位置。
載入事件可以有關聯的中繼資料:
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;
凡是與需求無關的欄位都可以是零。
載入事件也可以有關聯的註解。該定義位於
與影格時間註解相同 (在 Annotation
中使用一或多個欄位)
訊息,dev_tuningfork.proto
。
這個函式會開始記錄與
並填入 handle
,以便在
TuningFork_stopRecordingLoadingTime()
函式。
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime(
TuningFork_LoadingEventHandle handle);
這個函式會停止記錄先前由 TuningFork_startRecordingLoadingTime()
啟動的事件。系統會在下一次
執行清除作業
我們強烈建議您直接使用開始和停止函式 範例說明不過,要是無法這麼做,您可以呼叫此函式 ,錄製時間長度及其相關聯的中繼資料和註解。
載入群組函式
在遊戲中,您可以針對使用者看到的單一載入期間記錄多個載入事件。例如 (但不限於) 檔案載入、 解壓縮和著色器編譯
請務必告知 Tuning Fork 會載入事件 這些成員都能透過這類管道,提供更深入的分析資訊。加入 載入事件時使用以下開始和停止函式進行。
這個函式會啟動與
並填入 handle
,以便在
TuningFork_stopLoadingGroup()
函式。中繼資料和註解是
目前未用於 Play 後端,可以設為 nullptr
。所有其他後續動作
載入事件會以唯一的群組 ID 標記。
TuningFork_ErrorCode TuningFork_stopLoadingGroup(
TuningFork_LoadingEventHandle handle);
這個函式會停止先前啟動的載入群組
TuningFork_startLoadingGroup()
。後續的載入事件不會有
群組 ID,直到再次呼叫 TuningFork_startLoadingGroup()
為止。
圖 1. 載入群組的範例。