Merge pull request #8 from sethladd/master

Run benchmarks in browser
diff --git a/example/Tracer/dart/app.dart b/example/Tracer/dart/app.dart
new file mode 100644
index 0000000..f07f077
--- /dev/null
+++ b/example/Tracer/dart/app.dart
@@ -0,0 +1,29 @@
+library ray_trace;
+
+import 'dart:html';
+import 'dart:math';
+
+part 'color.dart';
+part 'engine.dart';
+part 'materials.dart';
+part 'scene.dart';
+part 'shapes.dart';
+part 'vector.dart';
+part 'renderscene.dart';
+
+// used to check if raytrace was correct (used by benchmarks)
+var checkNumber;
+
+main() {
+  var button = query('#render');
+  var canvas = query('#canvas');
+  var time = query('#time');
+  button.onClick.listen((e) {
+    canvas.width = int.parse(query('#imageWidth').value);
+    canvas.height = int.parse(query('#imageHeight').value);
+    var sw = new Stopwatch()..start();
+    renderScene(e);
+    sw.stop();
+    time.text = sw.elapsedMilliseconds.toString();
+  });
+}
\ No newline at end of file
diff --git a/example/Tracer/dart/index.html b/example/Tracer/dart/index.html
new file mode 100644
index 0000000..65568d2
--- /dev/null
+++ b/example/Tracer/dart/index.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <title>index</title>
+  </head>
+ 
+  <body>   
+    <canvas id="canvas" width="100" height="100" style="border:1px solid black"></canvas>
+    
+    <div>
+      Width: <input type="text" id="imageWidth" value="100">
+    </div>
+    <div>
+      Height: <input type="text" id="imageHeight" value="100">
+    </div>
+    <div>
+      Pixel Size: <input type="text" id="pixelSize" value="5,5">
+    </div>
+    <div>
+      Diffuse: <input type="checkbox" id="renderDiffuse" checked>
+    </div>
+    <div>
+      Shadows: <input type="checkbox" id="renderShadows" checked>
+    </div>
+    <div>
+      Highlights: <input type="checkbox" id="renderHighlights" checked>
+    </div>
+    <div>
+      Reflections: <input type="checkbox" id="renderReflections" checked>
+    </div>
+    <button id="render">Render</button>
+    <div>
+      Time (ms): <span id="time"></span>
+    </div>
+    <script type="application/dart" src="app.dart"></script>
+    <!-- for this next line to work, your pubspec.yaml file must have a dependency on 'browser' -->
+    <script src="packages/browser/dart.js"></script>
+  </body>
+</html>
diff --git a/example/Tracer/dart/renderscene.dart b/example/Tracer/dart/renderscene.dart
index 12eb3dc..49324aa 100644
--- a/example/Tracer/dart/renderscene.dart
+++ b/example/Tracer/dart/renderscene.dart
@@ -109,6 +109,7 @@
                              renderDiffuse: renderDiffuse,
                              renderShadows: renderShadows,
                              renderReflections: renderReflections,
+                             renderHighlights: renderHighlights,
                              rayDepth: rayDepth
                              );
 
diff --git a/example/Tracer/js/Tracer.js b/example/Tracer/js/Tracer.js
index 699c109..5800e28 100644
--- a/example/Tracer/js/Tracer.js
+++ b/example/Tracer/js/Tracer.js
@@ -558,7 +558,7 @@
             	this.setPixel(x, y, color);
             }
         }
-        if (checkNumber !== 2321) {
+        if (canvas == null && checkNumber !== 2321) {
           throw new Error("Scene rendered incorrectly");
         }
     },
@@ -702,8 +702,8 @@
     }
 };
 
-
-function renderScene(){
+// 'event' null means that we are benchmarking
+function renderScene(event){
     var scene = new Flog.RayTracer.Scene();
 
     scene.camera = new Flog.RayTracer.Camera(
@@ -771,22 +771,39 @@
 
     scene.lights.push(light);
     scene.lights.push(light1);
-
-    var imageWidth = 100; // $F('imageWidth');
-    var imageHeight = 100; // $F('imageHeight');
-    var pixelSize = "5,5".split(','); //  $F('pixelSize').split(',');
-    var renderDiffuse = true; // $F('renderDiffuse');
-    var renderShadows = true; // $F('renderShadows');
-    var renderHighlights = true; // $F('renderHighlights');
-    var renderReflections = true; // $F('renderReflections');
+    
+    var imageWidth, imageHeight, pixelSize;
+    var renderDiffuse, renderShadows, renderHighlights, renderReflections;
+    var canvas;
+    
+    if (typeof(event) == 'undefined' || event == null) {
+	  imageWidth = 100;
+	  imageHeight = 100;
+	  pixelSize = "5,5".split(',');
+	  renderDiffuse = true;
+	  renderShadows = true;
+	  renderHighlights = true;
+	  renderReflections = true;
+	  canvas = null;
+	} else {
+	  imageWidth = parseInt(document.getElementById('imageWidth').value);
+	  imageHeight = parseInt(document.getElementById('imageHeight').value);
+	  pixelSize = document.getElementById('pixelSize').value.split(',');
+	  renderDiffuse = document.getElementById('renderDiffuse').checked;
+	  renderShadows = document.getElementById('renderShadows').checked;
+	  renderHighlights = document.getElementById('renderHighlights').checked;
+	  renderReflections = document.getElementById('renderReflections').checked;
+	  canvas = document.getElementById("canvas");
+	}
+    
     var rayDepth = 2;//$F('rayDepth');
 
     var raytracer = new Flog.RayTracer.Engine(
         {
             canvasWidth: imageWidth,
             canvasHeight: imageHeight,
-            pixelWidth: pixelSize[0],
-            pixelHeight: pixelSize[1],
+            pixelWidth: parseInt(pixelSize[0]),
+            pixelHeight: parseInt(pixelSize[1]),
             "renderDiffuse": renderDiffuse,
             "renderHighlights": renderHighlights,
             "renderShadows": renderShadows,
@@ -795,7 +812,5 @@
         }
     );
 
-    raytracer.renderScene(scene, null, 0);
+    raytracer.renderScene(scene, canvas, 0);
 }
-
-Benchmark.report("Tracer", renderScene, renderScene);
diff --git a/example/Tracer/js/app.js b/example/Tracer/js/app.js
new file mode 100644
index 0000000..ccead77
--- /dev/null
+++ b/example/Tracer/js/app.js
@@ -0,0 +1,12 @@
+  var button = document.getElementById('render');
+  var canvas = document.getElementById('canvas');
+  var time = document.getElementById('time');
+  
+  button.addEventListener('click', function (e) {
+    canvas.width = parseInt(document.getElementById('imageWidth').value);
+    canvas.height = parseInt(document.getElementById('imageHeight').value);
+    var start = new Date();
+    renderScene(e);
+    var stop = new Date();
+    time.innerHTML = (stop - start).toString();
+  });
\ No newline at end of file
diff --git a/example/Tracer/js/benchmark_tracer.js b/example/Tracer/js/benchmark_tracer.js
new file mode 100644
index 0000000..3aac5b5
--- /dev/null
+++ b/example/Tracer/js/benchmark_tracer.js
@@ -0,0 +1 @@
+Benchmark.report("Tracer", renderScene, renderScene);
\ No newline at end of file
diff --git a/example/Tracer/js/index.html b/example/Tracer/js/index.html
new file mode 100644
index 0000000..6981f68
--- /dev/null
+++ b/example/Tracer/js/index.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <title>index</title>
+  </head>
+ 
+  <body>   
+    <canvas id="canvas" width="100" height="100" style="border:1px solid black"></canvas>
+    
+    <div>
+      Width: <input type="text" id="imageWidth" value="100">
+    </div>
+    <div>
+      Height: <input type="text" id="imageHeight" value="100">
+    </div>
+    <div>
+      Pixel Size: <input type="text" id="pixelSize" value="5,5">
+    </div>
+    <div>
+      Diffuse: <input type="checkbox" id="renderDiffuse" checked>
+    </div>
+    <div>
+      Shadows: <input type="checkbox" id="renderShadows" checked>
+    </div>
+    <div>
+      Highlights: <input type="checkbox" id="renderHighlights" checked>
+    </div>
+    <div>
+      Reflections: <input type="checkbox" id="renderReflections" checked>
+    </div>
+    <button id="render">Render</button>
+    <div>
+      Time (ms): <span id="time"></span>
+    </div>
+    <script src="Tracer.js"></script>
+    <script src="app.js"></script>
+  </body>
+</html>
diff --git a/example/Tracer/js/run.sh b/example/Tracer/js/run.sh
index 1cb2c58..567a3c5 100755
--- a/example/Tracer/js/run.sh
+++ b/example/Tracer/js/run.sh
@@ -3,4 +3,4 @@
 # d8 is a tool included with V8:
 # https://code.google.com/p/v8/
 
-d8 bench.js Tracer.js
+d8 bench.js Tracer.js benchmark_tracer.js
diff --git a/pubspec.yaml b/pubspec.yaml
index ae2534a..0071458 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,7 @@
 name: benchmark_harness
 version: 1.0.2
-description: The official Dart project benchmark harness.
 author: Dart Project <johnmccutchan@google.com>
+description: The official Dart project benchmark harness.
 homepage: http://www.dartlang.org
+dependencies:
+  browser: any