Neuron

Neuron

98.2k Downloads

CPU Spike causing noticable stutter upon pressing modifier keys

Ketrel opened this issue · 3 comments

commented

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:

  • Addon Version: 1d7813b
  • Client: Retail
  • Client Patch Version: 10.0.2

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.

commented

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

commented

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)

commented

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 #156 and finally fixed it with #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.