| |
Ever since 1.10, my FPS has been worse than 1.9 and I get random and somewhat frequent dips to single digit frame rates. I finally got some time to look into what mod(s) are causing this and I started with Gello's OnEventWatch (http://www.wowinterface.com/downloads/fileinfo.php?id=4840).
One of the things I noticed that makes no sense to me is how often WhisperCast was receiving ACTIONBAR_SLOT_CHANGED events. WhisperCast needs to hook this because it uses action bar buttons to determine spell ranks and whatnot. When a button is added or removed, it scans all of the buttons to set up the available spell ranks to cast (e.g. Arcane Intellect(Rank 5), etc). Sure, WhisperCast could be optimized to only check the changed action bar button slot when ACTIONBAR_SLOT_CHANGED is fired, but since you rarely change action bar buttons, this shouldn't be an issue, right?
The problem: ACTIONBAR_SLOT_CHANGED is being called all the frickin' time! Every time it's called, WhisperCast scans all of the action buttons and there is a small slowdown. I threw a debug print in to display arg1 (which should be the button ID) and ran a few test cases:
1. With no "find" skill up, casting Find Minerals generates two events; arg1 = 59 (ID of Find Minerals button pushed) and then arg1 = 117 (which makes no sense since mages don't even have that many action bars).
2. With Find Minerals up, casting Find Minerals again does nothing (as it should)
3. Right-clicking on the Find Minerals minimap icon generates two events; arg1 = 59 and 117 again.
4. Whether I target myself and press Remove Lesser Curse or press Remove Lesser Curse, get the target selection hand, and target myself, no events are fired. Since I have no curses on me, however, I get the "Nothing to dispel" error message.
5. Casting Ice Armor generates one event; arg1 = 33 which is Ice Armor's ID.
6. Casting Ice Armor a 2nd time while the first is still up generates no events.
7. Right clicking on the Ice Armor buff icon to cancel it also generates one event; again arg1 = 33.
8. Letting Ice Armor time out also generates one event; arg1 = 33
9. Casting Arcane Missiles generated two events; arg1 = 10 both times (AM's button ID).
10. Casting all attack spells (FireBlast, Fireball, Polymorph, Detect Magic, Blizzard, etc) properly do nothing.
11. If I cast a lower rank spell (say Amp Magic(Rank 1)) that is not in an action bar, no events are generated.
I am using CT_BarMod (and the whole CT suite actually), but I can't see how that would matter. I don't know how one mod could reliably determine which other mods registered for specific events. Even if you could determine that stuff, what purpose would faking this event be?
I'm left thinking this is a Blizzard UI engine problem. Am I missing something or is this analysis correct? Can anyone else reproduce this behavior or is it just me?
|