Skip to content

v1.5.4 - DPS Refresh Rate Settings

Choose a tag to compare

@caaatto caaatto released this 13 Dec 12:07
· 9 commits to main since this release

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.cs enum with extension methods for FPS/interval conversion
  • Modified DpsStatisticsViewModel.cs to use dynamic UI update throttle based on user setting
  • Updated BattleLogQueue.cs to support global batch timeout configuration
  • Added GlobalBatchTimeout property that syncs with UI refresh rate
  • Increased default batch size from 100 to 300 for better throughput
  • Added OnDpsRefreshRateChanged handler in AppConfig.cs to 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() with Background priority in DpsStatisticsSubViewModel.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() in DpsStatisticsViewModel.cs (lines 1049-1071)
  • Changed from UpdateData() to PerformUiUpdate() 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 BossDeathDelaySeconds from 8 to 5 in DataStorageV2.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 DpsRefreshRate property (default: Low = 20 FPS)
    • Added OnDpsRefreshRateChanged handler to update BattleLogQueue timeout (lines 290-295)
    • Automatically syncs refresh rate with queue batch processing
  • BlueMeter.WPF/ViewModels/DpsStatisticsViewModel.cs

    • Changed _uiUpdateThrottle from 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
  • BlueMeter.WPF/ViewModels/DpsStatisticsSubViewModel.cs

    • Changed _dispatcher.Invoke() to _dispatcher.BeginInvoke() (line 98)
    • Added DispatcherPriority.Background for sorting operations (line 120)
    • Moved UpdateItemIndices() inside BeginInvoke block for consistency
    • Added comment explaining non-blocking UI approach
  • 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.DpsRefreshRate with 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 GlobalBatchTimeout static property for UI-controlled timeout (line 36)
    • Changed _batchTimeout from 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 batchSize from 100 to 300 (line 50)
    • Default timeout remains 50ms if not overridden
  • BlueMeter.Core/Data/DataStorageV2.cs

    • Reduced BossDeathDelaySeconds from 8 to 5 (line 37)

Testing Notes

DPS Refresh Rate:

  1. Open Settings → Performance
  2. Verify DPS Refresh Rate dropdown is visible with 4 options
  3. Start combat and change refresh rate from Low to Minimal
  4. Observe immediate reduction in update frequency (numbers update slower)
  5. Change to High and observe faster updates
  6. Tab into game with Low/Minimal and verify reduced lag compared to before
  7. Tab out and use Medium/High for smoother monitoring

UI Thread Performance:

  1. Join a raid or World Boss Carnage with 10+ players
  2. Observe smooth UI interactions (clicking, scrolling) during combat
  3. Verify no stuttering or freezing when player list updates

Boss Death Delay:

  1. Defeat a boss in a raid
  2. Observe meter transitions to [Last Battle] within 5-6 seconds
  3. 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:

  1. Open Settings → Performance
  2. Test different DPS Refresh Rates to find your optimal setting
  3. Suggested starting point: Low (20 FPS) for most users
  4. If experiencing lag in-game: Switch to Minimal (10 FPS)
  5. For monitoring while tabbed out: Try Medium (30 FPS) or High (60 FPS)

Special Thanks:

  • Community member for detailed lag report and testing confirmation