Skip to content
This repository

Emscripten #22

Open
josephg opened this Issue April 04, 2013 · 11 comments

5 participants

Joseph Gentle Rob Walch Jeremy Apthorp Mario Gonzalez Chad Engler
Joseph Gentle
Owner

Port the C code to emscripten and benchmark it.

Rob Walch

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 :)

Joseph Gentle
Owner

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.

Joseph Gentle
Owner

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]

Jeremy Apthorp
Collaborator
Joseph Gentle
Owner

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. :/

Joseph Gentle
Owner

@nornagon ping for opinion

Jeremy Apthorp
Collaborator

I like option 2 best.

Mario Gonzalez

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!) )

Joseph Gentle
Owner

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

Chad Engler

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?

Joseph Gentle
Owner

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
Something went wrong with that request. Please try again.