Emscripten #22

Open
josephg opened this Issue Apr 4, 2013 · 11 comments

Comments

Projects
None yet
5 participants
Owner

josephg commented Apr 4, 2013

Port the C code to emscripten and benchmark it.

Contributor

robwalch commented Apr 4, 2013

Going the asm.js route or just need to know if it's faster before porting 6.2?

I used the Emscripten compiled box2d.js and really did not like the interface. It's one of the reasons I switched to Chipmunk-js. I think it'll be a great thing to have but I hope it doesn't come at such a heavy cost. It's pretty nice not having to use getters and settings for everything. The other thing is will it really take care of GC given how the library is used....? Can't wait to find out :)

Owner

josephg commented Apr 4, 2013

I want to know how much faster it is on firefox, how much slower on chrome and how much bigger it ends up. Especially if V8 ends up implementing the same optimizations, and especially because we have a great benchmarking library in ChipmunkJS.

Shame to hear that we'd need getters & setters for everything, though ChipmunkJS is currently a bit of a gross mixed bag at the moment anyway.

Owner

josephg commented Jun 30, 2013

I tried it out. Its 2-3x as much code, but way faster. Chipmunk moves from taking ~8x the time in C to ~1.4x the time. (At least in that test, its only 40% slower)
http://chipmunk-physics.net/forum/viewtopic.php?f=1&t=2806&sid=164cfa132f3c828edf9cd0bc9ef0a39f
[Edit: sorry, 1.4x, not 1.7x]

Collaborator

nornagon commented Jun 30, 2013

Wow. Worth it!

j

On Sun, Jun 30, 2013 at 4:04 PM, Joseph Gentle notifications@github.comwrote:

I tried it out. Its 2-3x as much code, but way faster. Chipmunk moves from
being ~8x slower than C to ~1.7x slower than C.

http://chipmunk-physics.net/forum/viewtopic.php?f=1&t=2806&sid=164cfa132f3c828edf9cd0bc9ef0a39f


Reply to this email directly or view it on GitHubhttps://github.com/josephg/Chipmunk-js/issues/22#issuecomment-20242802
.

Owner

josephg commented Jun 30, 2013

Agree. - Though I'm not sure what the best way to expose the API to JS is. In C, vectors live on the stack not the heap.

  • I can change the API (eg, setPos(x, y) instead of setPos(myvect) - although any function that returns a vector will be in trouble.
  • I could keep using a JS implementation of vectors for API methods, and then have wrapper functions which rewrite vectors to their native equivalents for chipmunk.
  • I could put vectors in the emscripten heap and pass them through to emscripten as pointers, although then they won't get garbage collected.

All options are bad. :/

Owner

josephg commented Jun 30, 2013

@nornagon ping for opinion

Collaborator

nornagon commented Jun 30, 2013

I like option 2 best.

Impressive results - it's a shame to lose the nice OOP layer you've added on top - so perhaps there's a way to wrap it (although im sure it'd cost us some, there seems to be plenty of performance to spare (8x!) )

Owner

josephg commented Sep 18, 2013

Yeah I agree. Once you have your space set up, way more work happen inside chipmunk than over the chipmunk <-> JS layer.

Hey @josephg have you worked on this at all recently? I am using chipmunk-js in a game engine, and am highly interested in a faster and more up-to-date js port of Chipmunk2D. Any news?

Owner

josephg commented Jan 23, 2014

1: http://josephg.com/blog/chipmunkjs-and-emscripten
2: http://josephg.com/blog/chipmunk-in-asm-js

I was playing around with my own low level javascript-style language (since LLJS has very little love) but I haven't had time to work on it.

In short, no news, no updates. If you're keen to take a stab at it, be by guest.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment