Skip to content

Releases: F3NN3X/InfoPanel.IPFPS

[1.3.2] - 2025-03-22

22 Mar 15:55

Choose a tag to compare

[1.3.2] - 2025-03-22

Added

  • New PluginText sensor (windowtitle) to display the currently captured window title (e.g., "Arma Reforger") or "Nothing to capture" when idle.

Full Changelog: 1.3.1...1.3.2

[1.3.1] - 2025-03-09

09 Mar 16:30

Choose a tag to compare

[1.3.1] - 2025-03-09

Fixed

  • Corrected 1% and 0.1% low FPS calculations in ProcessOutputLine to use the worst frames (highest frame times) by sorting frame times in descending order and selecting the appropriate percentiles (99th and 99.9th). Previously, the best frames were incorrectly used, leading to inflated low FPS values (e.g., 176 FPS instead of < average).

Changed

  • Increased MaxFrameSamples from default (assumed 100) to 1000 for finer granularity in frame time sampling, providing a rolling window of ~8-10 seconds at typical FPS rates (100-120 FPS). This improves the accuracy of average, 1%, and 0.1% low FPS metrics over a longer period.

Notes

  • Verified fix with logs, confirming 1% low (e.g., 86.74 FPS → 10.09 FPS) and 0.1% low (e.g., 82.60 FPS → 8.36 FPS) now correctly reflect performance dips below the average FPS (~128 FPS → 122 FPS).

[1.3.0] - 2025-03-09

  • Improved: fullscreen detection reliability across multi-monitor setups
  • Enhanced: Enhanced PID transition handling for seamless game restarts
  • Optimized: performance metric averaging for smoother output
  • Enhanced: Added robust cleanup on game exit (stops PresentMon, resets sensors)
  • Fixed: minor logging truncation issues
  • Enhanced: Added new sensors: GpuTime, GpuBusy, GpuWait, and GpuUtilization
  • Enhanced: Improved PresentMon integration for real-time data capture
  • Enhanced: Refined CPU metrics with CpuBusy and CpuWait sensors

Full Changelog: 1.2.4...1.3.1

[1.2.4] - 2025-03-08

08 Mar 22:00

Choose a tag to compare

[1.2.4] - 2025-03-08

  • Fixed: Removed hardcoded game check, making the plugin agnostic to specific apps.
    • Replaced with generic handling of access-denied cases in IsReShadeActive, assuming no ReShade interference unless dxgi.dll is confirmed.
  • Fixed: Resolved CS8600 warning by declaring processName as string? in StartCaptureAsync.

[1.2.3] - 2025-03-08

  • Fixed: Bypassed ReShade check for anti-cheat protected games to avoid Win32Exception due to access denial. Added GetProcessName to safely identify processes and skip unnecessary checks.
  • Restored: Functionality from v1.2.1 with stability fixes.
    • Fixed StartAsync to prevent task completion races and added PID logging for debugging.
    • Simplified StartCaptureAsync to ensure reliable output capture and added error logging for PresentMon diagnostics.
    • Retained robust fullscreen detection and service management from v1.2.1.
    • Avoided LINQ in ProcessExists to prevent disposal-related crashes.

Full Changelog: 1.2.0...1.2.4

[1.2.0] - 2025-03-07

07 Mar 00:49

Choose a tag to compare

Added

  • Fullscreen/Borderless Detection: Implemented comprehensive window enumeration using window styles (WS_CAPTION, WS_THICKFRAME) and client area matching (98%+ monitor coverage) to detect fullscreen and borderless applications universally.
  • PresentMon Integration: Added robust service management (InfoPanelPresentMonService) with start/stop functionality and ETW session cleanup via logman.exe.
  • FPS and Frame Time Monitoring: Added 5-frame window averaging for smooth FPS and frame time output using PresentMon’s CSV data.
  • ReShade Detection: Included detection of dxgi.dll in process modules, with a fallback assumption of ReShade presence on access denial for safety with anti-cheat systems.
  • Anti-Cheat Safety: Minimized module enumeration to reduce interference, with checks limited to IsReShadeActive.

Changed

  • Exception Noise Reduction:
    • Replaced Process.GetProcessById with Process.GetProcesses in ProcessExists to eliminate System.ArgumentException in the debugger when games exit.
    • Simplified IsReShadeActive to check HasExited first, reducing unnecessary System.ComponentModel.Win32Exception occurrences from proc.Modules.
    • Suppressed ArgumentException logging in ProcessExists for expected game exits, improving log cleanliness.
  • Type Safety: Fixed type mismatch warnings (CS1503) by using Vanara.PInvoke.RECT and Vanara.PInvoke.POINT structs for window geometry calculations.
  • Cleanup Logic: Enhanced cleanup with a 10-second timeout check in StartCaptureAsync and forced termination of lingering PresentMon processes in StopCapture and Dispose.

Fixed

  • Resolved false positives in fullscreen detection by filtering out system UI windows (e.g., explorer, textinputhost) and small/invalid windows (client area < 1000 pixels or off-monitor).
  • Fixed "Access is denied" errors in module checking by gracefully handling exceptions in CanAccessModules.
  • Corrected cleanup issues ensuring PresentMon and its service stop reliably, including ETW session termination.

Known Issues

  • A System.ComponentModel.Win32Exception ("Access is denied") may still appear in the debugger when IsReShadeActive checks proc.Modules for games with anti-cheat protection. This is caught and handled, affecting only debug output, not functionality.

Notes

  • This release consolidates all prior development efforts into a stable version, reverting from an unstable v1.2.6 attempt that introduced OpenProcess for module access checking, which caused cascading exceptions (Win32Exception, InvalidOperationException) and broke PresentMon startup.

[1.1.0] - 2025-03-05

05 Mar 18:37

Choose a tag to compare

PresentMon FPS Plugin for InfoPanel Initial Release

A plugin for InfoPanel to monitor and display real-time frames per second (FPS) and frame times for fullscreen applications using PresentMon.

Features

  • Displays FPS and frame times for fullscreen apps (e.g., games).
  • Detects active fullscreen applications automatically via Windows API.
  • Uses PresentMon for high-performance DirectX metric capture, averaging over 5 frames for smooth output.
  • Manages PresentMonService for Event Tracing for Windows (ETW) sessions.
  • Ensures robust cleanup of processes and ETW sessions on app exit or InfoPanel shutdown.