We usually monitor and record the frame rates of our game using Fraps. It’s a widely used tool and a very popular one. However, the developers of Fraps weren’t able to update it for quite some time now and it doesn’t support games based on DX12, Vulkan and UWP (Universal Windows Platform). The developers announced that they will release an updated version soon that will support the latest APIs. But for now, how can we monitor and record the frame rates of our game, and test how fast (or slow) our graphics card is? Enter PressentMon. In this article I’ll show you how you can use PresentMon to monitor your game’s frame rates and the easy way of using it.
PresentMon for DX12, Vulkan and UWP Games
I don’t have much background about PresentMon neither its origins, but PCPer and TechReport previously published an article about this last March.
PresentMon uses counters from a Windows facility called Event Tracing for Windows (in a manner that Lauritzen says is similar to Microsoft’s own GPUView tool) to give us frame times for DirectX 12 apps in a comma-separated-values file.
“Present” method in Windows is what produces a frame and shows it to the user. PresentMon looks at the Windows events running through the system, takes note of when those present commands are received by the OS for any given application, and records the time between them. Because this tool runs at the OS level, it can capture Present data from all kinds of APIs including DX12, DX11, OpenGL, Vulkan and more.
Sounds great right? PresentMon sounds very versatile as it can be used in different APIs. However it’s not perfect yet. It’s not user friendly and you need to do some technical stuff to make it work and extract the data. PresentMon doesn’t have a graphic user interface and it’s a command-line based, meaning you will have to deal with the command prompt. It doesn’t also produce an overlay on the game and you will have to switch back and forth to the command prompt.
Benchmarking Doom 2016 Vulkan and OpenGL with PresentMon
With PresentMon I was able to extract some data while I was benchmarking Doom using Vulkan as API. Below are the results:
I benchmarked Doom 2016 using Zotac’s GTX 1070 AMP Extreme Edition. For comparison, I have also included the average frame rates I got with Fraps while benchmarking it on OpenGL. As you can see from the graph, the results I got using Fraps and PresentMon for the OpenGL API is not that far (except for the 1080p). Whether or not the GTX 10 series benefit from DX12/Vulkan, that’s entirely another topic to be discussed. I’ll try to benchmark the Radeon RX 480 later and see if we got better results with Vulkan API. Moving back to the main topic, here’s how to use PresentMon to benchmark DX12, Vulkan and UWP games.
There are two ways on how you can install and use PresentMon, the hard and more technical way, or the easy way that I recently discovered thanks to a YouTuber. I’ll show you the steps below.
How To Install and Use PresentMon (The Hard Way)
1. You need to download the PresentMon files from its repository page from GitHub here.
2. You will also need to download and install the Visual Studio Express Community here.
3. Install the Visual Studio and allow it to update and download all the necessary files it needs.
4. UnZip the downloaded file from PresentMon.
5. Open or double-click the “PresentMon.sln” or “PresentMon.vcxproj”. It should open with the Visual Studio.
6. Hit the “Build” from the Menu and select “Build Solution”
7. If everything goes well (no errors), it should create a “PresentMon64.exe” file inside the x64 folder.
8. From here on, if you’d like to continue with the “hard way” check out HowToGeek’s guide here.
Unfortunately, in my case I was getting errors and wasn’t able to successfully build a solution or create the .exe file for PresentMon. Thus referring you to HowToGeek’s guide instead. I tried to look for another solution and luckily I stumble into Son of a Tech’s video showing an easy way to install and use PresentMon. Kindly watch his video below for the step by step instructions on how to use PresentMon the easy way.
Disclaimer: I’m not affiliated with Son of a Tech and I do not know the steps on how he made the executable/installer file of PresentMon. But huge thanks to Son of a Tech for making this easier for the end users.
How to Install and Use PresentMon (The Easy Way)
Link to Son of Tech’s setup installer: download here
I hope this guide helped you to benchmark your DX12, Vulkan or UWP games; don’t forget to share this if you find it helpful. Also hit the comment section below and let us know your benchmark scores from DX11 and DX12/Vulkan.
1 thought on “How To Use PresentMon to Capture Frame Rates on DX12, Vulkan and UWP Games”
Thanks for the share. I compiled the installer with Visual Studio 2015 universal setup creator. It includes the .NET package pre-requisite.