คุณควรบันทึกเมื่อเกมแสดงเหตุการณ์การโหลดด้วยเหตุผล 2 ประการต่อไปนี้
- เพื่อหลีกเลี่ยงการปนเปื้อนข้อมูลเวลาของเฟรมขณะโหลด
- วิเคราะห์เวลาในการโหลดเพื่อดูว่าเมื่อใดและที่ใดที่เวลาในการโหลดนานกว่า ที่ยอมรับได้
เหตุการณ์การโหลดอาจมีข้อมูลเมตาที่เชื่อมโยงกัน ดังนี้
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;
ฟิลด์ใดก็ตามที่ไม่เกี่ยวข้องกับความต้องการของคุณสามารถเป็น 0 ได้
เหตุการณ์การโหลดอาจมีคำอธิบายประกอบที่เชื่อมโยงด้วย ซึ่งกำหนดในลักษณะเดียวกับคำอธิบายประกอบเวลาเฟรม โดยใช้ฟิลด์อย่างน้อย 1 รายการในข้อความ Annotation
ในไฟล์ dev_tuningfork.proto
ฟังก์ชันนี้จะเริ่มบันทึกเหตุการณ์เวลาในการโหลดที่เชื่อมโยงกับ
ข้อมูลเมตาและคำอธิบายประกอบที่ระบุ และกรอก handle
เพื่อใช้ในฟังก์ชัน TuningFork_stopRecordingLoadingTime()
TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime(
TuningFork_LoadingEventHandle handle);
ฟังก์ชันนี้จะหยุดบันทึกเหตุการณ์ที่เริ่มต้นก่อนหน้านี้โดย
TuningFork_startRecordingLoadingTime()
ระบบจะอัปโหลดเหตุการณ์เมื่อล้างข้อมูลเซสชันครั้งถัดไป
เราขอแนะนำเป็นอย่างยิ่งให้ใช้ฟังก์ชันเริ่มและหยุด ที่อธิบายไว้ก่อนหน้านี้โดยตรง แต่หากทำไม่ได้ คุณสามารถเรียกใช้ฟังก์ชันนี้ เพื่อบันทึกระยะเวลาและข้อมูลเมตาและคำอธิบายประกอบที่เกี่ยวข้อง
กำลังโหลดฟังก์ชันกลุ่ม
ในเกม คุณอาจบันทึกเหตุการณ์การโหลดหลายรายการสำหรับระยะเวลาการโหลดเดียว ที่ผู้ใช้เห็น ตัวอย่างบางส่วน ได้แก่ (แต่ไม่จำกัดเพียง) การโหลดไฟล์ การคลายการบีบอัด และการคอมไพล์ Shader
คุณควรแจ้งให้ Tuning Fork ทราบว่าเหตุการณ์การโหลดเป็นส่วนหนึ่งของกลุ่มดังกล่าวเพื่อให้ Tuning Fork สามารถให้ข้อมูลเชิงลึกที่ดีขึ้นได้ ใส่วงเล็บเหตุการณ์การโหลดด้วยฟังก์ชันเริ่มต้นและหยุดต่อไปนี้เพื่อดำเนินการนี้
ฟังก์ชันนี้จะเริ่มกลุ่มการโหลดที่เชื่อมโยงกับข้อมูลเมตาและคำอธิบายประกอบที่ระบุ และจะกรอกข้อมูลใน handle
เพื่อใช้ในฟังก์ชัน TuningFork_stopLoadingGroup()
ปัจจุบันแบ็กเอนด์ของ Play ไม่ได้ใช้ข้อมูลเมตาและคำอธิบายประกอบ และสามารถตั้งค่าเป็น nullptr
ได้ เหตุการณ์การโหลดครั้งต่อๆ ไปทั้งหมด
จะได้รับการติดแท็กด้วยรหัสกลุ่มที่ไม่ซ้ำกัน
TuningFork_ErrorCode TuningFork_stopLoadingGroup(
TuningFork_LoadingEventHandle handle);
ฟังก์ชันนี้จะหยุดกลุ่มการโหลดที่เริ่มต้นก่อนหน้านี้โดย
TuningFork_startLoadingGroup()
เหตุการณ์การโหลดที่ตามมาจะไม่มีรหัสกลุ่มจนกว่าจะมีการเรียกใช้ TuningFork_startLoadingGroup()
อีกครั้ง
รูปที่ 1 ตัวอย่างกลุ่มการโหลด