Release Notes
Major features
Metrics and capture
- PSO compilation metrics: Track D3D12 pipeline state object compilation via ETW (count, duration, and busy percentage), attributed into frame/CSV capture.
- OS DDI flip events: Track newer OS DDI events for per-flip timestamps and completed/dropped flip reporting.
- CSV display attribution: CSV output includes source ID and layer ID for flips so multi-plane and multi-display scenarios are easier to analyze.
- Display metadata: Additional display metadata is surfaced in capture/output paths.
Telemetry architecture
- Fine-grained telemetry providers: Per-metric provider granularity so only required endpoints are polled; supports combining providers and plug-in-style extension.
- Native telemetry format: ADL, NVAPI/NVML, IGCL, and WMI paths emit the dynamic caps/polling model directly; legacy telemetry shims removed.
- CPU temperature (UCI socwatch): Optional UCI socwatch integration in the service for CPU temperature where MSR-style access is restricted; builds and runs when UCI is not present.
- ADL memory utilization: AMD dedicated VRAM usage reporting improved and validated against Windows-reported values.
Intel PresentMon (IPM) UI
- Per-metric multi-device selection: Telemetry from multiple adapters can be shown at once; overlay presets can mix devices per metric.
- Game Experience preset: Overlay preset highlighting metrics that correlate with perceived motion and animation quality.
- Metric availability feedback: Unavailable telemetry metrics stay visible in pickers and overlay loadouts (dimmed/marked) instead of disappearing silently. Hovering over unavailable metrics shows reason why not available. This information can also be dumped to CSV via the
presentmon-cli dump-capssubcommand. - Array metrics: array metrics (multiple fans on 1 GPU etc.) now surface as a single metric with separate index dropdown, instead of multiple independent metrics.
Performance and reliability
Service efficiency
- Lower scheduling overhead: ETW flush and related loops use coarser
Sleep-based waiting instead of high-precision timers where jitter is acceptable, cutting CPU use under load by 78% (including on mobile-class systems). - Idle log flushing: Diagnostic log flushing is suppressed when the service is not actively tracking or polling telemetry, reducing idle CPU from 0.003% to 0.000%.
- Targeted telemetry polling: Continued refinement so providers poll only metrics clients actually consume.
Stability and targeting
- Autotargeting: Fixed failures when GPU top polling errors aborted the loop early, and a race when the target app starts as a console process before its 3D window appears.
- Service restart: Fixed service failing to restart while a client session still holds shared-memory objects.
- Concurrent launches: Second IPM instance is blocked cleanly instead of opening a broken empty window.
- Loader / internal API compatibility: Private API signature changes no longer break the loader; missing or misaligned internal endpoints are non-fatal.
API and integration
- NVIDIA custom flip manifest: NVIDIA custom flip ETW manifest is deployed with the service so decoding works on clean dev machines without a global manifest install.
- Integrated GPU ordering: Integrated Intel/AMD GPUs are detected reliably and sorted below discrete GPUs in device lists.
- Availability Feedback: introspection now surfaces more detailed reasons why a metric is not available (not available on this device vs. not present at all in the source API vs. PresentMon doesn't support it in this build).
UI and usability
- Version in UI: Installed PresentMon version (or build identity for custom/nightly builds) is shown in the capture application UI.
Removals
- Flash Injector removed: Experimental Flash Injector DLL/EXE, client hooks, build scripting, and UI have been removed to simplify the solution and builds.
Dependencies and infrastructure
- CEF version locking: Checked-in lock file plus
upgrade-cef/pull-cefscripts; build and MSI validate CEF version and binary hashes. - UCI SDK: UCI payload externalized with updated packaging/installer deployment (UCI 0.8 line).
- Front-end tooling: Vite/Vue dev dependency updates in the web UI project.
Bug fixes
- ADL/NVML struct and provider fixes affecting telemetry correctness.
- Introspection readiness wait when opening a client session.
- Installer library load in IDE scenarios; AppData apply method fixes.
- Coverity-driven fixes and CFG hardening for the Win32 console application.
- IGCL version check.
Developer and test infrastructure (not end-user facing)
- Broad test suite repair: session API upgrades, ETL aux data, OPM/service parity, deterministic dynamic-poll playback, reduced brittleness in timer and paced-polled tests.
- Parameterized IPM ULT framework to simplify adding ETL playback tests.