This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
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
Performance: Object sleep API #191
Comments
I didn't really had the time to check the forum since yesterday since I was travelling, but this seems to be a good idea ! Not sure though however about the automatic feature, as both putting them to sleep or awake automatically would effectively could be quite CPU consuming . |
@parasyte though it's not really related, I also wanted to look at replacing the current object array by a hash table (using the object GUID for key), as it should improve performances as well when parsing and accessing the object pool/list |
Improvements when doing lookup : http://jsperf.com/indexof-vs-array-hash |
I had the same idea. See also a similar test in #192 that shows how faking a remove operation is faster than both |
@obiot: auto-sleep is easy. Just plug it in right here: https://github.com/melonjs/melonJS/blob/master/src/core.js#L1422 But auto-wakeup is really hard. |
Yes I was actually more concerned about the auto-wake up :) |
Reminder: Implementing auto-sleep through callbacks is the right way to do this. A "viewport leave" callback is very easy, as we know. With the new collision detection in #103, we will have a spatial grid that already contains objects... Seems like this can be reused for auto-wakeup, too! When a new spatial grid cell enters the viewport, fire the "wakeup" callback on all objects in that cell. Wow ... that seems almost too easy to be true! |
something interesting i just spotted in the chipmunk API : it's also possible to disable object collision check for idle object, and specify a |
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
Following discussion on the forum, it sounds like a good idea to implement an object sleep mechanism to save CPU cycles for objects that have nothing to do.
The way I imagine it is having two pools for game objects; the
gameObjects
array in core.js, and a new array forsleepingObjects
. Callingme.game.sleep(obj)
will removeobj
fromgameObjects
, and push it intosleepingObjects
. Andme.game.wakeup(obj)
will do the opposite.A sleeping object will never be iterated in the update or draw loops, saving precious CPU time.
Further, we can enable a flag like
me.sys.enableAutoSleep
to put objects to sleep when they leave the viewport. Deciding on a good method of waking up a sleeping object without polling will be crucial for this flag to be useful. I suppose worst-case, polling infrequently (once per second?) could work.The text was updated successfully, but these errors were encountered: