[Performance] Stuttering and Significant 1% Low FPS Drop
JLC827 opened this issue · 32 comments
Before You Begin
- I confirm that I have downloaded the latest version of the addon.
- I am not playing on a private server.
- I checked for an existing, open ticket for this request and was not able to find one.
- I edited the title of this feature request (above) so that it describes the issue I am reporting.
Performance Issue
Hekili is causing visual stuttering during combat. This can be seen by a significant drop in the "1% low FPS" performance metric.
I am making a new ticket for this as instructed to in ticket #2624. Please note that the "Create new issue" > "Performance Issues" template directs to that now-locked thread. This is why I originally posted there.
To clarify on the test location: because this was a direct A/B comparison, any baseline performance issues in the zone serve as a constant in both tests. This isolates the performance drop as being caused only by the addon. While I can't provide data from another zone at the moment, the existing test should accurately reflects the addon's overhead.
1. Observations and Profiling Data
I conducted a targeted performance test by running the exact same combat scenario twice: once with all addons disabled and once with only Hekili enabled.
The test involved attacking a "Dungeoneer's Training Dummy" at the Contender's Gate in Dornogal. The spec was holy priest.
The data below shows the direct impact of Hekili during combat:
| Addons Enabled | Average FPS | 1% Low FPS |
|---|---|---|
| No Addons | 105 | 68 |
| Hekili Only | 95 | 33 |
Under identical combat conditions, enabling only Hekili caused my 1% low FPS to plummet from 68 to 33, causing noticeable stuttering.
2. System and Addon Information
- Hardware:
- CPU: AMD Ryzen 5 3600 6-Core Processor
- GPU: NVIDIA GeForce GTX 1660 SUPER
- Driver: NVIDIA Version 580.88
- RAM: 16 GB
- Motherboard: B450M PRO-VDH MAX (MS-7A38)
- Hekili Version:
v11.2.0-1.0.0f - Last Good Version: I do not have data for a previous version, as this is the first time I have performed this level of profiling.
3. Combat Test: /dump HekiliEngine.threadUpdates
The following diagnostic data was collected during the combat test with Hekili enabled.
Dump: value=HekiliEngine.threadUpdates
[1]={
meanClockTime=15.571152631586,
meanFrameTime=11.817816256379,
meanWorkTime=14.872062781966,
totalWasted=0,
peakWasted=0,
peakWorkTime=21.841499999166,
peakFrames=2,
peakClockTime=37.391300000025,
updates=798,
firstUpdate=15244677.1109,
updatesPerSec=1.6090980880441,
framesWorked=205550,
meanWasted=0,
meanFrames=1.0576441102757
}
4. Hekili Snapshot
A snapshot containing my settings, talents, and gear was taken immediately after the combat test. The full snapshot string is available via the Pastebin link below.
Thank you for your work on this addon. I hope this direct combat comparison data is useful for diagnosing and resolving the performance bottleneck. Please let me know if any other information would be helpful.
Additional Information
No response
Contact Information
No response
Just coming back to this now that the patch has settled a bit.
Are you still having issues?
Can try these commands, do some combat, get a new snapshot. I am looking into some stuff.
/run HekiliEngine.refreshRate = 0.1
/run HekiliEngine.combatRate = 0.05
/run HekiliEngine.refreshTimer = 0
/reload
Just see if that does anything at all.
Oh, oops. Maybe that was my bad lol, I will check and see if he wants to continue using that thread or not.
To clarify on the test location: because this was a direct A/B comparison, any baseline performance issues in the zone serve as a constant in both tests. This isolates the performance drop as being caused only by the addon. While I can't provide data from another zone at the moment, the existing test should accurately reflects the addon's overhead.
Dornogol still isn't a great testing location, though. I have a 9800X3D, RTX4080, 6000mhz RAM, gen5 m.2 hard drives, and I still lag out in dornogol and get stuttering, but can maintain 100+fps in mythic raid no problem with all addons running.
This is the FPS / performance information from our discord bot !fps command:
Experiencing lag or FPS drops? While Hekili can be CPU-heavy, it’s rarely the only cause.
Common sources of performance issues:
- WeakAuras (especially those using models or model scenes)
- UI overhauls like ElvUI and Plater, or custom fonts
- Combat logging enabled during raids
- High update rates on bars/icons/text
- Addons like Cell, Details
- The game itself (TWW is currently poorly optimized)
- Heavy traffic areas like Dornogal
- Addon CPU profiling or excessive background events
Some guides you can look at in the meantime while waiting for a more detailed answer:
- Quazii settings video
- ElvUI written performance guide
- Not necessarily specific to that addon, but writter by that addons developers
Additionally, things I've read onlince recently:
- I also saw a post on Reddit recently regarding "optional GPU features" acting differently in 11.2, and it being really bad for older GPUs like yours. You may want to check for that.
- I also saw people turning off "compute effects" in settings seeing a huge bump.
Try changing these:

Just anywhere that's not dornogol. A rare out in open world or something, or maybe a follower dungeon or delve since you can fire one up any time?
Thanks for the info, I'll see if any of these settings have much of an effect.
What would be an ideal testing location? Is there a location that the dev team uses to profile performance?
Alright, I just went and did some more profiling at the target dummies in Exodar. Basically nobody around, and environment textures and models from 2008.
| Addons Enabled | Average FPS | 1% Low FPS |
|---|---|---|
| No Addons | 280 | 156 |
| Hekili Only | 234 | 42 |
This shows the performance hit of Hekili clearly. To be clear, this is with Hekili running as the only addon.
I ran some additional profiling using the Addon Profiler addon. While Hekili's average CPU usage was low, it consistently produced large CPU usage peaks of around 18ms.
Even taking into account the performance impact of profiling, this is quite a large peak and likely the cause of the stutter.
I do not expect this addon to have no performance hit, but I wanted to clearly document the stutter. It's such a useful addon I want to keep using it.
Thanks for taking the time to look at the numbers.
I understand the CPU usage average is low, but the CPU spikes are what are likely responsible for the framerate stutter.
To maintain 60 FPS, a new frame must be rendered every 16.67ms. When a single addon's process takes 18ms, it consumes the entire frame budget and guarantees a missed frame, which is the stutter I'm seeing.
This leads me to a potential solution. I recall older versions had settings to adjust the addon's polling rate, which was very effective for managing performance. Would it be possible to re-introduce 'Performance vs. Accuracy' settings? I would happily accept a slightly slower update speed on the recommendations, or non-optimal recommendations, if it meant eliminating these large CPU spikes and smoothing out my framerate.
I'll let @Hekili look at the numbers from here, he understands this part of it much more than me.
The addon's utilization is, generally, what it is -- we do accept PRs if optimizations are found but it's not going to be top priority vs. current patch release issues.
Would it be possible to re-introduce 'Performance vs. Accuracy' settings? I would happily accept a slightly slower update speed on the recommendations, or non-optimal recommendations, if it meant eliminating these large CPU spikes and smoothing out my framerate.
@syrifgit This would really be your performance settings changes that need to be revisited, whether that's adding a custom entry and allowing to dial these in. I don't have much functional eyeball time left for today, but looking at the performance profiles:
local performanceSettings = {
[1] = { refreshRate = 0.5, combatRate = 0.2, frameCeiling = 20 }, -- Low
[2] = { refreshRate = 0.25, combatRate = 0.1, frameCeiling = 12 }, -- Medium
[3] = { refreshRate = 0.1, combatRate = 0.05, frameCeiling = 10 }, -- High
}If I'm understanding correctly, the low setting is capped at 20ms (meaning, you'd see frame impacts ~50 FPS), medium is 12ms (~83 FPS), and high is 10ms (~100 FPS). We're also lowering refreshRate and combatRate at the same time, so CPU consumption definitely increases pretty quickly.
@JLC827 One thing to keep in mind is that these per-frame "caps" are extremely...soft? They're really checking whether we already surpassed the cap rather than whether we think the next recommendation would push us over the cap. It'd be more accurate to force the coroutine to yield when we think the next batch of work would push us over the max frame time.
@syrifgit This would really be your performance settings changes that need to be revisited, whether that's adding a custom entry and allowing to dial these in. I don't have much functional eyeball time left for today, but looking at the performance profiles:
local performanceSettings = {
[1] = { refreshRate = 0.5, combatRate = 0.2, frameCeiling = 20 }, -- Low
[2] = { refreshRate = 0.25, combatRate = 0.1, frameCeiling = 12 }, -- Medium
[3] = { refreshRate = 0.1, combatRate = 0.05, frameCeiling = 10 }, -- High
}
If I'm understanding correctly, the low setting is capped at 20ms (meaning, you'd see frame impacts ~50 FPS), medium is 12ms (~83 FPS), and high is 10ms (~100 FPS). We're also lowering refreshRate and combatRate at the same time, so CPU consumption definitely increases pretty quickly.
0.8 * max( 20, min( 16.667, 1000/fps) )
Which reduces down to 16 anyways, below the 60 fps threshold. That's for the low setting. I'm not even sure how you would change it any more without adversely affecting the addon anyways.
@JLC827 Did you Already go through all the various graphics settings from the posts/guides/videos?
Thank you both for looking into this more. After digging into your comments and the code, I think I've narrowed the issue down to two key points of confusion.
1. Confusing frameCeiling Logic
@Hekili I'm a little confused by these settings. Why is the frameCeiling set higher for the low setting?
I did some profiling playing around with the settings:
| Performance Setting | Average FPS | 1% Low FPS |
|---|---|---|
| Low | 102 | 33 |
| High | 97 | 42 |
The 'high performance' setting resulted in a smoother gameplay experience. The average CPU usage is slightly higher, but cpu spikes were reduced, presumably because of the frame ceiling being set lower.
2. Dynamic Budget Is Overridden by max()
@syrifgit Looking at the source code where this formula is used, it seems to highlight a potential issue with the frame cap. If I am understanding this correctly, Hekili calculates a dynamic frame cap based on the current game fps, but then the max function causes this in many cases to be disregarded by a higher ceiling.
Perhaps this is a bug and max was supposed to be min?
Proposed Solutions
-
The first solution is to change max to min, if that was the original intent of the logic.
-
I think disentangling the refresh rates and frame ceiling settings would be good to allow users to tweak addon performance. Possibly even setting some lower defaults for the frameCeiling. I vaguely remember these settings (or similar settings) being more accessible and UI editable in older versions of Hekili. This would hopefully be a relatively easy UI change.
I don't think it's necessary to change how the Hekili.maxFrameTime works to make it more strict. It only occasionally goes over the limit (and not by much).
(@syrifgit Yes, I tried various graphics settings. I saw no performance improvement from changing the compatibility graphics settings. However, I did see a big improvement from using the Hyperframe addon, so I can recommend that for improving fps especially in cities, even if the settings require a bit of tweaking to match what you want.)
Most of it was just based on testing and what provided the smoothest experience under different simulated cases.
See the results spreadsheet here: #4900
I've submitted a Draft Pull Request (#5094) with a proposed fix. It addresses the performance logic and refactors the UI settings. I have no tested how the frame cap affects recommendations.
@syrifgit Thanks for linking this. Does the notes column refer to the Hekili UI update speed, or the overall game performance?
That's the snapshot after entering those commands. Entering those commands caused slightly worse visual performance.
| Metric | Defaults | With New Commands |
|---|---|---|
| Avg fps | 236 | 230 |
| Framerate 1% low | 47 | 44 |
I actually have a beta performance thing right now if you want to try it out. Overwrite these files with the ones from my branch: https://github.com/syrifgit/syrif-hekili/blob/perfagain/
Direct file links
UI.lua
Targets.lua
State.lua
Hekili.lua
Classes.lua
I forgot to reply back here saying those commands probably wouldn't do much.
But looking at the performance stats from your snapshot, I really don't see how much it will improve. Sitting at average frames 1 and peak frames 1 is pretty much the best, snappiest, smoothest performance possible. I'd still bet there is some other underlying problem somewhere with your game or system causing these drops.
Your average real time was 13.8ms acrosss 127 iterations. Your peak was 16.14ms. I don't really see 2ms extra tanking your entire game framerate by 80%.
Also FWIW, you're playing with nameplates disabled, have you tried having them on?
@JLC827 Are you by chance using these settings?

@syrifgit I just tested out that pull request and it helps the stuttering a lot!
There is still a little bit of stuttering at high framerates, but it's minor and would probably require a lot more work to address.
I am happy for that pull request to close this issue. Thanks for your work on this and the addon as a whole!
Glad to hear it. Theoretically, you should be able to keep lowering the slider until the stuttering goes away. It's possible you will enter "addon lag" territory before that, though.
What setting(s) felt the best?
Unfortunately, those files gave me worse performance.
| Metric | v11.2.0-1.0.0s | New files |
|---|---|---|
| Avg fps | 236 | 223 |
| Framerate 1% low | 47 | 36 |
Sitting at average frames 1 and peak frames 1 is pretty much the best, snappiest, smoothest performance possible.
I don't understand what these metrics mean. Is this the time (in frames) that Hekili requires for calculations? If so, this is somewhat misleading due to variable framerate.
I'd still bet there is some other underlying problem somewhere with your game or system causing these drops.
These drops only occur with Hekili enabled, and the Addon Profiler tool shows that Hekili has relatively large peak calculation times.
Your average real time was 13.8ms acrosss 127 iterations. Your peak was 16.14ms. I don't really see 2ms extra tanking your entire game framerate by 80%.
Perhaps there is some confusion about the "framerate 1% low fps" metric. It tells you the fps of the slowest 1% of frames. It's a good way to quantitatively measure stutter. Hekili is not having much of an impact on my framerate except for every few frames, where it has a large impact that is causing dropped frames. Looking purely at average frames does not tell the whole picture.
Also FWIW, you're playing with nameplates disabled, have you tried having them on?
Yes. There were no observed changes.
Are you by chance using these settings?
I have all of those settings unchecked. I.e. no frame caps or target fps.
Unfortunately, those files gave me worse performance.
Metric v11.2.0-1.0.0s New files
Avg fps 236 223
Framerate 1% low 47 36Sitting at average frames 1 and peak frames 1 is pretty much the best, snappiest, smoothest performance possible.
I don't understand what these metrics mean. Is this the time (in frames) that Hekili requires for calculations? If so, this is somewhat misleading due to variable framerate.
It's based on your work cap. So in your snapshot, your work cap was set to 16ms per frame, and your peak / average frames being 1 means the addon never took more than that 16ms to complete a set of recommendations, within a margin of error. So with 2.68 average updates per second, Hekili was taking average 37ms of your CPUs real-life-time every second, leaving 963ms for everything else your PC was doing, including wow, other addons, etc.
Performance
| Updates | Updates / sec | Avg. Work | Avg. Time | Avg. Frames | Peak Work | Peak Time | Peak Frames | FPS | Work Cap |
| 127 | 2.68 | 13.81 | 13.82 | 1.00 | 16.13 | 16.14 | 1.00 | 270 | 16.00 |I'd still bet there is some other underlying problem somewhere with your game or system causing these drops.
These drops only occur with Hekili enabled, and the Addon Profiler tool shows that Hekili has relatively large peak calculation times.
I don't doubt that, but if the addon itself was the direct root cause, it would be a widespread problem given the # of downloads per version. I'm not saying it's unrelated, but rather that it's exacerbating an underlying issue. And that it's incredibly hard to diagnose given the number of variables. And even then, it could be the addon causing it. It's just really hard to prove, unless you could find some other addon with similar cpu usage time and patterns and have it not cause the issue. It's a complex problem.
And maybe we need better debug tools for this in the addon, which is something I could try to look at making.
The other question I thought of which I should've asked awhile ago, is this issue new on patch 11.2? Or has it always been this way?
Thank you for explaining those metrics. The problem is that for the frames where Hekili updates, that 16ms of work causes a frame drop.
You are correct that the addon is operating within its 16ms "work cap." However, my entire point is that a 16ms peak calculation is the problem itself.
To achieve 60 FPS, a new frame must be delivered every 16.67ms. When Hekili has a peak work time of 16.14ms, it consumes the entire frame budget, which guarantees a dropped frame and causes the stutter I am measuring with the "1% Low FPS" metric.
The issue isn't the average CPU time over a full second; it is the peak calculation time within a single frame. My proposed fix in the pull request is designed to directly address these peak calculation times.
When using that fix and manually setting the CPU time budget to 1ms, the stutter is significantly reduced (even though in practice Hekili regularly takes around 5ms). Any impact on the responsiveness of the recommendations UI was negligible. What is Hekili using extra computation time for?
if the addon itself was the direct root cause, it would be a widespread problem given the # of downloads per version
It is entirely possible that users either don't notice the stutter/don't attribute it to Hekili/deal with it/don't bother reporting it.
is this issue new on patch 11.2? Or has it always been this way?
I do not know about earlier patches, as I took a break from Season 4 of Dragonflight to patch 11.2.
I used your feedback to tweak my beta solution a bit, if you'd like to try it again. Specifically the Options and UI files have updates to them from last time.
Direct file links
UI.lua
Targets.lua
State.lua
Hekili.lua
Classes.lua
Options\Options.lua
In-Game, you'll get a slider from 1-5 (frame target).
In general, the way it should work is:
- If you experience stutter / FPS drop, increase the slider
- If you experience delay / sluggish recommendation updates, decrease the slider
Play with the values, starting at 1, and let me know what you see.
Okay, I think I have a final solution now, which has been PR'd: #5201
To be honest I lowered the slider all the way to the bottom, as I personally value smooth visuals quite a lot. I didn't notice any problems with the recommendations by doing this, but I did not test it extensively.
I found that the Hekili processing time was still around 4-5ms, even though the cap was set lower. I assume the addon is still doing some stuff that cannot be skipped/skipping is not implemented for.
At this point, I can see that my other addons are contributing more to any performance dips, so I can start looking at those instead.
I guess if a player is aiming for a consistent 180fps (max 5.56ms per frame), then the 4-5ms processing time might cause issues, but I don't know if this would be a problem in practice. I don't know how visible any skipped frames would be at that fps, or if a more powerful CPU would solve that anyway.
I have also tested these changes and I can also confirm this, I had a lot less stutters and lag overall, even on Sin Rogue.
Also put the slider to the lowest % and didn't notice any addon suggestion lag personally, maybe there is but I didn't notice it.
This does not mean 50% of your CPU is used by the addon. It means that 50% of the CPU usage by addons was Hekili. If that is problematic, you can adjust the slider in /hek > [your spec] > Performance and see if it makes a meaningful difference to you.
This does not mean 50% of your CPU is used by the addon. It means that 50% of the CPU usage by addons was Hekili. If that is problematic, you can adjust the slider in /hek > [your spec] > Performance and see if it makes a meaningful difference to you.
Yea I figured on the first part, just poor choice of words on my part. Still, been feeling some weird spikes lately. Had no clue about this slider until digging into this issue. Between All The Things and Hekeli running together, things have feeling really sluggish at times for (what feels like) little reason. I didnt know the complexity and "tax" Hekelli causes on FPS until lately.
Sounds like you should use the performance slider setting. See: #5201
Anyone who reported the issue in discord in the last month has had it resolved by the above change.
Its definietly a hekili issue recently. Used hekili for many years but only recently its the first time my entire game freezes for multiple seconds (leading to wipes as well lol) and this happens quite a lot, sometimes up to 3 times a dungeon, some ppl in the discord report similiar issues.

