Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

読み込み時間記録機能を追加する

次の 2 つの理由から、ゲームがいつ読み込みを行っているかを記録することが重要です。

  1. 読み込み中のフレーム時間データの汚染を防ぐため。
  2. 読み込み時間を分析して、許容範囲を超えるタイミングと場所を確認するため。

読み込みイベントには、次のメタデータを関連付けることができます。

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

ニーズに関連のないフィールドは、ゼロにできます。

読み込みイベントには、アノテーションを関連付けることもできます。Annotation メッセージ内の 1 つ以上のフィールドを使用して、フレーム時間アノテーションと同じ方法で定義できます。

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

この関数は、指定されたメタデータとアノテーションに関連付けられた読み込み時間イベントの記録を開始し、StopRecordingLoadingTime() 関数で使用する Result<ulong>.value を入力します。

ErrorCode StopRecordingLoadingTime(ulong handle);

この関数は、StartRecordingLoadingTime() によって以前に開始されたイベントの記録を停止します。イベントは、次回のセッション フラッシュ時にアップロードされます。

グループ関数を読み込む

ゲームでは、ユーザーが確認する 1 つの読み込み期間に複数の読み込みイベントを記録することがあります。たとえば、ファイルの読み込み、解凍、シェーダーのコンパイルなどです。

読み込みイベントがこのようなグループの一部であることを Android Performance Tuner に通知して、より有用な分析情報を得られるようにすることが重要です。これを行うには、読み込みイベントを次の開始関数と停止関数で囲みます。

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

この関数は、指定されたメタデータとアノテーションに関連付けられた読み込みグループを開始し、StopLoadingGroup() 関数で使用する Result<ulong>.value を入力します。現在、メタデータとアノテーションは Play バックエンドで使用されておらず、null に設定できます。後続の読み込みイベントはすべて、一意のグループ ID でタグ付けされます。

ErrorCode StopLoadingGroup(ulong handle);

この関数は、以前に StartLoadingGroup() によって開始された読み込みグループを停止します。StartLoadingGroup() を再度呼び出すまで、後続の読み込みイベントはグループ ID を持ちません。