เพิ่มฟังก์ชันการบันทึกเวลาที่ใช้ในการโหลด

คุณควรบันทึกเมื่อเกมแสดงการโหลดด้วยเหตุผล 2 ประการดังนี้

  1. เพื่อหลีกเลี่ยงไม่ให้ข้อมูลเวลาที่ใช้ในการแสดงผลเฟรมเกิดมลพิษระหว่างการโหลด
  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

TuningFork_ErrorCode TuningFork_startRecordingLoadingTime( const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation, TuningFork_LoadingEventHandle* handle);

ฟังก์ชันนี้จะเริ่มบันทึกเหตุการณ์เวลาที่ใช้ในการโหลดที่เชื่อมโยงกับ ข้อมูลเมตาและคำอธิบายประกอบที่กำหนด และใส่ลงใน handle เพื่อใช้ใน TuningFork_stopRecordingLoadingTime()

TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);

ฟังก์ชันนี้จะหยุดการบันทึกกิจกรรมที่เริ่มขึ้นก่อนหน้านี้โดย TuningFork_startRecordingLoadingTime() กิจกรรมได้รับการอัปโหลดในเวลา การล้างเซสชัน

TuningFork_ErrorCode TuningFork_recordLoadingTime( uint64_t time_ns, const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation);

เราขอแนะนำอย่างยิ่งให้ใช้ฟังก์ชันเริ่มและหยุดโดยตรง ที่อธิบายก่อนหน้านี้ แต่ถ้าทำไม่ได้ คุณสามารถเรียกใช้ฟังก์ชันนี้ เพื่อบันทึกระยะเวลา รวมถึงข้อมูลเมตาและคำอธิบายประกอบที่เกี่ยวข้อง

กำลังโหลดฟังก์ชันกลุ่ม

ในเกม คุณอาจบันทึกเหตุการณ์การโหลดหลายรายการในระยะเวลาการโหลด 1 ครั้ง ที่ผู้ใช้เห็น ตัวอย่างเช่น (แต่ไม่จำกัดเพียง) การโหลดไฟล์ การขยายการบีบอัด และการคอมไพล์ตัวปรับแสงเงา

คุณต้องแจ้ง Tuning Fork ว่าการโหลดเหตุการณ์ เป็นส่วนหนึ่งของกลุ่มดังกล่าวเพื่อให้สามารถให้ข้อมูลเชิงลึกที่ดีขึ้นได้ วงเล็บ การโหลดเหตุการณ์ที่มีฟังก์ชันเริ่มต้นและหยุดต่อไปนี้เพื่อดำเนินการดังกล่าว

TuningFork_ErrorCode TuningFork_startLoadingGroup( const TuningFork_LoadingTimeMetadata* eventMetadata, uint32_t eventMetadataSize, const TuningFork_CProtobufSerialization* annotation, TuningFork_LoadingEventHandle* handle);

ฟังก์ชันนี้จะเริ่มกลุ่มการโหลดที่เชื่อมโยงกับ ข้อมูลเมตาและคำอธิบายประกอบที่กำหนด และใส่ลงใน handle เพื่อใช้ใน TuningFork_stopLoadingGroup() ข้อมูลเมตาและคำอธิบายประกอบ ปัจจุบันแบ็กเอนด์ของ Play ไม่ได้ใช้งานอยู่และตั้งค่าเป็น nullptr ได้ รายการต่อๆ ไปทั้งหมด การโหลดจะติดแท็กด้วยรหัสกลุ่มสินค้าที่ไม่ซ้ำ

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

ฟังก์ชันนี้จะหยุดกลุ่มการโหลดที่ก่อนหน้านี้เริ่มขึ้นโดย TuningFork_startLoadingGroup() การโหลดครั้งต่อๆ ไปจะไม่มี รหัสกลุ่มจนกว่าจะมีการเรียกใช้ TuningFork_startLoadingGroup() อีกครั้ง

รูปที่ 1 ตัวอย่างกลุ่มการโหลด