102 lines
2.4 KiB
HTML
102 lines
2.4 KiB
HTML
<!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>
|