Menambahkan fungsi perekaman waktu pemuatan

Penting untuk merekam saat game Anda melakukan pemuatan karena dua alasan:

  1. Untuk menghindari pencemaran data waktu render frame saat memuat.
  2. Untuk menganalisis waktu pemuatan guna mengetahui saat dan tempat waktu pemuatan lebih lama dari yang dapat diterima.

Peristiwa pemuatan dapat memiliki metadata terkait:

public class LoadingTimeMetadata
{
    public enum LoadingState
    {
        Unknown = 0,

        /// <summary>
        ///     The first time the game is run.
        /// </summary>
        FirstRun = 1,

        /// <summary>
        ///     App is not backgrounded.
        /// </summary>
        ColdStart = 2,

        /// <summary>
        ///     App is backgrounded.
        /// </summary>
        WarmStart = 3,

        /// <summary>
        ///     App is backgrounded, least work needed.
        /// </summary>
        HotStart = 4,

        /// <summary>
        ///     Asset loading between levels.
        /// </summary>
        InterLevel = 5
    }

    public LoadingState state;

    public enum LoadingSource
    {
        UnknownSource = 0,

        /// <summary>
        ///     Uncompressing data.
        /// </summary>
        Memory = 1,

        /// <summary>
        ///     Reading assets from APK bundle.
        /// </summary>
        Apk = 2,

        /// <summary>
        ///     Reading assets from device storage.
        /// </summary>
        DeviceStorage = 3,

        /// <summary>
        ///     Reading assets from external storage, e.g. SD card.
        /// </summary>
        ExternalStorage = 4,

        /// <summary>
        ///     Loading assets from the network.
        /// </summary>
        Network = 5,

        /// <summary>
        ///     Shader compilation.
        /// </summary>
        ShaderCompilation = 6,

        /// <summary>
        ///     Time spent between process starting and onCreate.
        /// </summary>
        PreActivity = 7,

        /// <summary>
        ///     Total time spent between process starting and first render frame.
        /// </summary>
        FirstTouchToFirstFrame = 8,

        /// <summary>
        ///     Time from start to end of a group of events.
        /// </summary>
        TotalUserWaitForGroup = 9
    }

    public LoadingSource source;

    /// <summary>
    ///     0 = no compression, 100 = max compression
    /// </summary>
    public int compression_level;

    public enum NetworkConnectivity
    {
        Unknown = 0,
        Wifi = 1,
        CellularNetwork = 2
    }

    public NetworkConnectivity network_connectivity;

    /// <summary>
    ///     Bandwidth in bits per second.
    /// </summary>
    public ulong network_transfer_speed_bps;

    /// <summary>
    ///     Latency in nanoseconds.
    /// </summary>
    public ulong network_latency_ns;
}

Setiap kolom yang tidak relevan dengan kebutuhan Anda dapat bernilai nol.

Peristiwa pemuatan juga dapat memiliki anotasi terkait. Anda dapat menentukan dengan cara yang sama seperti anotasi waktu render frame, dengan menggunakan satu atau beberapa kolom dalam pesan Annotation.

Result<ulong> StartRecordingLoadingTime(LoadingTimeMetadata eventMetadata, TAnnotation annotation);

Fungsi ini mulai merekam peristiwa waktu pemuatan yang terkait dengan metadata dan anotasi yang ditentukan, dan mengisi Result<ulong>.value untuk digunakan dalam fungsi StopRecordingLoadingTime().

ErrorCode StopRecordingLoadingTime(ulong handle);

Fungsi ini berhenti merekam peristiwa yang sebelumnya dimulai oleh StartRecordingLoadingTime(). Peristiwa diupload pada flush sesi berikutnya.

Fungsi grup pemuatan

Di game, Anda dapat merekam beberapa peristiwa pemuatan untuk satu periode pemuatan yang dilihat oleh pengguna. Beberapa contohnya antara lain pemuatan file, dekompresi, dan kompilasi shader.

Penting untuk memberi tahu Android Performance Tuner bahwa peristiwa pemuatan adalah bagian dari grup tersebut agar dapat memberikan insight yang lebih baik. Kumpulkan peristiwa pemuatan dengan fungsi mulai dan berhenti berikut untuk melakukannya.

Result<ulong> StartLoadingGroup(LoadingTimeMetadata eventMetadata, TAnnotation annotation);

Fungsi ini memulai grup pemuatan yang terkait dengan metadata dan anotasi yang ditentukan, dan mengisi Result<ulong>.value untuk digunakan dalam fungsi StopLoadingGroup(). Metadata dan anotasi saat ini tidak digunakan oleh backend Play dan dapat ditetapkan ke null. Semua peristiwa pemuatan berikutnya diberi tag oleh ID grup unik.

ErrorCode StopLoadingGroup(ulong handle);

Fungsi ini menghentikan grup pemuatan yang sebelumnya dimulai oleh StartLoadingGroup(). Peristiwa pemuatan berikutnya tidak akan memiliki ID grup hingga StartLoadingGroup() dipanggil lagi.