লোডিং সময় রেকর্ডিং ফাংশন যোগ করুন

যখন আপনার গেম দুটি কারণে লোডিং ইভেন্টগুলি সম্পাদন করে তখন রেকর্ড করা গুরুত্বপূর্ণ:

  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;

আপনার প্রয়োজনের সাথে প্রাসঙ্গিক নয় এমন যেকোনো ক্ষেত্র শূন্য হতে পারে।

একটি লোডিং ইভেন্টের একটি সম্পর্কিত টীকাও থাকতে পারে। এটি dev_tuningfork.proto ফাইলে Annotation বার্তার এক বা একাধিক ক্ষেত্র ব্যবহার করে ফ্রেম টাইম টীকাগুলির মতোই সংজ্ঞায়িত করা হয়েছে৷

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

এই ফাংশনটি প্রদত্ত মেটাডেটা এবং টীকা সম্পর্কিত একটি লোডিং টাইম ইভেন্ট রেকর্ড করা শুরু করে এবং TuningFork_stopRecordingLoadingTime() ফাংশনে ব্যবহার করার জন্য একটি handle পূরণ করে।

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);

আমরা দৃঢ়ভাবে পূর্বে বর্ণিত স্টার্ট এবং স্টপ ফাংশনগুলি সরাসরি ব্যবহার করার পরামর্শ দিই। আপনি যদি এটি করতে না পারেন তবে, আপনি একটি সময়কাল এবং এর সাথে সম্পর্কিত মেটাডেটা এবং টীকা রেকর্ড করতে এই ফাংশনটিকে কল করতে পারেন।

গ্রুপ ফাংশন লোড হচ্ছে

আপনার গেমে, আপনি ব্যবহারকারীর দ্বারা দেখা একটি একক লোডিং সময়ের জন্য বেশ কয়েকটি লোডিং ইভেন্ট রেকর্ড করতে পারেন। কিছু উদাহরণের মধ্যে ফাইল লোডিং, ডিকম্প্রেশন এবং শেডার সংকলন অন্তর্ভুক্ত (কিন্তু এতে সীমাবদ্ধ নয়)।

টিউনিং ফর্ককে জানানো গুরুত্বপূর্ণ যে লোডিং ইভেন্টগুলি এমন একটি গ্রুপের অংশ যাতে এটি আরও ভাল অন্তর্দৃষ্টি প্রদান করতে পারে। এটি করার জন্য নিম্নলিখিত স্টার্ট এবং স্টপ ফাংশনগুলির সাথে আপনার লোডিং ইভেন্টগুলি বন্ধনী করুন৷

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

এই ফাংশনটি প্রদত্ত মেটাডেটা এবং টীকাটির সাথে যুক্ত একটি লোডিং গ্রুপ শুরু করে এবং TuningFork_stopLoadingGroup() ফাংশনে ব্যবহার করার জন্য একটি handle পূরণ করে। মেটাডেটা এবং টীকা বর্তমানে প্লে ব্যাকএন্ড ব্যবহার করে না এবং nullptr এ সেট করা যেতে পারে। সমস্ত পরবর্তী লোডিং ইভেন্টগুলি একটি অনন্য গ্রুপ আইডি দ্বারা ট্যাগ করা হবে।

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

এই ফাংশনটি TuningFork_startLoadingGroup() দ্বারা পূর্বে শুরু করা একটি লোডিং গ্রুপকে থামিয়ে দেয়। TuningFork_startLoadingGroup() আবার কল না করা পর্যন্ত পরবর্তী লোডিং ইভেন্টগুলির একটি গ্রুপ আইডি থাকবে না।

চিত্র 1. লোডিং গ্রুপের উদাহরণ।