<!DOCTYPE html>
<html>
<head>
<!--
 Copyright (C) 2007 Apple Inc.  All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

 THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-->

<title>SunSpider JavaScript Benchmark Results</title>
<link rel="stylesheet" href="sunspider.css"></link>
</head>

<body>
<h2><span id="logo">&#x2600;</span>SunSpider JavaScript Benchmark Results</h2>

<p><a href="sunspider-driver.html">Run Again</a></p>

<p><input style="width: 90%;" id="selfUrl" type="text" readonly="readonly"></input><br>
<small>(You can bookmark this results URL for later comparison.)</small></p>

<form onsubmit="event.preventDefault(); compare(other.value);">To compare to another run, paste a saved result URL in the text field below and press enter:<br>
<input style="width: 90%;" name="other" type="text"></input><br>
</form>

<pre id="console">
</pre>


<script>
var selfUrlInput = document.getElementById("selfUrl");
selfUrlInput.value = location;

var output = pivot(eval("(" + decodeURI(location.search.substring(1)) + ")"));

function pivot(input) {
    var output = [];
    for (var test in input) {
        for (var i = 0; i < input[test].length; i++) {
             if (!output[i])
                 output[i] = {};
             output[i][test] =  input[test][i];
        }
    }
    return output;
}

function print(str) {
    var console = document.getElementById("console");
    console.appendChild(document.createTextNode(str));
    console.appendChild(document.createElement("br"));
}
</script>

<script src="sunspider-test-prefix.js"></script>
<script src="sunspider-analyze-results.js"></script>
<script src="sunspider-compare-results.js"></script>

<script>
var output2 = output;

function compare(other)
{
    document.getElementById("console").innerHTML = "";
    var output1 = pivot(eval("(" + decodeURI(other.split("?")[1]) + ")"));
    sunspiderCompareResults(output1, output2);
}
</script>


</body>
</html>
