* TraceMalloc should not use it's own root heap. Instead it will use a regular heap in system memory and make fake heaps (since we can't track virtual allocations for trace's own allocations).
* The first named was miscategorized as a root heap.
#rb ionut.matasaru
#ROBOMERGE-AUTHOR: johan.berg
#ROBOMERGE-SOURCE: CL 18417001 in //UE5/Release-5.0/... via CL 18417015
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v897-18405271)
[CL 18417028 by johan berg in ue5-release-engine-test branch]
* Adds special value reserved to Trace allocations
* Adds checks to avoid collisions between FName indices and ELLMTags.
#preflight 61af41ca353890ce23edcf36
#ROBOMERGE-AUTHOR: johan.berg
#ROBOMERGE-SOURCE: CL 18393722 in //UE5/Release-5.0/... via CL 18393732
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v896-18170469)
[CL 18393738 by johan berg in ue5-release-engine-test branch]
This results in output like the following:
Object NumKB MaxKB ResExcKB ResExcDedSysKB ResExcDedVidKB ResExcUnkKB
StaticMesh /Game/AncientContent/Megascans/Surfaces/Rock/SM_RockRough1.SM_RockRough1 1.31 1.33 395.50 12.75 0.00 382.75
None 12.75
None 0.79
TexcoordBuffer and TangentBuffer 66.35
PositionVertexBuffer 5.53
ColorVertexBuffer 22.12
IndexBuffer 95.99
ReversedDepthOnlyIndexBuffer 95.99
ReversedIndexBuffer 95.99
WireframeIndexBuffer 0.00
- Adding a `-verbose` flag to `obj list` which will dump each tracked named size.
- Adding additional `AddSharedSystemMemoryBytes(const FName& Tag, const SIZE_T InMemoryBytes)` function which accepts a named tag.
- Modify FStaticMeshLODResources::GetResourceSizeEx() to use the new interface.
- Modify FSkeletalMeshLODRenderData::GetResourceSizeEx() to use the new interface.
- Remove the "Shared" version of the memory tracking functions. These are not used at all across the engine. This simplifies the code and makes the output of obj list more readable.
- Move FResourceSizeEx into its own cpp file so modifying the header isn't a painful full recompile.
#rb dave.jones2
#jira none
#preflight 619bb03f88439fccfe625cba
#ROBOMERGE-AUTHOR: jason.nadro
#ROBOMERGE-SOURCE: CL 18259478 in //UE5/Release-5.0/... via CL 18259492
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)
[CL 18259504 by jason nadro in ue5-release-engine-test branch]
Add support for emitting named events from timing stats without compiling them in. This is controlled via new commandline options, which can be used in combination:
-csvNamedEvents emits named events for exclusive stats
-csvNamedEventsTiming emits named events for standard timing stats
Instrumentation overhead reduction
-Make it possible to disable CSVPROFILERTRACE_ENABLED, since this increases CSV profiler instrumentation overhead by about 15%
- Remove LLM scopes from stat functions and move into stat block allocation function. Reduces overhead slightly
#ROBOMERGE-AUTHOR: ben.woodhouse
#ROBOMERGE-SOURCE: CL 18253615 via CL 18253616 via CL 18253618 via CL 18253622 via CL 18253625 via CL 18254405 via CL 18254407
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)
[CL 18254408 by ben woodhouse in ue5-release-engine-test branch]
This represents UE4/Main @18073326, Release-5.0 @18081140 and Dev-PerfTest @18045971
[CL 18081471 by aurel cordonnier in ue5-release-engine-test branch]
This represents UE4/Main @17911760, Release-5.0 @17915875 and Dev-PerfTest @17914035
[CL 17918595 by aurel cordonnier in ue5-release-engine-test branch]
This represents UE4/Main @17774255, Release-5.0 @17791557 and Dev-PerfTest @17789485
[CL 17794212 by aurel cordonnier in ue5-release-engine-test branch]
Mistakenly removed after resolving against 17516847.
#rb none
#rnx
#ushell-cherrypick of 17707595 by Johan.Berg
#ROBOMERGE-AUTHOR: martin.ridgers
#ROBOMERGE-SOURCE: CL 17746602 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v879-17706426)
[CL 17746605 by martin ridgers in ue5-release-engine-test branch]
* Introduce the concept of heaps to memory tracing. A heap is defined a block of memory which can be used to host allocations. Heaps can be given descriptive names and belong to logical hierarchy. At the top of the hierarchy is one of 16 possible "root heaps". Currently the only two root heaps are system memory (virtual memory) and video memory (VRAM). If no root heap is specified for an allocation, system memory is assumed.
* Remove the CoreAdd/CoreRemove events and replace them with Alloc + MarkAllocAsHeap events.
* Introduce a public interface for tracing memory allocations.
* Reduce the memory footprint of allocation events by changing the "Owner" field (hash or return address) into a "CallstackId" (running unique callstack counter). Additonally introduced a AllocSystem/AllocVideo specialized event which encodes the root heap in the message type. Total size of the event went from 21 bytes to 17 bytes/18 bytes.
* Remove realloc scopes. These scopes comprised 50% of events during memory tracing, but the information can be reconstructed during analysis in the case of reallocations. The only other use case (in Level.cpp) was using the scope to maintain tag while copying from one array to another. For this use case we add a specific scope for pushing the tag of a specific pointer.
#rb ionut.matasaru
#preflight 614b0058a3310f000101cc42
#ROBOMERGE-AUTHOR: johan.berg
#ROBOMERGE-SOURCE: CL 17594699 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v871-17566257)
[CL 17594714 by johan berg in ue5-release-engine-test branch]
Implementation details:
- PS4 & PS5 uses dwarf symbol format and uses Syms symbol resolver.
- To resolve symbols the path to folder where .self file is built currently must be specified in UE_INSIGHTS_SYMBOL_PATH env variable for Insights.
- Multiple paths can be separated by ; in this variable.
- Build for PS5 does not seem to have PLATFORM_PS5 define, I used defined(__PS5__).
- PS5 runtime collects and sends callstacks, but Syms resolver does not support dwarf v5 format yet, which is used on PS5 toolchain.
#rb none
#preflight 6112ead49c7bb10001bc63fc
#ROBOMERGE-SOURCE: CL 17128247 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v855-17104924)
[CL 17128270 by martins mozeiko in ue5-release-engine-test branch]
#rnx
#ROBOMERGE-SOURCE: CL 16772413 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v836-16769935)
[CL 16772422 by martin ridgers in ue5-release-engine-test branch]
- Fixed tracing of UObject names and function names (UObject::CallFunction, FScopeCycleCounterUObject) when "stat named events" toggle is enabled (-statnamedevents, "stat NamedEvents" console command).
- Added FCpuProfilerTrace::OutputBeginDynamicEvent(const FName), in addition to existing API that receives const ANSICHAR* or const TCHAR*. It uses a separate DynamicFNameScopeNamesMap.
#rb Johan.Berg
[FYI] Jeff.Farris
#ROBOMERGE-SOURCE: CL 16657504 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v833-16641396)
[CL 16657509 by ionut matasaru in ue5-release-engine-test branch]