- Counters/Stats: Added support for stats counters with "ShouldClearEveryFrame" flag to actually reset to 0 at beginning of each Game frame (during analysis).
- Counters/Stats: Added separate counters for "1/frame" variants of stats counters with "ShouldClearEveryFrame" flag. Normal counters shows all intermediate points (variation within a single frame), while the new ones (that have same name but with "(1/frame)" suffix) only shows a single value per each Game thread (i.e. last value in respective frame). These new counters are more useful when investigating variation between multiple frames.
- Counters/Stats: Added "Insights/FStatsAnalyzer" LLM tag to reduce Untagged mem allocations.
#jira UE-152689
#rb Catalin.Dragoiu
#preflight 628374123f6aa88b1a72af22
[CL 20258783 by ionut matasaru in ue5-main branch]
* Adds logic to sort tags into correct hierarchy in analysis, regardless if the tag was declared as an LLMTag enum, name based tag or declared before it's parent has been declared.
* Add new class to break down memory allocs into hiearchical tags tree.
#rb ionit.matasaru
#preflight 623866cd88538cd45ec5ccc1
[CL 19450624 by Johan Berg in ue5-main branch]
- Added "Discovered" status for symbol resolving of a module.
- Fixed deadlock for analysis thread when session completes. This bug also didn't allowed Insights app to terminate when closed. The bug occurs for relatively short mem trace sessions when the session analysis completes before callstack resolving fully loads all modules.
- Fixed issue where number of Discovered symbols for a module was lower than Resolved + Failed. Note: This issue might still occur when a module is reloaded, but should not occur anymore for normal callstack resolving.
#rb Johan.Berg
#preflight 62288cd031133a23da76cf94
[CL 19320366 by ionut matasaru in ue5-main branch]
- Improved performance of memory analysis (processing of live allocations in AllocationsProvider) with up to 50% (i.e. twice as fast). This is achived by using a better hash for TMap for long living allocations. Also switched the short living allocations to use only the linked list, with a reduced size (64 allocs).
- Delayed initialization of SystemMemory heap to when the allocations provider inits (to save memory usage when traces does not have mem alloc events).
- Added option to enable an initial "reserve" number for TMap (one used for long living allocations). Benchmarks shows further performance increase when using large reserve numbers, but mem cost becomes too high. So kept this 0 (unset) by default.
- Added error checking for very large mem traces (when total number of mem events could exceed 32 bit limit).
Benchmarks:
* analysis of a 32s session: from 17.6s to 8.3s (-53%)
* analysis of a 7min session: from 88s to 46s (-48%)
#jira UE-135890
#rb Johan.Berg
#preflight 620fab43a96c65b0d81a9566
[CL 19070177 by ionut matasaru in ue5-main branch]
- Changed CallstackId to 32 bits also for CallstacksProvider API.
- Also fixed static analysis warning (false positive).
#rb Johan.Berg
#preflight 62023f0be85c7a08bbde4499
[CL 18900490 by ionut matasaru in ue5-main branch]
- Memory Insights: Added analysis support for "free callstack" for an allocation (i.e. callstack when an allocation if freed).
- Memory Insights: Switched CallstackId to 32 bit and moved the resolving of "id to pointer" outside of mem queries. This allows us to add the second callstack id and also ids for future metadata without increasing the size of FAllocationItem struct (from AllocationProvider).
- Memory Insights: Refactored code re ThreadId and Tracker passed from AllocationAnalysis to AllocationProvider.
- Memory Insights: Refactored code re CallstackProvider to map a CallstackId directly as an index into array of callstacks.
#rb Johan.Berg
#preflight 6201460a6773a3612898c4de
[CL 18886419 by ionut matasaru in ue5-main branch]
Previously only enviroment variables paths that contained ';' very correctly parsed. And even in that case the last paths was discarded.
#rb none
#jira UE-140001
#preflight 61eec605aa3f15faa57afefe
#ROBOMERGE-AUTHOR: johan.berg
#ROBOMERGE-SOURCE: CL 18709084 in //UE5/Release-5.0/... via CL 18709097 via CL 18709326
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)
[CL 18709377 by johan berg in ue5-main branch]
Allows us to display allocations that don't have a callstack (e.g. from TraceMalloc) compared to callstack that have a callstack id, but we couldn't find the id.
#preflight 61e01fc3250b9537f7708c1d
#ROBOMERGE-AUTHOR: johan.berg
#ROBOMERGE-SOURCE: CL 18595807 in //UE5/Release-5.0/... via CL 18595813 via CL 18595822
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Test -> Main) (v899-18417669)
[CL 18596763 by johan berg in ue5-main branch]
* Implements functionality to search for symbols in a stack of search directories. Search directories can be added from configuration, environment variables or explicitly specified by user.
* Exposes module information and ability to enumerate detected modules.
* Adds functionality to attempt loading symbols for a module in a specific directory.
#rb ionut.matasaru, martins.mozeiko
#jira UE-137221
#preflight 61d56928932a02483cc346f7
#preflight 61d571e0ec35d1b940dad984
#ROBOMERGE-AUTHOR: johan.berg
#ROBOMERGE-SOURCE: CL 18517208 in //UE5/Release-5.0/... via CL 18517221
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669)
[CL 18517223 by johan berg in ue5-release-engine-test branch]