FPS log analyzer (PresentMon CSV) — average, 1% low, frame-time graph
Drop a PresentMon CSV to get average FPS, 1% / 0.1% low, a frame-time graph and a histogram — and compare two logs. Your log is not sent off your device.
Logs come from a Windows PC. You can open the CSV here on any device, but a PC is easier for large files.
Loading… (JavaScript required)
How to use
- Record a log with PresentMon (official repository). Start it, play the same scene for a while (e.g. 60 seconds), then stop. The console app writes a CSV; the GUI/overlay tools can export one too. CapFrameX CSVs that contain MsBetweenPresents also work.
- Drop the CSV above (or choose it). The first release reads PresentMon CSVs only: the header must contain
FrameTime(PresentMon 2.x) orMsBetweenPresents(PresentMon 1.x). Other files are rejected with a message. - If the log contains several applications, the one with the most frames is chosen first; switch it in the list.
- To compare, add a second log (same scene, same length). The table shows B − A and the percentage; the graphs are overlaid.
- Optionally add a game / resolution / settings label and press “Save to this PC”. Only the numbers and a small graph are stored in this browser — not the CSV.
If you also recorded sensors with PartsLife, enter its run ID and the start time and the log can be overlaid on the sensors in the run viewer.
Worked example
Example (all numbers are examples): a log of 6,000 frames lasting 60 s has an average of 100 FPS. The slowest 1% is 60 frames; if they average 20 ms, the 1% Low is 1000 ÷ 20 = 50 FPS. If the median frame time is 9.8 ms, any frame over 19.6 ms counts as a stutter.
What the numbers mean
- Average FPS = frames ÷ total time.
- 1% Low / 0.1% Low = the average of the slowest 1% (0.1%) of frame times, shown as FPS. Tools differ: some use the 99th-percentile frame time instead. Compare numbers only when the definition is the same.
- Median frame time = the middle value; less affected by spikes than the average.
- Stutter = a frame longer than 2× the median frame time. It is a simple rule for “a visible hitch”, not a perception test.
Limits
- It reads the intervals between presented frames. It does not measure input latency or what the monitor actually displays.
- Different scenes, drivers, background load and capture length change the numbers. Compare logs of the same scene, and judge by more than one run.
- The graph is downsampled to fit the screen; every figure is computed from all frames.
- Rows with a missing or non-positive frame time are skipped (the count is shown). The CSV has no wall-clock time; the start time used for overlays is estimated from the file’s modified time and may be off by seconds or more.
- Very large files (hundreds of MB) are read in pieces in a background worker, but the page needs memory for the frame times (about 8 bytes per frame).
- Nothing is uploaded: reading, calculating and saving all happen in this browser. Clearing site data removes saved results; use the backup on the toolbox page.
Your inputs and results stay in this browser. Nothing is sent to a server.