brittyazel / Neuron

A full-featured World of Warcraft action bar and interface replacement addon
https://www.curseforge.com/wow/addons/neuron
MIT License
30 stars 20 forks source link

CPU Spike causing noticable stutter upon pressing modifier keys #497

Open Ketrel opened 1 year ago

Ketrel commented 1 year ago

Issue description:

When pressing a modifier key (shift/ctrl/alt) there is a noticable stutter.
It looks like it's a result of binding UpdateAll to the ACTIONBAR_SLOT_CHANGED event

How to reproduce:

  1. Have a lot of buttons
  2. Press modifier key
  3. Experience very noticable stutter

Technical info:

Additional context:

I've definitely traced it to that event triggering UpdateAll
I'm trying to narrow down what's causing it, and see if there's anything that could be added to avoid or reduce this stutter. (Commenting out the event binding for that one immediately resolves the stutter, but I'm not sure what might be missed by not reacting to this specific event).

For reference, I added a counter, that ONLY fires when it's ACTIONBAR_SLOT_CHANGED calls UpdateAll, and prints a cumulative total and then tapped shift once. UpdateAll fired 6160 times JUST for the ACTIONBAR_SLOT_CHANGED event.

This particular toon has a total of 356 buttons across all bars, many of which are hidden without specific keypresses, or only show on page 2 or similiar. (This figure was derived by counting the instances of "Macro_text" in the saved variable file in the block for the toon I'm testing with.

ylixir commented 1 year ago

is this a regression, or has it been like this for a while?

Ketrel commented 1 year ago

Nope, not a regression. I have been trying to track this down for a while and finally isolated which event binding was causing it. (This was present at least during all of SL)

AlexFolland commented 1 year ago

Nope, not a regression. I have been trying to track this down for a while and finally isolated which event binding was causing it. (This was present at least during all of SL)

Beautiful. I did the same with https://github.com/brittyazel/Neuron/issues/156 and finally fixed it with https://github.com/brittyazel/Neuron/pull/158 . However, it seems that was reverted, so a performance issue with lots of buttons may still be lurking. I'm not sure my code which makes the buttons only register the necessary events, or similar code, is present.