Releases: F3NN3X/InfoPanel.IPFPS
Releases · F3NN3X/InfoPanel.IPFPS
[1.3.2] - 2025-03-22
[1.3.2] - 2025-03-22
Added
- New
PluginTextsensor (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
[1.3.1] - 2025-03-09
Fixed
- Corrected 1% and 0.1% low FPS calculations in
ProcessOutputLineto 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
MaxFrameSamplesfrom 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
[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 unlessdxgi.dllis confirmed.
- Replaced with generic handling of access-denied cases in
- Fixed: Resolved
CS8600warning by declaringprocessNameasstring?inStartCaptureAsync.
[1.2.3] - 2025-03-08
- Fixed: Bypassed ReShade check for anti-cheat protected games to avoid
Win32Exceptiondue to access denial. AddedGetProcessNameto safely identify processes and skip unnecessary checks. - Restored: Functionality from v1.2.1 with stability fixes.
- Fixed
StartAsyncto prevent task completion races and added PID logging for debugging. - Simplified
StartCaptureAsyncto 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
ProcessExiststo prevent disposal-related crashes.
- Fixed
Full Changelog: 1.2.0...1.2.4
[1.2.0] - 2025-03-07
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 vialogman.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.dllin 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.GetProcessByIdwithProcess.GetProcessesinProcessExiststo eliminateSystem.ArgumentExceptionin the debugger when games exit. - Simplified
IsReShadeActiveto checkHasExitedfirst, reducing unnecessarySystem.ComponentModel.Win32Exceptionoccurrences fromproc.Modules. - Suppressed
ArgumentExceptionlogging inProcessExistsfor expected game exits, improving log cleanliness.
- Replaced
- Type Safety: Fixed type mismatch warnings (CS1503) by using
Vanara.PInvoke.RECTandVanara.PInvoke.POINTstructs for window geometry calculations. - Cleanup Logic: Enhanced cleanup with a 10-second timeout check in
StartCaptureAsyncand forced termination of lingering PresentMon processes inStopCaptureandDispose.
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 whenIsReShadeActivechecksproc.Modulesfor 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
OpenProcessfor module access checking, which caused cascading exceptions (Win32Exception,InvalidOperationException) and broke PresentMon startup.
[1.1.0] - 2025-03-05
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.