My Unreal Engine Profiling & Tracing Launch Arguments

June 2, 2026
5 min read

A reference list of executable launch parameters for profiling Unreal Engine with Unreal Insights—covering CPU traces, Garbage Collection logging, Slate UI performance, context switches, File I/O, and world streaming.


The Base Settings

Most of these configurations share a common set of baseline parameters designed to stabilize performance and enable standard profiling markers:

  • -statnamedevents
    • Translates traditional engine stat counters (like stat game or custom cycle counters) into named event markers that appear in the Unreal Insights timeline.
  • -NoVerifyGC
    • Disables heavy garbage collection validation checks. This avoids massive frame spikes that would otherwise pollute profiling captures.
  • -DPCvars="gc.VerifyAssumptionsOnFullPurge=0"
    • Directly overrides the Device Profile Config (DPC) variable to disable verifying GC assumptions during a full purge, further speeding up GC behavior during profiling.

1. CPU Tracing

For basic CPU profiling, use this layout to capture the default engine events along with detailed task graph scheduling.

-trace=default,task -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0"
  • -trace=default,task
    • Enables the standard performance counters (default) and tracks task execution across the Engine’s Thread Pool (task).

2. CPU Tracing with In-Game Graphs

If you need visual feedback on performance spikes in real-time while recording a trace, this variation displays the unit graph and FPS counters on screen.

-trace=default,task -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0" -ExecCmds="stat unitgraph, stat fps"
  • -ExecCmds="stat unitgraph, stat fps"
    • Executes these console commands immediately on launch so that the scrolling timeline and framerate graphs are visible as you test.

3. Garbage Collection Profiling

Garbage collection (GC) can cause sudden, periodic frame drops. Use these arguments to output detailed GC logging alongside your performance trace to correlate hitches with GC sweeps.

-trace=default,task -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0" -ExecCmds="stat unitgraph, stat fps" -LogCmds="LogGarbage Verbose"
  • -LogCmds="LogGarbage Verbose"
    • Sets the garbage collection logger to Verbose level, printing detailed reports of every object collected, sweep duration, and purge cycle to the log.

4. Profiling Without Ensures

An ensure or ensureAlways statement that fails will capture a callstack, which can stall the game thread for several milliseconds. To make sure developer-facing ensures don’t artificially skew your profiling data, use this configuration to ignore them.

-trace=default,task -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0" -ExecCmds="stat unitgraph, stat fps" -HandleEnsurePercent=0
  • -HandleEnsurePercent=0
    • Instructs the engine to skip capturing callstacks or executing error-handling routines for ensures, treating them as simple pass-through statements.

5. Combined CPU, GC, & Ensure-disabled Profiling

For a comprehensive profiling configuration that tracks CPU and task graphs, outputs verbose Garbage Collection logging, displays in-game statistics, disables heavy GC verification, and ignores ensures, combine all parameters:

-trace=default,task,counters -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0" -ExecCmds="stat unitgraph, stat fps" -LogCmds="LogGarbage verbose" -HandleEnsurePercent=0

6. Context Switch & Thread Scheduling

If you are investigating thread contention, core scheduling, or suspect that threads are blocking each other, you need to capture thread context switches at the OS level.

-trace=taskgraph,contextswitch -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0"
  • -trace=taskgraph,contextswitch
    • Captures high-frequency scheduling events, letting you visualize when and why threads are being swapped out on CPU cores.
  • Context Switch Administrator Requirement:
    • The context switch channel lets you see when a thread is not getting CPU cycles. To capture context switches on Windows you must run the UE application as administrator. Otherwise, leave the contextswitch channel disabled to prevent log spam.

7. File I/O & Loading Times

When profiling level transition hiccups, asset loading, or initial startup bottlenecks, use these trace channels to monitor disk activity and serialization.

-trace=cpu,file,assetloadtime,loadtimes,iostore,contextswitch -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0"
  • -trace=cpu,file,assetloadtime,loadtimes,iostore,contextswitch
    • Enables detailed tracking of:
      • cpu: Main CPU thread timelines.
      • file: Standard file read/write calls.
      • assetloadtime: High-level asset loading metrics.
      • loadtimes: Detailed package serialization and loading stages.
      • iostore: Zen/I/O Store requests for packaged builds.
      • contextswitch: Context switching to see load-thread wakeups.

8. Slate UI Profiling

To profile UI performance and analyze widget tick, layout, and paint evaluation timelines in Unreal Insights, pass the slate trace channel to the -trace argument.

-trace=default,task,slate -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0"
  • slate Trace Channel (-trace=...,slate)
    • Enables the slate trace channel to record UI widget timing, layout, tick, and paint event timelines in Unreal Insights.
  • WITH_VERY_VERBOSE_SLATE_STATS Macro
    • To record complete, granular per-widget telemetry and detailed Slate hierarchy breakdowns in Insights, compile the engine or project with the WITH_VERY_VERBOSE_SLATE_STATS preprocessor macro enabled (#define WITH_VERY_VERBOSE_SLATE_STATS 1).

9. World Streaming & World Partition Profiling

When diagnosing streaming hitches, level streaming stalls, or World Partition cell loading/unloading bottlenecks, you need simultaneous visibility across disk I/O, asset serialization, async worker tasks, physics lock contention, and thread scheduling.

-trace=default,counter,stats,file,loadtime,assetloadtime,task,chaoslocks,contextswitch -statnamedevents -NoVerifyGC -DPCvars="gc.VerifyAssumptionsOnFullPurge=0"
  • -trace=default,counter,stats,file,loadtime,assetloadtime,task,chaoslocks,contextswitch
    • Enables telemetry across the core world streaming pipelines:
      • default: Standard baseline engine timeline events (CPU frames, bookmarks).
      • counter: Tracks numeric metrics and telemetry values over time (e.g., streaming pool budgets, resident cell counts).
      • stats: Emits STAT system stats and cycle counters into the trace.
      • file: Low-level file system activity (file opens, async reads, seeks).
      • loadtime: Package loading, serialization stages, and linker phases.
      • assetloadtime: High-level asset instantiation and registration timing.
      • task: Task Graph and Task System execution across worker threads.
      • chaoslocks: Chaos physics lock contention, scene sync points, and mutex wait times when generating collision for newly streamed actors/cells.
      • contextswitch: OS-level thread scheduling to spot core migration, thread preemption, or streaming worker starvation.
  • -statnamedevents
    • Converts cycle counters and stat scopes into named event markers on the Unreal Insights timeline, ensuring you can clearly correlate custom streaming scopes and subsystem events alongside disk and task activity.
  • Context Switch Administrator Requirement:
    • The context switch channel lets you see when a thread is not getting CPU cycles. To capture context switches on Windows you must run the UE application as administrator. Otherwise, leave the contextswitch channel disabled to prevent log spam.