GameplayTestProfilingResult: {
    avgStepTimeMs: number;
    endFrame: integer;
    frameTimesBucketSize: integer;
    frameTimesMs: number[];
    jsHeapUsedMb?: number;
    maxStepTimeMs: number;
    objectCounts: {
        [objectName: string]: integer;
    };
    renderer: {
        drawCalls: number;
        geometries: number;
        textures: number;
        triangles: number;
    } | null;
    sections: {
        avgTimeMs: number;
        maxTimeMs: number;
        name: string;
    }[];
    startFrame: integer;
    worstFrames: {
        frame: integer;
        timeMs: number;
    }[];
}

A flat, JSON-safe profiling summary, also attached to the test result (result.profiles). Sections are sorted by average time descending (nested sections flattened as "parent > child"); maxTimeMs is the worst single frame of a section - spikes that averages hide. worstFrames and the timeline use the harness frame numbers: correlate a spike with the eventLog frames.

Type declaration

  • avgStepTimeMs: number
  • endFrame: integer
  • frameTimesBucketSize: integer
  • frameTimesMs: number[]

    The frame-by-frame timeline, in order. When the window is longer than 120 frames, each entry is the MAX of frameTimesBucketSize consecutive frames (spikes are preserved).

  • Optional jsHeapUsedMb?: number

    JS heap in use (Chromium only), to spot leaks across a long run.

  • maxStepTimeMs: number

    The worst single frame (total).

  • objectCounts: {
        [objectName: string]: integer;
    }

    Live instances per object at the time profiling stopped.

    • [objectName: string]: integer
  • renderer: {
        drawCalls: number;
        geometries: number;
        textures: number;
        triangles: number;
    } | null

    3D renderer counters (last rendered frame), when the game uses 3D.

  • sections: {
        avgTimeMs: number;
        maxTimeMs: number;
        name: string;
    }[]
  • startFrame: integer

    The profiled window, in harness frame numbers (like eventLog).

  • worstFrames: {
        frame: integer;
        timeMs: number;
    }[]

    The most expensive profiled frames, worst first.