Yükleme süresi kaydetme işlevleri ekleme

Oyununuz iki nedenden dolayı yükleme etkinliği gerçekleştirdiğinde bunu kaydetmek önemlidir:

  1. Yükleme sırasında kare süresi verilerinizin kirletilmesini önlemek için
  2. Yükleme sürelerinin kabul edilebilir süreden uzun olduğu zamanları ve yerleri görmek için yükleme sürelerini analiz etmek.

Bir yükleme etkinliğinin ilişkili meta verileri olabilir:

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;

İhtiyaçlarınızla alakalı olmayan tüm alanlar sıfır olabilir.

Bir yükleme etkinliğinin ilişkili bir ek açıklaması da olabilir. Bu, kare süresi ek açıklamalarıyla aynı şekilde, dev_tuningfork.proto dosyasındaki Annotation mesajında bir veya daha fazla alan kullanılarak tanımlanır.

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

Bu işlev, belirli bir meta veri ve ek açıklamayla ilişkili bir yükleme süresi etkinliğini kaydetmeye başlar ve TuningFork_stopRecordingLoadingTime() işlevinde kullanılmak üzere bir handle doldurur.

TuningFork_ErrorCode TuningFork_stopRecordingLoadingTime( TuningFork_LoadingEventHandle handle);

Bu işlev, TuningFork_startRecordingLoadingTime() tarafından daha önce başlatılmış bir etkinliği kaydetmeyi durdurur. Etkinlik bir sonraki oturum sıfırda yüklenir.

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

Doğrudan daha önce açıklanan başlat ve durdur işlevlerini kullanmanızı önemle tavsiye ederiz. Ancak bunu yapamıyorsanız bir süreyi ve bununla ilişkili meta verileri ve ek açıklamayı kaydetmek için bu işlevi çağırabilirsiniz.

Grup işlevleri yükleniyor

Oyununuzda, kullanıcının gördüğü tek bir yükleme süresi için birden fazla yükleme etkinliği kaydedebilirsiniz. Dosya yükleme, sıkıştırma açma ve gölgelendirici derleme, bu işlemlere örnek olarak verilebilir (ancak örnekler bunlarla sınırlı değildir).

Daha iyi analizler sunabilmesi için Tuning Fork'a, yükleme etkinliklerinin böyle bir grubun parçası olduğunu bildirmek önemlidir. Bunu yapmak için yükleme etkinliklerini aşağıdaki başlatma ve durdurma işlevleriyle parantez içine alın.

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

Bu işlev, belirtilen meta veri ve ek açıklamayla ilişkili bir yükleme grubu başlatır ve TuningFork_stopLoadingGroup() işlevinde kullanılmak üzere bir handle doldurur. Meta veriler ve ek açıklama şu anda Play arka ucu tarafından kullanılmaz ve nullptr olarak ayarlanabilir. Sonraki tüm yükleme etkinlikleri benzersiz bir grup kimliğiyle etiketlenir.

TuningFork_ErrorCode TuningFork_stopLoadingGroup( TuningFork_LoadingEventHandle handle);

Bu işlev, daha önce TuningFork_startLoadingGroup() tarafından başlatılan bir yükleme grubunu durdurur. TuningFork_startLoadingGroup() tekrar çağrılana kadar sonraki yükleme etkinliklerinde grup kimliği olmaz.

Şekil 1. Yükleme grubu örneği.