Release Notes
🚀 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.