blob: db93e5eedc8961c6a2fb6cd97298fe9143ad567d [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
</head>
<body>
<script>
function getOrCreate(id, tagName)
{
var element = document.getElementById(id);
if (element)
return element;
element = document.createElement(tagName);
element.id = id;
var parent = document.body || document.documentElement;
var refNode = parent.firstChild;
parent.insertBefore(element, refNode);
return element;
}
function debug(msg)
{
var span = document.createElement("span");
getOrCreate("console", "div").appendChild(span); // insert it first so XHTML knows the namespace
span.innerHTML = msg + '<br />';
}
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
var verbose = false;
var measureTime = false;
var sab = new SharedArrayBuffer(32);
var workPerCriticalSection = 1;
var workBetweenCriticalSections = 0;
var memory = new Int32Array(sab);
var doubleMemory = new Float64Array(sab);
memory[1] = workPerCriticalSection;
memory[2] = workBetweenCriticalSections;
var numWorkers = 0;
function startWorker(file)
{
if (verbose)
debug("Starting worker: " + file);
numWorkers++;
var worker = new Worker(file);
worker.onmessage = function(event) {
if (event.data == "done") {
if (verbose)
debug("Finished worker: " + file);
if (--numWorkers)
return;
debug("All workers done!");
done();
return;
}
if (event.data.indexOf("Error") == 0) {
debug("Test failed: "+ event.data);
if (window.testRunner)
testRunner.notifyDone();
}
if (verbose)
debug("Event from " + file + ": " + event.data);
};
worker.postMessage(memory);
}
var count = 10000000;
var numThreads = 4;
function done()
{
if (memory[0] != 0)
throw "Error: bad value at memory[0]: " + memory[0];
if (doubleMemory[2] != count * numThreads)
throw "Error: bad value at doubleMemory[1]: " + doubleMemory[1];
if (measureTime)
debug("Speed: " + count / (Date.now() - before) + " KHz.");
debug("Test passed!");
if (window.testRunner)
testRunner.notifyDone();
}
var before = Date.now();
for (var i = 0; i < numThreads; ++i) {
debug("Starting worker!");
startWorker("cascade_lock-worker.js");
}
</script>
</body>
</html>