When testing game packages, QAs sometimes would let trace capture perf data for a long game session (in order to identify as many perf issues as possible), mostly with trace channels “cpu,gpu,frame,log,bookmark,screenshot,region,rhicommands,etc…” turned on. As a result, the final .utrace file could become huge and hard to transfer/process.
So, I’m wondering what would be some good strategies to reduce trace file size to make life easier for everybody? What other big games usually do in this case? What Epic devs would do to trace capture a long game session for Fortnite? Is there any work being done to auto detect perf spikes and only capture those?
Very long tracing sessions indeed capture a lot of data, making them too large to be feasible to work with. Because of that, we don’t run very long trace sessions in the first place. The automatic performance reporting we use here at Epic Games primarily utilizes the older CSV Profile.
The data it produces is way less granular than what an Insights capture can produce, but we have to balance out the length of the capture with the amount of data that is produced. We export that data into tables and graphs like these:
We resort to Unreal Insights when we need more details, in a more manual way. Instead of creating a capture that is longer than a few minutes, we either try to go straight to the problem area as identified by the graphs above and capturing that, or only manually starting / stopping, or pausing/resuming the capture in an already running game to only focus on problem areas using console commands, like trace.send/trace.file and trace.stop.
For your case, I would recommend your QA runs the game with the CSV profiler on and on-screen stats (like `stat unitgraph`), and that they run tracing console commands like `trace.file`/ `trace.pause` / `trace.resume` / `trace.stop` when the on-screen stats show that performance is dipping.