The Timing Insights window is where you can find per-frame performance data for different tracks, including the CPU and GPU tracks. The Timing view has a new toolbar, splitting the Tracks drop-down menu into multiple menus where you can look at different visualizations of the time your project spends on various tasks.
Timing Insights Main Toolbar
The toolbar provides the capability to select blocks of time to view in groups, sort, or categorize data, and review log output.
You can toggle the visibility to display data for that frame in the Timing, Timers, Callers, Callees, Counters, and Log tracks by clicking on each respective track.
You can select blocks of time to view in aggregate, show or hide the respective panels. sort or categorize data, and review log output. To do this, click on a single frame in the Frames panel, or click and drag a section of the scrub bar at the top of the Timing panel, known as the Time Ruler.
Frames
The Frames panel displays the total time taken by each frame using a bar graph format. This is useful for identifying general trends, such as low performance or framerate drops when a level is loaded, an unoptimized scene is visible, or spawning a large number of Actors simultaneously.
Hovering the cursor over a bar causes that frame's index and running time to appear.
If you right-click on on the bar, the following Zoom context menu options will appear:
Option | Description |
---|---|
Auto Zoom | Toggles auto zoom, which fits the entire session time range into the frames display window. |
Zoom Timing View on Frame Selection | Toggles whether the timing view is zoomed when a frame is selected. |
These options are also available to edit in the UnrealInsightsSettings.ini
file.
Timing
You can show or hide each track individually by clicking the arrow next to it.
All Tracks
Clicking the All Tracks dropdown arrow displays a list of all available tracks.
CPU/GPU
Clicking the CPU/GPU dropdown arrow displays the CPU and GPU tracks and thread group options.
Other
Clicking the Other dropdown arrow displays options for visibility of the Main Graph, File Activity, Asset Loading, and Frames Tracks.
Plugins
Clicking the Plugins dropdown arrow displays Tracks and options that are exposed by plugins, including information about Slate, Gameplay, Animation, and RDG Tracks.
View Mode
The View Mode dropdown arrow displays controls for various options for the Timing View.
Timing View Option | Description |
---|---|
Compact Mode (key shortcut: C) | Toggles compact mode which displays the timing tracks with reduced height supporting tracks. |
Auto Hide Empty Tracks (key shortcut: V) | Auto-hides empty tracks without timing events. This option is persistent to the UnrealInsightsSettings.ini file. |
Depth Limit (key shortcut: X) * Unlimited / 4 Lanes / Single Lane | Toggles the display of different CPU depth options. The X key can be used as a shortcut to cycle through the different CPU depth options. |
Coloring Mode (CPU Thread tracks) | You can assign a color to CPU / GPU timing events based on their duration (inclusive time). The color key is as follows:
|
Allow Panning on Screen Edges | When enabled, panning continues when the mouse cursor reaches the edges of the screen. |
Quick Find Widget
The Quick Find widget is used to search and filter events displayed in the Timing view. The widget can be opened from the Timing view context menu by right-clicking on a Timing event or by using the CTRL + F shortcut when the Timing view has focus.
The Quick Find widget search logic is defined using Groups and Filters. Group nodes contain child Filter nodes and define the logic applied to the children's result. Filter nodes are leaf nodes and contain a filter each.
Each filter contains:
-
The filter type, that can be selected from a drop down menu.
-
The filter operator, also selectable using a drop down menu.
-
The filter value, that can be entered using a text box.
Once the filter logic is created, it can be used to search for events or filter the tracks from the Timing View.
Filter | Description |
---|---|
Find First | Searches for the first event matching the filter in the order of the event's start time. If a match is found it is selected and the Timing view brings it into view. |
Find Previous | Searches for the previous event matching the filter starting from the current selected event's start time. If no event is selected, it acts as a Find First. |
Find Next | Searches for the next event matching the filter starting from the current selected event's start time. If no event is selected, it acts as a Find Last. |
Find Last | Searches for the last event matching the filter in the order of the event's start time. If a match is found it is selected and the Timing view brings it into view. |
Metadata | Provides a field for filtering by multiple metadata fields. See How to Use Metadata Filters below for more details. |
Apply Filter | Highlights all timing events that pass the filter logic from the tracks. |
Clear filters | Stops highlighting events based on the filter's logic. |
If you make changes to the filter's logic, you must click Apply Filter again to highlight events based on the new logic.
How to Use Metadata Filters
When you add a Metadata filter, it provides multiple fields you can fill in with metadata you want to filter for. These fields are as follows:
Index | Field | Description |
---|---|---|
1 | Key | Contains a metadata field. It must be a string value, and it must be an exact match. |
2 | DataType | The type of the metadata field you want to search for. For example, a string or a float. |
3 | Operator | The operator you want to apply to the metadata value and the value in the Value text box (see below). Available operators depend on the selected DataType. |
4 | Value | The value you want to use as the second member of the operator. The inputted value must be compatible with the selected DataType. |
As an example, you can create a metadata filter with the key "AssetPath" with String as youir type and a value containing the string "Pawn."
The second example below shows a combination of a metadata filter with other types of filters. It searches for all timer name events with the name "FRDGBufferPool_CreateBuffer" that have a metadata field with the key "SizeInBytes" of a type Int, and a value greater than 6500.
You can use the special string *
to display all events that have attached metadata, regardless of key, type, or value.
Timers
The Timers panel lists all timer events that run within the time range designated in the Timing panel. In addition to grouped data based on time range, the list can be sorted in ascending or descending order by the values in any active column.
Group Name | Description |
---|---|
Flat | Creates a single group. Includes all Timers. |
Timer Name | Creates one group for one letter. |
Timer Type | Creates one group for each timer type. |
Instance Count | Creates one group for each logarithmic range(1-10,10-100, 100-1000.) |
To change sort order, or to activate or deactivate columns, right-click on the column. The following options are available:
Sorting Option | Additional Sort Option | Description |
---|---|---|
Sort Ascending (by Timer, Group Name, Instance Count, Total exclusive, Total inclusive.) | Sorts Column by Ascending order. | |
Sort Descending (by Timer, Group Name, Instance Count, Total exclusive, Total inclusive.) | Sorts Column by Descending order. | |
Sort By: |
|
|
Column Visibility Group | Description |
---|---|
View Column | Hides or shows the following columns.
|
Show All Columns | Resets tree view to show all columns. |
Reset Columns to Min/Max/Median Preset | Resets columns to Min/Max/Median Preset. |
Reset Columns to Default | Resets columns to default. |
Asset Load Time
When starting Timing Insights from the command line the Asset Load Time channel can be used to enable named CPU timers for UObject::Serialize
and toggle tracing Blueprint names.
In the past, tracking Blueprint names was enabled by default, but this would add a lot of cost to the trace runtime event. Now, if you want to enable Blueprint name tracing, you must turn on this argument in the command line.
To enable asset load time tracking from the command line, you can use the argument
`-trace=default,AssetLoadTime`
Because there are many timers added when Blueprint names are toggled on, they are hidden in Trace Insights by default.
Enabling Blueprint Names
After enabling Asset Load Time tracking, you can display Blueprint names by adding the argument:
`-statnamedevents`.
Executing Commands Without Opening the UI
Timing Insights can be run directly from the command line without opening the UI. You can either specify a single command directly in the command line, or you can execute a series of commands by using a response file.
In each case, a set of data is exported to a .csv
or .tsv
file.
Command | Description |
---|---|
TimingInsights.ExportThreads |
Exports a list of GPU and CPU threads. |
TimingInsights.ExporTimers |
This command exports a list of GPU and CPU timers. |
TimingInsights.ExportTimingEvents |
Exports a list of GPU and CPU timing events. The list of events that is exported can be filtered by thread, timer, or by time range. |
TimingInsights.ExportTimerStatistics |
This command exports the list of GPU and CPU timers and their aggregated statistics. Exported files are limited to 100 for a single region and 10000 for the total number of .csv files exported. |
These commands can be useful for running automated tests.
Export Functionality
The Timers panel includes the capability to export your timing event data by selecting one or more timers and right-clicking on the context menu.
Timer Options Include:
Option | Description |
---|---|
Highlight Event | Highlights all timing event instances for the selected timer. |
Plot Timer | |
Find Instance | Navigates to and selects the event instance with the specified duration. This includes the following options:
|
Open Source in Visual Studio | Opens the source file of the selected message in Visual Studio. Visual Studio must already be open before using this option otherwise it may only open its Start page. |
Other Miscellaneous export options include the following:
Option | Description |
---|---|
Copy To Clipboard (CTRL+C) | Copies the selection of timers and their events to clipboard. |
Export (CTRL+S) | Exports the selected timers and their grouped statistics to a text file.
|
Export Timing Events | Exports the timing events to a text file.
If no time selection is made, the entire timeline will be exported.
|
More Export Options / Export Threads | Exports the list of timers to a text file. (.tsv or .csv ). |
More Export Options / Export Timing Events (All) | Exports all the timing events for all CPU/GPU threads to a text file ( The exported file can be massive in size, Even a small session could have several million timing events. |
Source File For CPU Timers
In the Timers panel, the source file and line number is visible in the tooltip of each timer.
Callers and Callees
The Callers and the Callees panels display a hierarchical list of task events. When you select an event from the Timing view, hovering over the information icon of an individual task will display the following information:
- Id
- Name
- Type
- Source
- Number of instances (Num Instances)
- Detailed information on the Instance count, and total Inclusive and Exclusive time.
- Average Inclusive / Exclusive Time
- Total amount of inclusive/exclusive time divided by the instance count.
- Child Instance Count
- Total number of timing event instances of the child timers (callers or callees).
Counters
The Counters panel lists all stats incremented during the same time period as the Timers panel. You can rearrange the panel by updating the sort order and column organization.
The following Groups are available:
Group Name | Description |
---|---|
Flat | Creates a single group. Includes all Counters. |
Stats Name | Creates one group for one letter. |
Meta Group Name | Creates groups based on metadata group names of counters. |
Counter Type | Creates one group for each counter type. |
Data Type | Creates one group for each data type. |
Count | Creates one group for each logarithmic range.(1-10,10-100, 100-1000) |
Windows Performance Counters
Windows performance counters appear in the Counters list when you satisfy the following prerequisites:
-perfcounters
is present on the command-line.- The
counters
trace channel is enabled.
These counters display with the prefix PC /
.
Log
The Log view displays all logs generated by calls to the macro UE_LOG from the Trace session. The logs can be filtered by verbosity and category, similar to the Output Log window in the Editor.
Selecting a time period in the Timing panel highlights all log entries that fall within that time. If you select multiple log entries, the Timing panel highlights the time range between those entries. The log panel features a search box that filters out all log messages that don't match the text you enter. In addition to filtering, clicking any row will pan the Timing panel to the time when that row's text was logged. You can save logs by selecting one or more messages and right-clicking on the context menu and selecting one of the following options from the drop down menu:
Menu Option | Description |
---|---|
Copy (CTRL+C) | Copies the selected log (with all its properties) to clipboard. |
Copy Message (SHIFT+C) | Copies the message text of the selected log to clipboard |
Copy Range (CTRL+SHIFT+C) | Copies all the logs in the selected time range (highlighted in blue) to the clipboard. |
Copy All | Copies all the logs to clipboard |
Save Range As… (CTRL+S) | Saves all the logs in the selected time range (highlighted in blue) to a text file (tab-separated values or comma-separated values). |
Save All As… | Saves all the (filtered) logs to a text file (tab-separated values or comma separated values) |
Open Source in Visual Studio | Opens the source file of the selected message in Visual Studio (or the registered IDE). Visual Studio must already be open before using this option otherwise it may only open its Start page. |