توابع ضبط زمان بارگذاری را اضافه کنید

ضبط زمانی که بازی شما در حال انجام رویدادهای بارگذاری است به دو دلیل مهم است:

  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;

هر فیلدی که با نیازهای شما مرتبط نیست می تواند صفر باشد.

یک رویداد بارگیری همچنین می تواند یک حاشیه نویسی مرتبط داشته باشد. این به همان شیوه حاشیه نویسی زمان فریم، با استفاده از یک یا چند فیلد در پیام 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);

ما قویاً توصیه می کنیم که مستقیماً از عملکردهای شروع و توقف که قبلاً توضیح داده شد استفاده کنید. با این حال، اگر نمی توانید این کار را انجام دهید، می توانید این تابع را برای ضبط مدت زمان و فراداده و حاشیه نویسی مرتبط با آن فراخوانی کنید.

بارگیری توابع گروه

در بازی خود، ممکن است چندین رویداد بارگیری را برای یک دوره بارگیری که توسط کاربر مشاهده شده است، ضبط کنید. برخی از مثال‌ها شامل بارگذاری فایل، فشرده‌سازی و کامپایل سایه‌زن (اما محدود نمی‌شوند) هستند.

مهم است که به Tuning Fork اطلاع دهید که رویدادهای بارگذاری بخشی از چنین گروهی است تا بتواند بینش بهتری ارائه دهد. برای انجام این کار، رویدادهای بارگیری خود را با توابع شروع و توقف زیر براکت کنید.

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

این تابع یک گروه بارگیری مرتبط با فراداده و حاشیه نویسی داده شده را شروع می کند و یک handle برای استفاده در تابع TuningFork_stopLoadingGroup() پر می کند. فراداده و حاشیه نویسی در حال حاضر توسط Play Backend استفاده نمی شود و می توان آن را روی nullptr تنظیم کرد. همه رویدادهای بارگیری بعدی توسط یک شناسه گروه منحصر به فرد برچسب گذاری می شوند.

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

این تابع یک گروه بارگیری را که قبلا توسط TuningFork_startLoadingGroup() شروع شده بود متوقف می کند. رویدادهای بارگیری بعدی تا زمانی که TuningFork_startLoadingGroup() دوباره فراخوانی نشود، شناسه گروهی نخواهند داشت.

شکل 1. نمونه ای از گروه بارگیری.