### Features
Prior to this change there are no trace channels active for any Editor process, and default channels were accessed by passing -trace or -trace=default.
This change enables default channels automatically for Editor.
#rb ionut.matasaru
#jira UE-151707
#preflight 627d6b4ba82f3adab8b0de98
#ROBOMERGE-AUTHOR: geoff.evans
#ROBOMERGE-SOURCE: CL 20394530 via CL 20394607 via CL 20394639
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v949-20362246)
[CL 20398664 by geoff evans in ue5-main branch]
As the memory tracing implementation grew and callstack tracing was extracted it became clear that alot of the code which was implemented as platform specific should really be platform independent. This changelist moves all MemoryTrace_* methods except the MemoryTrace_Initialize to a platform independent layer. This also allows for internalizing the "do-not-allocate-while-tracing-an-allocation" flag. Also took the oportunity to rename MemoryTrace.cpp in Microsoft folder to better reflect platform specific file.
#rb ionut.matasaru
#preflight 6290df2d3c05bea8bfd3ed82
#preflight 6290eb90b83292836e074fff
[CL 20394897 by Johan Berg in ue5-main branch]
- "TraceAnalysis" -- captures all mem allocated by the FAnalysisProcessor.
- "Trace/CpuProfile" -- captures allocation of per-thread buffers used by the cpu profiler trace.
#jira UE-147172 (partially)
#rb Johan.Berg
#preflight 6281fc9fd819c085e0ad0fe5
[CL 20222034 by ionut matasaru in ue5-main branch]
### Features
We can now write tailing memory to a utrace file. Snapshotting while tracing to a file or socket is supported.
This change introduces a new console command: Trace.SnapshotFile. It writes the profiling data from memory into an optionally specified a utrace file.
### Testing
Run Editor with -tracefile
Run Editor with -trace, connect live with insights
Run Editor without -trace (this does generate a very small utrace since there is memory and data in the tail even though default channels are not enabled)
#rb johan.berg
#jira UE-150302,UE-150292
#preflight 6272a3213e1f2a9d3a88ee3d
#ROBOMERGE-OWNER: geoff.evans
#ROBOMERGE-AUTHOR: geoff.evans
#ROBOMERGE-SOURCE: CL 20124258 via CL 20125717 via CL 20126082
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)
[CL 20129506 by geoff evans in ue5-main branch]
This should fix the case where performance counters are set but none of them do Begin / End CSV calls or potentially do multiple calls.
Also add logging to FCsvProfiler::EndFrame() so we can tell when ECsvCommandType::Stop is processed.
#rnx
#rb Ilya.Loshchinin
[FYI] Ben.Woodhouse, Bart.Hawthorne, Andrew.Ladenberger
#preflight 626eb998c731e279c32db6ba
#ROBOMERGE-AUTHOR: michael.sartain
#ROBOMERGE-SOURCE: CL 20041664 via CL 20042062 via CL 20042078 via CL 20042092 via CL 20042112
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)
[CL 20043206 by michael sartain in ue5-main branch]
### Features
This change enables the StallDetector watchdog in Editor to submit reports to crashreporter about threads violating instrumented deadlines in the source code. This feature was available prior on Windows, and this change adds Linux support.
### Notes
New APIs:
ReportStall()
CaptureThreadPortableCallStack()
Many APIs are updated from purely "Ensure" naming to more general naming. Stalls are more like Ensures than crashes, and so the appropriate renames to make the code readable and clear have been made. In some places Ensure is replaced with the clearer: Continuable Event nomenclature.
### Testing
I synthesized an ensure on Linux, and did the same for a stall. I then compared crash report XML file to make sure they contain accurate data in the callstack, portable callstack, and other fields in the report. I also noted that the stall information was showing as expected in the crash reporter.
#rb brandon.schaefer, francis.hurteau
#jira UETOOL-3336
#preflight 625e20d2804460ab0fea3277
[CL 19911608 by geoff evans in ue5-main branch]
First one because due to RTC in EOS not having frame pointers causing a crash when walking down the stack. Limiting callstack tracing with a scope.
The second one because of limited stack size (4k) in a Curl Helper thread, causing a crash when walking down the stack because the callstack walker was allocating 4k on the stack. Doing it inplace to allocate only 2k.
[REVIEW] [at]johan.berg
[FYI] pavel.punsky
#rnx
#ROBOMERGE-OWNER: john.huelin
#ROBOMERGE-AUTHOR: john.huelin
#ROBOMERGE-SOURCE: CL 19739450 via CL 19739526 via CL 19739543 via CL 19739742 via CL 19739765
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v938-19570697)
[CL 19741582 by john huelin in ue5-main branch]
Manual memory tracking in LLM has a feature for defining a "fallback tag" for the allocation if no tag is currently set. This change adds a new scope type which allows us to express this behaviour in memory tracing as well.
#jira UE-142692
#rb ionut.matasaru
#preflight 624ed4e9bd5b36eec338a937
[CL 19667413 by Johan Berg in ue5-main branch]
#rb johan.berg
#jira UE-145980
#ROBOMERGE-AUTHOR: robert.millar
#ROBOMERGE-SOURCE: CL 19387487 via CL 19388738 via CL 19390713 via CL 19398886 via CL 19399041
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v926-19321884)
[CL 19403777 by robert millar in ue5-main branch]
- Added a range allocator for allocating small blocks. It is enabled if 2 MB GPU page is used to reduce memory overhead. Perf is on par with FGPUMemoryPage.
- 20-run ReplayRun test data with 2 MB page and the new allocator: -0.12 ms FrameTime Avg, -0.17 ms GameThreadTime Avg, -0.43 ms RenderThreadTime Avg, -0.12 ms RHIThreadTime Avg, +0.6 DynRes % Avg, and +18 MemFreeMB Min.
- Added support for recording and replaying FMemBlock allocations. Courtesy to Ben for providing most of the code.
- Small adjustment to how MemBlockStat_Wasted is calculated. It now takes unused page space into account in addition to alignment paddings.
- 2 MB GPU page is enabled by default but can be disabled through a project define.
#rb luke.thatcher, ben.woodhouse
#ROBOMERGE-AUTHOR: jian.ru
#ROBOMERGE-SOURCE: CL 19065260 via CL 19065261 via CL 19065262 via CL 19083385 via CL 19084250 via CL 19086050
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19124776 by jian ru in ue5-main branch]
Adds a define UE_FNAME_OUTLINE_NUMBER.
Removes of FName, FMinimalName from memory image support. Adds of FMemoryImageName.
Removal of FMinimalName operator<<, all fields made private, size made variable.
All fields of FScriptName made private.
Added console commands for dumping numbered/unnumbered names and stats.
#rb johan.torp
#ROBOMERGE-OWNER: robert.millar
#ROBOMERGE-AUTHOR: robert.millar
#ROBOMERGE-SOURCE: CL 19058026 via CL 19058611 via CL 19058656 via CL 19061727 via CL 19061740 via CL 19064047
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v918-19018356)
[CL 19066701 by robert millar in ue5-main branch]
Clear caches and update a canary value across the fork boundary to avoid touching pages that were allocated pre-fork to minimize unnecessary duplication of shared pages.
Savings depend on pre-fork fragmentation/slack and number of concurrent child processes.
#rb louisphilippe.seguin, johan.torp, arciel.rekman
#ROBOMERGE-OWNER: robert.millar
#ROBOMERGE-AUTHOR: robert.millar
#ROBOMERGE-SOURCE: CL 19057122 via CL 19057644 via CL 19057693 via CL 19057718 via CL 19057737 via CL 19059617
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v918-19018356)
[CL 19066314 by robert millar in ue5-main branch]