-
-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Milestone] RCLootCouncil3 #116
Comments
A few more to the list:
|
|
I may slowly write some code for RCLootCouncil3. |
I want to remove autoAward feature. I don't understand why any guild would use it. I never see any non-Epic items that can be master looted in the raid. Does those kind of items exist in the earlier expansion? And I dont think anyone autoAward epic items |
See this for performance optimization: https://www.curseforge.com/wow/addons/findglobals |
Recent bug reports about disconnect suggest more that we shouldn't send unneeded data. Usually server only disconnects you when you send too much data. It should not disconnect when addon has LUA error. If stuck in infinite loop, the client stop responding, but no disconnection |
Yeah, but when are we sending/asking for too much (potentially repeating) data? This can't possibly be about the data sent between clients, it has to be about processing data locally - the excact thing I've been trying to avoid. This has never been an issue before! You'll crash if you break lua rules (most likely infinite loop), you'll get disconnected if you break Blizzard stuff. I'm still not seeing any reasons from the current issues that should cause disconects (except for the 30 people count). |
I haven't really seen your edited comment, and not considered your For the find globals stuff - I have begun that, but that has been down prioritied during your recent additions. But yeah, it's probably one of the biggest performance enchancements that can currently be done (LibDebug stfu much?). |
Did people report that the game freezes? If not, disconnection is not caused by infinite loop. Long ago, EPGP module has a bug causes infinite loop. It freezes the game, but no disconnection. |
|
Auto award was a very requested feature back in the day for giving out random greens/blues to disenchanters.
|
Now, you could argue all clients will do a |
TLDR, GetItemInfo does not query the server. It fetches information on the disk to the memory. Since GetItemInfo does not involves network traffic, it should both faster and more reliable than transmitting item info over addon channel.
|
It seems you're right.
Furthermore I found that:
Also, Wowprogramming really isn't reliable for anything that's been changed in the last two expansions (quite good for old UI/event stuff though). The wikis are generally much more reliable.
|
So I run '/rc fulltest 6" then run this code. It shows the lootTable now only takes 163 bytes to transmit. I have an idea to compress data. We can have a dictionary to replace commonly used word, if they are used as the key to the table. For example, we can reserve all ascii value >= 128 and replace "link" by "\128", replace "bagged" by "\129", etc. Those stuffs do takes lots of spaces. Because the addon is communication heavy, I do want to make the messages in most cases be within 255 character limit. |
Further more, duplicate items will be shown in the same session. Just need to adjust the UI a little bit. |
I don't think it's worth it to do string replacements. If we know lootTable will always only contain link and bagged, then a number indexed table will do just fine. I can't imagine a good way to display several equal items in the same session - it will be confusing, and imo showing two tabs is better. It might be worth combining equal items when sending out the lootTable though - that's easily done both when sending and recreating at the receiving end. |
Also, what's the result |
In another "/rc fulltest 6". |
|
I only asked because I've always found encoding to increase the size. There's a huge difference in doing replacements in table names and actual data. The latter is fine, provided it isn't slow. I did a quick test of your encoding: Single itemstring
Table of 6 items (last 2 is duplicates)Edit: 4 items doesn't really make sense.
Also, you don't need to transmit "item" - it can always be added on receive as we know it's needed. |
So is it worth it? Maybe, not sure. In the previous example, once any other data is added, it would be two messages any way, and so far my testing shows a message takes equal time no matter how big that message is (as it really should). I expect most transmission to be shorted down from 2 to 1 with this change, but it really depends on what needs to be sent. |
Goal of communcation handling in RCv3
|
The main reason is that it is an example and the encoding didn't avoid the characters escaped by the serializer. non-print characters such as \003 is prefixed by an additional escape character. And the real one should be base 220 instead of base 100. Can you test again, but replaced all ASCII characters by adding 32? i.e. replace \003 by \035, \002 by \034 Yep, I can confirm it's not worth it. after tested myself. |
Yes, Huffman compression is more effective than the version of your encoding I used. I'll update my result for clarity. |
As for your communication goals:
One thing to remember when talking encoding/serializing/compression - it can't have too much overhead. If each and every command sent needs a different encoding just to squeeze out a few more bytes, then it's probably not worth it. |
Next I want to talk about the code structure. I think a very good example is the addon TradeskillMaster. That is a large project with well designed structure.
|
I generally agree, and already mentioned that earlier.
|
Can you include test script in the repository? We can exclude it in .pkgmeta Started to use this for testing: https://github.com/IUdalov/u-test |
I have done a new serializer (Some extra tests need to be added later), which roughly 20% smaller after Compressed by LibCompress compared to the compressed result of AceSerializer. (Tested on RCLootCouncil.db.profile and RCLootCouncil.mldb("/rc fulltest 6"). Feel free to give suggestion how to optimize it. (For smaller data that can be contained within 255 characters, roughly 5% smaller) Optimizations of this Serializer:
Cons:
Code to compare RCSerializer and AceSerializer: https://gist.github.com/SafeteeWoW/73fcc52a141376c200acab0606555c75 RCSerializer-3.0: https://github.com/SafeteeWoW/RCLootCouncil3/blob/master/RCLibs/Serializer.lua I want to release this serializer as a standalone version, but I have to get rid of all Ace3 code in order to follow its license. 30% smaller than AceSerializer after LibCompressed for this data: https://gist.github.com/evil-morfar/b2706d1954c623b292b890d9d04fc19c Correctness has been verified. |
Folder for tests/scripts along with those I've been using so far: 0f91642 Keep in mind I did not intend anyone but me to see those, hence the mess. It was originally created using extracts of code (like Serializer) as I wasn't aware someone had made a Great job with the serializer. Are you certain the reserved bits can't be in the text? /009 is tab, which might be included. Of course it could be a requirement not to use those, but I'm more curious about the others. Also Do you have an idea of how much more cpu time this costs? |
The serializer intends to work with any data except function/userdata/thread/NaN(Not a number). If the string was seen more than once during the serialization, it is encoded as a number index instead. |
For the CPU part, I tested with your extreme data in game, https://gist.github.com/evil-morfar/b2706d1954c623b292b890d9d04fc19c, timed by debugprofilestop() AceSer: 4.24ms (67537 bytes) However, because RCSer generates smaller data than AceSer, less CPU used when compressed by LibCompress. Compress AceSer: 78.27ms Overall, RCSer uses less CPU than AceSer if compressed by LibCompress AceSer+Compress: 93.51ms (33918 bytes) Then I tested with my MLdb(RCLootCouncil.mldb): AceSer: 0.38ms (2042 bytes) RCSer has nearly the same performance as AceSer In conclusion, although RCSerializer is slower than AceSerializer, however, since it generates smaller data, its performance impact is canceled by the less CPU usage when compressed by Huffman encoding. And I haven't considered the fact slightly more CPU needed to transmit larger data. Thus, no significant performance difference compared to AceSerializer. |
Due to my limited time, the ML changes, BfA release, and presumably patch 8.0 a month before, here's my current plans for future updates: 2.7.10 2.8 2.9 / 3.0 (patch 8.0 - probably july 3/4) 3.0 / 3.1 (BfA launch, august 14) 3.1+ |
That's a good plan. I would help if I can. But my current priority is the new Compressor (already released, hope you can help to test it) and the new serialize (50% ready. working on it this weekend). Getting communication quicker will resolve lots of issue (Also, we don't need to transmit item info. I dont have time to update my PR to the item info module though, but it should mostly works). As I tested out, using the new compressor and my WIP serializer, transmitting all item equipped on a player (removing "item" and trailing :::: needs no more than 2 WoW messages (< 500 bytes), so consider if you would do that. |
I'll make sure to test it during development. Also just fyi, I have beta access (and alpha) if you need something tested. I'll probably develop 3.0 on the beta. |
As usual things are delayed (this time mostly due to the reduced raiding in my guild meaning me being unable to test stuff when I had a lot of time for it). This means PL isn't quite ready, but will be released soon with patch 8.0 updates as v2.8. This will need a few updates, which have first priority, but after that I'll focus on v3.0 (skipping 2.9) as per my post above. Any updates on the compressor and/or serializer? |
Hi, I was afk this month, spending the nights on FIFA world cups. So there is no progress this month. |
Yeah, world cups did take a lot of time :) Please keep me updated on the progress on the serializer. |
Just an update on v3.0. There's simply too many things that requires refactoring for it to make sense with the comms update. That combined with the PL issues (and the addition of Azerite Armor becoming tradeable) means I won't have v3.0 ready for BFA raids release. For now I'm going to postpone it to the next major patch/raid release. This also makes it a lot easier to test changes, and allows me to focus on the current new features. |
Although it would be a milestone for the next expansion, I just want to list the ideas for future reference.
Goal for RCLootCouncil3:
The text was updated successfully, but these errors were encountered: