I just pushed a new GeDoSaTo update. Among some smaller stuff, it also includes two significant changes:
- Fixes to the Borderless Windowed mode forcing behaviour, which should greatly increase compatibility of that setting (and hopefully not break it in anything it already worked with!).
- A new “performance tracing” feature which I used in an upcoming article for PC Gamer, and which I’ll describe a bit more below.
Performance tracing allows you to record the performance of a segment of gameplay to a file. There is a keybinding for it ( togglePerfTrace) which you can configure like any other keybinding (now including modifier keys!), and after recording a sequence it will output a file such as this:
Total frames: 5746
Total time: 98983.3
Average FPS: 58.0502
99 % frame time: 33.2997
95 % frame time: 18.1123
75 % frame time: 17.1606
Individual frames (cpu;gpu;effective):
15.5634, 16.5830, 16.8934
15.5646, 16.5769, 17.0231
15.5679, 16.5769, 16.0134
15.5651, 16.5843, 17.1355
15.5617, 16.5843, 16.9346
15.5630, 16.5791, 15.8948
15.5604, 16.5791, 17.1175
15.5643, 16.5737, 16.9163
15.5630, 16.5737, 16.3157
The first 3 lines give general information, including the total frames measured, total duration in milliseconds and average FPS over that duration. The following 3 lines give 99, 95 and 75 percentile effective frame times. These give you a quick idea of the overall smoothness of a game.
Finally, the rest of the file is a CSV (comma-separated value) recording of each frame’s times. The individual measurements are (i) CPU time from the start of the frame to the present call, (ii) GPU time according to D3D API measurements, and (iii) effective frame time from one present call to the next. You can use this detailed data to do analysis or generate graphs in your favourite statistics tool, like e.g. this one representing frame time distribution:
I realize that tools doing something very similar already exist, but they may not report all the information, or not be open source, or not be compatible with GeDoSaTo, so I integrated the functionality.
Dark Souls update / DSfix compatibility
The Dark Souls Steamworks migration update is now live. As I expected, most DSfix functionality I implemented (which is based on API call interception) remains operational, but the framerate unlocking (based on binary hooks) does not work with the new version. This part was implemented by Nwks, so we should hope that he is still around and interested in updating it for the latest version. If not, I can try, but it lies outside my expertise and could potentially take a lot of time (which I’d rather spend on other projects). Of course, there’s also the chance for anyone else to step in, as all the code is available on github.
For now, you can use DSfix with the new version as long as you disable the framerate unlocking feature in the .ini file.