Skip to content

Releases: GameTechDev/PresentMon

v2.5.1

Choose a tag to compare

@markgalvan-intel markgalvan-intel released this 29 Jun 23:58

Bug Fixes

  • Updated the PresentMon service communication layer to tighten boundaries between the service and clients
  • Fixed percentile ordering for fps
  • Fixed backwards compatibility regression of PresentMon API
  • Added missing CEF files to installer

v2.5.0

Choose a tag to compare

@planetchili planetchili released this 29 Jun 23:59

Release Notes

⚠️ DISTRIBUTION NOTE ⚠️

The download for this release (April 2026) has been removed because the shared service component had caused a compatibility conflict with one of our downstream customers. Please refer to our v2.5.1 release for a binary distribution containing the below improvements.

🚀 Major Features

Middleware and IPC Rewrite

  • Unified Metrics Calculator: Consolidated frame metric calculation system so that dynamic queries, frame queries, and the stand-alone console application all share the same single point of implementation for calculation logic
  • New Query Framework: Complete rewrite of Middleware query registration and polling
    • Query registration is now strictly validating queries and outputting detailed info to the diagnostic layer
    • Dynamic query stats calculations reimplemented, solving several calculation bugs
    • Service now has visibility on the metrics consumed by each client and enables telemetry accordingly
  • New IPC: Complete rewrite of IPC that decouples telemetry from frame data and improves transport consistency
  • Multi-Device Support: Support for querying metrics across multiple GPU devices and system components
  • Independent Telemetry: It is now possible to gather telemetry data without targeting a presenter, and telemetry data rate is no longer tied to frame rate

Enhanced Metrics

  • Improved Animation Error Tracking: Better source tracking and error handling for animation-related metrics

ETW Session Management

  • Provider Lifecycle Improvements: Better tracking and management of ETW provider enable/disable operations with proper data quiescing
  • Session Coordination: Separated ETW session startup from provider enabling for more reliable operation and reduced race conditions
  • Anticheat Mitigation: Above changes enable PresentMon to gather data from certain titles that otherwise block ETW trace gathering

🔧 Performance & Reliability Improvements

Performance

  • Service now only polls telemetry for a device only when a client is actively consuming metrics for that device

Logging & Diagnostics

  • Enhanced Logging System: Significant performance improvements with async logging, throttling, and diagnostic options
  • Verbose Module Support: Better CLI helpers and diagnostic capabilities for troubleshooting
  • Crash Recovery: Added log flush on crash and improved error reporting
  • ETW and Frame Latency: Added detailed debug logging to track ETW event delivery latency and service frame processing latency

🛠️ API & Integration Updates

New API Features

  • Metrics can be tracked for multiple adapters within the same query
  • Dynamic queries can be polled without a target process (set PID to 0)
    • Only queries that contain no frame metrics can be used this way

API Behavior Changes

  • Query registration validation is much more strict than previously
  • Most API errors now have detailed diagnostics output to the diagnostics channel (see PresentMonDiagnostics.h)
  • Metrics related to the CPU (frequency, utilization, name) now are associated with a new System device (ID=65536) instead of the Universal device (ID=0)

🐛 Bug Fixes

  • Fixed shader path resolution issues
  • Resolved race conditions in service backpressure handling
  • Corrected frame metric calculations for CPU busy/wait times
  • Fixed frame metric calculation bug when combining percentile and raw stats for the same metric
  • Fixed percentile calculation algorithm (e.g. 99% was effectively reporting MAX instead)
  • Fixed Intel adapter LUID detection and memory reporting
  • Improved ETW session management and provider lifecycle

📦 Dependencies & Infrastructure

  • Scriban: Updated to v6.6
  • CSVHelper: Updated to latest version
  • IGCL: Updated Intel Graphics Control Library
  • Installation: Enhanced cleanup of AppData folders during install/uninstall

This release represents a significant architectural improvement with the introduction of the middleware and IPC layers while maintaining backward compatibility and improving overall system reliability.

v2.4.1

Choose a tag to compare

@markgalvan-intel markgalvan-intel released this 16 Jan 04:10
43bd033

Bug Fixes

New Contributors

Full Changelog: v2.4.0...v2.4.1

v2.4.0

Choose a tag to compare

@markgalvan-intel markgalvan-intel released this 11 Nov 04:28

New Features

Enhancements

  • Implemented paced playback of ETL files from the service, allowing the service to process ETL files at realtime cadence
  • Added automated test that uses paced ETL playback to test dynamic metric polling API
  • Enhanced the flash injection to maintain a connection with the injected code and update settings in realtime
  • Added a rainbow bar option for flash injection to help identify frames
  • Added the ability to size the flash injection background independent of foreground flash rectangle
  • Added the ability to run PresentMon client headless via CLI to perform .csv frame captures
  • Added CLI option to list/browse available stats, metrics, and devices
  • Enhanced cooperation between clients in multi-client scenarios (telemetry and ETW flush periods)
  • Added the ability to capture ETL trace logs from PresentMon client UI (experimental, primarily for issue reporting)
  • Enabled logging up to verbose level in production without requiring special build parameters (also added new Verbose2 level)
  • PresentMon Installer upgrade fixes to allow for better upgrade experience and silent installations
  • Enhanced PresentMon console ULT suite

Metrics

  • MsBetweenSimulationStart - BETA support - Enabled but still ironing out some issues.
  • MsPCLatency - BETA support - Enabled but still ironing out some issues.

Bug Fixes

  • Fixed injection sometimes skipping drawing flash when clicking rapidly
  • Fixed bug in Streamer component (IPC ring buffer) that could lose frames in rare circumstances
  • Enhanced present event processing in CompletePresent when handling lost presents.
  • Fixed frame type bug when processing composed presents
  • Fixed small error in ovelay AnimationError calculation.

v2.3.1

Choose a tag to compare

@planetchili planetchili released this 10 Jun 08:45

New Features

  • Introduced three new FPS overlay indicators to provide a clearer picture of frame delivery behavior, especially in scenarios involving frame generation. FPS-Presents measures how often frames are presented to the GPU, while FPS-Display captures the rate at which frames are actually shown on screen. FPS-App typically matches FPS-Presents except in frame generation scenarios.
  • Added the following GPU telemetry metrics (currently supported by Intel Arc Battlemage GPUs):
    • GPU Effective Frequency
    • GPU Voltage Regulator Temperature
    • GPU Memory Effective Bandwidth
    • GPU Overvoltage Percent
    • GPU Temperature Percent
    • GPU Power Percent
    • GPU Fan Speed Percent
    • GPU Card Power (total board power)
  • Reintroduced support for several timing metrics in the CSV, including MsBetweenPresents, MsBetweenDisplayChange, MsInPresent, MsRenderPresentLatency, and MsUntilDisplayed. MsBetweenSimulationStart and MsPCLatency are also included in the schema but are currently disabled until underlying event support is enabled.
  • Added CLI option to disable overlay alpha blending (reduces overlay impact on target present timing seen in some circumstances)
  • Added support to PresentMon console application for detection of Hybrid Presents
  • Increased default PresentMon circular buffer size to 2048 to be able to handle higher FPS applications. In addition added a command line parameter to be able to manually configure buffer size.
  • Stabilized binary version compatibility of PresentMon API by deploying PresentMonAPI.dll side-by-side with the service and moving to a dynamic loading model
  • Added Loader .dll + static import .lib to facilitate discovery and endpoint resolution of the PresentMon API
  • Added ETL trimmer utility for trimming ETL files to a timestamp range and pruning unnecessary event types (source only, currently no binary distribution provided)

Experimental

  • Added ability to inject executable code into the target process to cause a flash to be drawn in-game whenever the mouse is clicked (intended for use in conjunction with specialized optical measuring instruments)

Security and Lifecycle

  • Re-engineered multi-process architecture to enable PresentMon to be run without Administrator privileges
  • Improved security by ensuring that Chromium UI frontend runs at lowered integrity even when PresentMon is run elevated
  • Upgraded frontend from Vue.js 2 (past end-of-life and unsupported) & Vuex => Vue.js 3 & Pinia

v2.3.0

Choose a tag to compare

@planetchili planetchili released this 17 Dec 00:51

New Features

  • Added frame generation tracking support for Intel XeSS XeFG and AMD Fluid Motion Frames. The Displayed FPS metric now tracks both application and generated frames in the FPS calculation. In addition PresentMon will report the type of frame using the FrameType metric.
  • Added support for Intel XeLL and introduced a new metric called Instrumented Latency, which uses driver-based markers to accurately represent latency from frame start to when the frame is on the display.
  • Added ability to configure service logging via registry
  • Added Animation Time metric which is the time the CPU started animation work on a frame

Bug Fixes

  • Fixed issue where PresentMon would fail initialization the first time it is run after reboot
  • Improved accuracy of VRAM Read/Write bandwidth metrics on BMG

v2.2.0

Choose a tag to compare

@planetchili planetchili released this 01 Oct 13:17

New Features

  • Overhauled the ETW backend to reduce event latency from 1000ms => ~30ms; overlay now displays data instantly without 1 second lag
  • Added a new click-to-photon metric that only tracks mouse button events; renamed previous click-to-photon metric to "all-input-to-photon"
  • Improved input latency reporting so that input falling on dropped frames is attributed to the next displayed frame rather than being ignored
  • Enabled the client to gather log data from the service and increased log coverage, particularly at the "debug" severity level

Bug Fixes

  • Fixed column labels for summary stats file #330
  • Fixed rare crash due to a race condition #340
  • Fixed bug occurring when selecting a non-default adapter #256

2.1.1

Choose a tag to compare

@markgalvan-intel markgalvan-intel released this 30 Jul 04:25

New Features

  • Added option to have the GUI capture application launch its own instance of PresentMon Service as a child process (useful for debugging)

Bug Fixes

  • Fixed issue with duration of CSV frame capture #314
  • Fixed race condition causing loss of frame data when processing offline ETL files #313
  • Fixed issue with FrameTime metric calculation #311

2.1.0

Choose a tag to compare

@markgalvan-intel markgalvan-intel released this 13 Jun 05:24

New Features

  • Added Animation Error metric.
  • Added new logging into AppCef and Core projects.
  • Created a debug diagnostic channel.
  • Added Intel-PresentMon provider.
  • Added ULTs for PresentMonService.
  • Allow polling rate and drawing rate to vary independently.

Bug Fixes

  • Changes for Issue #238. Presented FPS X% is now displayed as X% of FPS, not frame times.
  • Changes for Issue #209. Reduced PRESENTEVENT_CIRCULAR_BUFFER_SIZE to be 1024.
  • Fix for Issue #162. Autoscale is now recovering zoom in.
  • Addressed various low impact security CVEs.

2.0.1

Choose a tag to compare

@markgalvan-intel markgalvan-intel released this 03 May 18:23

Bug Fixes

  • Fix for Issue #218. Only upgrade to child process window if it is larger than 640x480
  • Fix for Issue #223. Updated CPU telemetry code to better handle failed PDH queries.
  • Fix for Issue #226. Updated gather commands to match PMC.
  • Fix for Issue #232. fflush() after each CSV row when --output_stdout