PresentMon 2.5.0 adds middleware rewrite, multi-device telemetry, and stricter metric validation

PresentMon is the open-source Windows performance analysis tool maintained under Intel’s GameTechDev project. It captures and analyzes graphics application behavior across DirectX, OpenGL, and Vulkan, and it also powers telemetry and overlay functions through its service and capture application.
Rewritten middleware
The biggest change in v2.5.0 is a full rewrite of the middleware query framework and IPC path. According to the release notes, metric calculation is now unified across dynamic queries, frame queries, and the standalone console app. Query registration is also stricter, dynamic stats calculations were reworked to fix several bugs, and the service can now track which metrics each client is actually consuming.
The update also adds support for querying metrics across multiple GPU devices and other system components. PresentMon can now collect telemetry without targeting a presenter, and that telemetry rate is no longer tied to frame rate. On the API side, dynamic queries can be polled with PID set to 0 if they do not contain frame metrics, and CPU-related metrics now move to a separate System device instead of the old Universal device.
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
Another part of this update focuses on Event Tracing for Windows handling. The developers say PresentMon now separates ETW session startup from provider enabling, improves lifecycle tracking, and reduces race conditions. They also say those changes let the tool gather data from some titles that previously blocked ETW trace collection, which could matter for benchmarking and overlay use in games with stricter anti-cheat behavior.
Version 2.5.0 also fixes several metric and reporting issues. The changelog mentions corrected CPU busy and wait frame calculations, a fix for mixed percentile and raw-stat queries, corrected Intel adapter LUID detection and memory reporting, and a percentile bug where 99% could effectively behave like a max result.
Check the remaining notes below (click below).
PresentMon 2.5 Release Notes
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
Source: PresentMon 2.5 (Github)