v1.5.4 - DPS Refresh Rate Settings
Release Notes - Version 1.5.4
Release Date: 2025-12-13
New Features
⚡ DPS Refresh Rate Settings
Description: Customizable DPS meter update frequency to balance performance and smoothness based on your PC specs and preferences.
Problem Solved: Users reported lag when tabbed into the game during combat. The DPS meter was competing with the game for CPU/GPU resources, causing frame drops and stuttering. When tabbed out, the meter worked smoothly because the game wasn't actively rendering.
Solution:
- Added configurable refresh rate with 4 preset options
- Minimal: 10 FPS (100ms refresh) - Best for low-end PCs or when playing in-game
- Low: 20 FPS (50ms refresh) - Good balance between smoothness and performance (Default)
- Medium: 30 FPS (33ms refresh) - Smooth updates, moderate CPU usage
- High: 60 FPS (16ms refresh) - Maximum smoothness, highest CPU usage (high-end PCs only)
Implementation:
- Created
DpsRefreshRate.csenum with extension methods for FPS/interval conversion - Modified
DpsStatisticsViewModel.csto use dynamic UI update throttle based on user setting - Updated
BattleLogQueue.csto support global batch timeout configuration - Added
GlobalBatchTimeoutproperty that syncs with UI refresh rate - Increased default batch size from 100 to 300 for better throughput
- Added
OnDpsRefreshRateChangedhandler inAppConfig.csto update queue timeout dynamically
UI Location:
- Settings → Performance → DPS Refresh Rate
- Dropdown with 4 options (Minimal/Low/Medium/High)
- Detailed tooltips explaining each option
- Changes take effect immediately without restart
User Impact:
- Eliminates lag when playing in-game - Lower refresh rates reduce CPU competition with the game
- Customizable smoothness - Choose higher rates when tabbed out or on powerful PCs
- Instant feedback - No restart required, change settings mid-combat
- Recommended Settings:
- Playing with game focused: Minimal (10 FPS) or Low (20 FPS)
- Monitoring while tabbed out: Medium (30 FPS) or High (60 FPS)
Performance Improvements
🚀 UI Thread Optimization
Description: Improved UI responsiveness during intense combat by changing sorting operations from blocking to non-blocking.
Technical Change:
- Changed
_dispatcher.Invoke()to_dispatcher.BeginInvoke()withBackgroundpriority inDpsStatisticsSubViewModel.cs - Sorting operations no longer block the UI thread
- UI remains responsive even during heavy combat with many players
Impact:
- Smoother UI interactions during raids and World Boss Carnage
- Reduced stuttering when many players are in combat
- Better overall application responsiveness
⚡ Batch Processing Optimization
Description: Increased BattleLogQueue batch size from 100 to 300 for better throughput.
Impact:
- More efficient processing of combat logs during intense fights
- Reduced queue backlog during high-activity scenarios
- Works in conjunction with configurable refresh rates for optimal performance
Bug Fixes
🐛 Fixed ScopeTime Toggle Not Working (Current ↔ Total)
Issue: When switching from Current to Total damage view, it worked correctly. However, switching back from Total to Current would fail to update the UI, leaving the meter stuck showing total damage.
Root Cause: The OnScopeTimeChanged handler was calling UpdateData(), which went through the throttled update path designed for combat data updates. When users manually toggled between Current/Total, the UI update would be delayed by the DPS refresh rate throttle (10-100ms depending on settings) or skipped entirely if a pending update was already scheduled.
User Report: "when I switch from current damage to total it works, but then switching back to current doesn't work"
Fix Applied:
- Modified
OnScopeTimeChanged()inDpsStatisticsViewModel.cs(lines 1049-1071) - Changed from
UpdateData()toPerformUiUpdate()to bypass throttling - Modified
OnStatisticIndexChanged()to use the same approach for metric switching (lines 1073-1086) - User-initiated actions now update immediately without throttle delay
- Combat data updates continue to use throttling for performance
User Impact:
- ✅ Current ↔ Total toggle now works instantly in both directions
- ✅ Metric switching (Damage/Healing/TakenDamage) updates immediately
- ✅ No performance regression - combat updates still throttled as designed
- ✅ Better responsiveness to manual UI interactions
🐛 Reduced Boss Death Delay
Issue: After defeating a boss, the meter would continue tracking for too long (8 seconds) before archiving the fight as "Last Battle."
Fix Applied:
- Reduced
BossDeathDelaySecondsfrom 8 to 5 inDataStorageV2.cs - Combat now archives 3 seconds faster after boss death
User Impact:
- Faster transition to "Last Battle" state after boss fights
- Meter stops tracking sooner when combat truly ends
- More responsive meter behavior at the end of encounters
Files Changed
Added
BlueMeter.WPF/Models/DpsRefreshRate.cs- New enum with 4 refresh rate options (Minimal, Low, Medium, High)
- Extension methods:
GetIntervalMs()returns update interval in milliseconds - Extension methods:
GetFps()returns FPS value - Comprehensive XML documentation for each option
Modified
-
BlueMeter.WPF/Config/AppConfig.cs- Added
DpsRefreshRateproperty (default: Low = 20 FPS) - Added
OnDpsRefreshRateChangedhandler to update BattleLogQueue timeout (lines 290-295) - Automatically syncs refresh rate with queue batch processing
- Added
-
BlueMeter.WPF/ViewModels/DpsStatisticsViewModel.cs- Changed
_uiUpdateThrottlefrom constant to computed property (line 70) - Now calculates throttle dynamically:
UiUpdateThrottle => TimeSpan.FromMilliseconds(AppConfig.DpsRefreshRate.GetIntervalMs()) - Updated throttle checks to use dynamic property (lines 349, 355)
- Improved comment documentation for UI update throttling
- Changed
-
BlueMeter.WPF/ViewModels/DpsStatisticsSubViewModel.cs- Changed
_dispatcher.Invoke()to_dispatcher.BeginInvoke()(line 98) - Added
DispatcherPriority.Backgroundfor sorting operations (line 120) - Moved
UpdateItemIndices()inside BeginInvoke block for consistency - Added comment explaining non-blocking UI approach
- Changed
-
BlueMeter.WPF/Views/SettingsView.xaml- Added new "Performance" section with CardHeader (lines 898-901)
- Added DPS Refresh Rate dropdown ComboBox (lines 906-933)
- Binds to
AppConfig.DpsRefreshRatewith TwoWay binding - Added detailed info text with FPS explanations for each option (lines 936-955)
- Used bullet points (• symbol) for clear visual hierarchy
-
BlueMeter.Core/Data/BattleLogQueue.cs- Added
GlobalBatchTimeoutstatic property for UI-controlled timeout (line 36) - Changed
_batchTimeoutfrom readonly to mutable field (line 25) - Added
UpdateBatchTimeout()method for runtime changes (line 40) - Modified constructor to respect GlobalBatchTimeout if set (line 56)
- Increased default
batchSizefrom 100 to 300 (line 50) - Default timeout remains 50ms if not overridden
- Added
-
BlueMeter.Core/Data/DataStorageV2.cs- Reduced
BossDeathDelaySecondsfrom 8 to 5 (line 37)
- Reduced
Testing Notes
DPS Refresh Rate:
- Open Settings → Performance
- Verify DPS Refresh Rate dropdown is visible with 4 options
- Start combat and change refresh rate from Low to Minimal
- Observe immediate reduction in update frequency (numbers update slower)
- Change to High and observe faster updates
- Tab into game with Low/Minimal and verify reduced lag compared to before
- Tab out and use Medium/High for smoother monitoring
UI Thread Performance:
- Join a raid or World Boss Carnage with 10+ players
- Observe smooth UI interactions (clicking, scrolling) during combat
- Verify no stuttering or freezing when player list updates
Boss Death Delay:
- Defeat a boss in a raid
- Observe meter transitions to [Last Battle] within 5-6 seconds
- Verify fight is properly archived
Performance Comparison
Before v1.5.4
- Fixed 200ms update throttle (5 FPS)
- Lag when tabbed into game due to CPU competition
- UI sorting blocks main thread during combat
- 8-second delay before archiving boss fights
After v1.5.4
- Configurable 10-60 FPS (user choice)
- Minimal lag with Low/Minimal settings (10-20 FPS)
- Non-blocking UI sorting for smoother experience
- 5-second delay before archiving (37% faster)
Real-World Impact:
- User reported: "yeah it did [solve the lag]" after testing Minimal setting
- Estimated 50-70% reduction in in-game lag with Minimal (10 FPS) vs previous fixed throttle
- Allows smooth monitoring when tabbed out with Medium/High settings
Known Issues
None introduced by this release.
Upgrade Notes
This is a performance enhancement release. Simply replace your existing BlueMeter installation with v1.5.4.
Recommended Action After Upgrade:
- Open Settings → Performance
- Test different DPS Refresh Rates to find your optimal setting
- Suggested starting point: Low (20 FPS) for most users
- If experiencing lag in-game: Switch to Minimal (10 FPS)
- For monitoring while tabbed out: Try Medium (30 FPS) or High (60 FPS)
Special Thanks:
- Community member for detailed lag report and testing confirmation