记录游戏执行加载事件的时间非常重要,原因有两点:
- 避免在加载时污染您的帧时间数据。
- 分析加载时间,查看加载时间何时何地超出了可接受的范围。
加载事件可以包含相关元数据
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;
任何与您的需求无关的字段都可以设置为零。
加载事件还可以包含关联的注解。这与帧时间注解的定义方式相同,使用 dev_tuningfork.proto
文件中的 Annotation
消息中的一个或多个字段。
此函数开始记录与给定元数据和注解关联的加载时间事件,并填充一个将在 TuningFork_stopRecordingLoadingTime()
函数中使用的 handle
。
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);
此函数停止记录之前由 TuningFork_startRecordingLoadingTime()
启动的事件。该事件会在下一次会话刷新时上传。
我们强烈建议直接使用前面介绍的启动和停止函数。但是,如果您无法这样做,可以调用此函数来记录时长及其关联的元数据和注解。
加载组函数
在您的游戏中,您可能会为一个用户看到的单个加载时段记录多个加载事件。一些示例包括(但不限于)文件加载、解压缩和着色器编译。
务必告知 Tuning Fork 加载事件属于此类组,以便它提供更好的洞察。为此,请使用以下启动和停止函数将您的加载事件括起来。
此函数启动一个与给定元数据和注解关联的加载组,并填充一个将在 TuningFork_stopLoadingGroup()
函数中使用的 handle
。元数据和注解目前未由 Play 后端使用,可以设置为 nullptr
。所有后续加载事件都将使用唯一的组 ID 进行标记。
TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);
此函数停止之前由 TuningFork_startLoadingGroup()
启动的加载组。在再次调用 TuningFork_startLoadingGroup()
之前,后续加载事件将不会具有组 ID。
图 1. 加载组示例。