Exercise web browsers under game-like conditions
JavaScript CSS
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin initial sending progress May 26, 2011
chess minor fixes to work with api changes Jan 12, 2012
droid cleaned up file structure for simple exporting of test apps Mar 18, 2011
engine minor fixes to work with api changes Jan 12, 2012
iframe cache testing Mar 21, 2011
lib minor fixes to work with api changes Jan 12, 2012
perf Results are now persisted and can be viewed Jul 8, 2011
pvn fixing space game to work multiplayer again Oct 17, 2011
resize minor fixes to work with api changes Jan 12, 2012
space fixing space game to work multiplayer again Oct 17, 2011
tools Added per-file model conversion options for scaling, inverting texcoo… Mar 11, 2011
trench Initial checkin of the webgl benchmark Jun 23, 2011
webglbench Code cleanup. Jun 24, 2011
.gitignore messed around with SSL. not working yet. Feb 17, 2011
README.md Update README.md May 14, 2014
favicon.ico cache.manifest for chess, send_delay for slow network testing Apr 21, 2011
license.txt initial checkin Jan 25, 2011


Archived Repo

This is an archived project and is not currently being developed by Facebook. Please do not file issues or pull-requests against this repo. If you wish to continue to develop this code yourself, we recommend you fork it.

Proceed and be bold!


JSGameBench exists to explore HTML5’s game performance limits. For version 0.1, the focus is sprite performance a player is likely to see. Scoring is how many sprites are drawn, so large scores are better. Going forward, we want to collect peak and average scores for browsers across a range of hardware configurations. We hope JSGameBench helps the community improve game performance and we look forward to HTML5 game engine developers improving on our ideas and crushing these number!

For each render path, JSGameBench draws as many moving, animating sprites as possible at 30fps against a background with both axis-aligned and rotated sprites. We try both because significant performance differences between the two indicate flaws or oversights in current rendering techniques. More importantly, while animation can be used instead of sprite rotations, it is often an unacceptable trade off that game developers should not be forced to make.

The final score is the geometric mean of the axis aligned and rotated scores. Geometric mean is used to prevent a high axis aligned score from hiding the poor rotated performance.


JSGameBench is licensed under the Apache 2.0 license (http://www.apache.org/licenses/LICENSE-2.0) except as noted otherwise.

How to run it

install nodejs

Get the stable build of nodejs from http://nodejs.org/#download ./configure --prefix=~/local make;make install add ~/local/bin to your PATH


Install npm node package manager https://github.com/isaacs/npm curl http://npmjs.org/install.sh | sh

install node socket.io package

npm install socket.io

run it (runs on port 8081 by default)

node bin/jsgamebench


Install node-inspector for server debugging: (https://github.com/dannycoates/node-inspector)

npm install node-inspector