<!DOCTYPE HTML>
<html lang="en">
<head>
<script src="library/benchmark.js"></script>
<script src="library/three.js"></script>

<title>Doedel Drie Dee || Webworker Benchmark</title>
<style>
</style>
</head>
<body>

<script>
var worker = new Worker('webworker/benchmark.js');
var geometry = new THREE.BoxGeometry(10, 30, 10).clone();
//var geometry = new THREE.TorusKnotGeometry(10, 3, 200, 200).clone();

new Benchmark.Suite().add('Buffer Geometry', function () {

	var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);

	worker.postMessage(bufferGeometry);

	//this happens in the worker
	var workerGeometry = new THREE.Geometry().fromBufferGeometry(bufferGeometry);
	workerGeometry.mergeVertices();

}).add('Buffer Geometry Transferrable Object', function () {

	var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);

	var buffers = [];

	for (var i = 0; i < bufferGeometry.attributesKeys.length; i ++) {
		var key = bufferGeometry.attributesKeys[i];
		buffers.push(bufferGeometry.attributes[key].array.buffer);
	}

	worker.postMessage(bufferGeometry, buffers);

	//this happens in the worker
	//this is redundant... 
	//buffers are transferred to worker so the do not exist in this part of the script
	//[TEST NOT VIABLE]
	var workerGeometry = new THREE.Geometry().fromBufferGeometry(bufferGeometry);
	workerGeometry.mergeVertices();

}).add('Geometry JSON', function () {	

	var json = geometry.toJSON().data;
	worker.postMessage(json);

	//worker.postMessage(geometry);

	//this happens in the worker
	var loader = new THREE.JSONLoader();
	var workerGeometry = loader.parse(json).geometry;
	workerGeometry.mergeVertices();

}).on('cycle', function (event) {

	document.body.innerHTML += "<p>" + String(event.target) + "</p>";

}).on('complete', function () {

	document.body.innerHTML += "<p>" + 'Fastest is "' + this.filter('fastest').pluck('name') + '"' + "</p>";

}).run({
	'async': true
});
</script>

</body>
</html>