Part of the fun of building and upgrading a PC is seeing just how fast games can run. But in a world where developers and games are moving to the DirectX 12 and Vulkan renderers, there's a small problem — traditional benchmarking tools don't work.
And while some games, such as Rise of the Tomb Raider and HITMAN, come with their own in-built benchmarks, they're not the same as monitoring moment-to-moment gameplay. And if you want a way to reliably record how well your PC copes with games using DX12 or Vulkan, here's how you do it.
One of the most popular consumer-level tools for measuring frame rates is FRAPS, but if you try to use it in any game running DX12 or Vulkan you'll find the overlay doesn't initialise — and as a result, you won't be able to track your performance.
Fortunately there's a home-grown program called PresentMon that you can use to track a game's performance. The problem with PresentMon, however, is that it's a program that runs from the Windows command prompt.
Downloading and Running PresentMon
But before you can even think about measuring your FPS, you'll need the program. PresentMon's available for free at Github. It's a miniscule program — only a few hundred kilobytes — but that comes with one major drawback: there's no UI.
Yup, that's right: PresentMon is a program that you have to run through the command prompt. The bright side is that it's capable of monitoring DX12, Vulkan and even Universal Windows Apps, as well as anything running DX10 and DX11. Pretty versatile.
But to get PresentMon to run properly, you'll need to run command prompt as an Administrator. One easy way to do this is to simply press the Windows Key and X, and then select "Command Prompt (Admin)" from the menu that appears above the start icon. Alternatively, type "cmd" into the Start menu, and then press CTRL + SHIFT + Enter to launch command prompt with elevated privileges.
Navigate to the folder with the PresentMon64 executable. (If you don't know basic DOS commands, here's a list — CD and DIR are the two you need to know most.) Type in PresentMon64, and you'll get a breakdown of the parameters you can set.
If the screenshot isn't readable enough, here's the options you can set:
-captureall: record ALL processes (default). -process_name [exe name]: record specific process. -process_id [integer]: record specific process ID. -output_file [path]: override the default output path. -etl_file [path]: consume events from an ETL file instead of real-time. -delay [seconds]: wait before starting to consume events. -timed [seconds]: stop listening and exit after a set amount of time. -no_csv: do not create any output file. -exclude_dropped: exclude dropped presents from the csv output. -scroll_toggle: only record events while scroll lock is enabled. -simple: disable advanced tracking. try this if you encounter crashes.
The main ones you'll want are process_name, output_file, scroll_toggle and timed. The process name is basically the name of the game's executable, and you can get that from Task Manager (accessible through the CTRL + SHIFT + ESC or CTRL + ALT + DEL shortcuts). Here's the process name for Total War: Warhammer, as an example. If you don't want to do that, you can also just grab the process ID for the game and monitor that through the -process_id command.
To capture Warhammer, this is what I have to type into the command line:
The reason for using the -scroll_toggle option is so you can start the benchmark when gameplay begins, rather than benchmarking performance during the menu screen, loading screens, and other segments that don't matter.
After hitting the Scroll Lock key on the keyboard, you'll see this:
There's some handy information in there, but the most immediately useful — and understandable — information is the standard frames per second (fps) figure and the milliseconds per frame. The latter is basically how long it takes for each frame to be rendered (otherwise called the frame time), and it's handy for detecting how smooth your gaming experience truly is.
Now while that's not the most technical explanation, what most gamers will care about is the raw fps. In the command prompt screenshot above, I deliberately typed "warhammerbenchmark.csv" as the output file. What that does is create a file that outputs all of the information PresentMon recorded over 120 seconds (the time specified with the -timed option), which can then be used to calculate how well a machine is performing.
Something that's really important to note is how the timed option behaves. The timer begins as soon as PresentMon opens up, and it doesn't matter whether you're using the scroll_toggle option or not. So if you are using scroll_toggle, and you want to make sure you're only benchmarking real gameplay and not, say, the menu screen, make sure to give yourself enough time to ALT + TAB back to the game, transitioning in and out of pause screens, and so on.
I find 2 minutes is usually a good amount of time for a single benchmark (to be repeated at least three times). If you set -timed 150, you'll usually be sweet.
The CSV will be created in the same folder where PresentMon resides, and it looks like this:
That's, uh, a lot of columns.
Good thing is: you don't really need to pay attention to most of them. If you just want to calculate the fps, all you need to do is add up all the numbers in the MsBetweenPresents column and divide it by 1000.
Here's a quick test I ran with DOOM this morning under the Vulkan renderer:
You can see there the average FPS for the run was around 130fps, which correlates with the live figure I could see PresentMon reporting on my second screen. If you don't have a second screen, you won't be able to see that. But then anyone using a PC should have at least two screens anyway — it makes life so much better.
The figure's interesting, since it mirrors what I got with the GTX 1080 under Vulkan. It's also slightly higher than what I noticed when I tested the GTX 1070 at Computex earlier this year, back when DOOM only had the OpenGL 4.5 renderer.
But that's why it's important to run multiple tests the same way as much as you can — at least in instances where the game doesn't ship with an in-built, controlled benchmark.
Either way, you can now follow this same process to get an idea of how your setup handles various games. Try it for yourself and let us know in the comments how your machine fares!