1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/asmjscache/test/test_workers.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,67 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=941830 1.8 +--> 1.9 +<head> 1.10 + <meta charset="utf-8"> 1.11 + <title>asm.js browser tests</title> 1.12 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 1.14 +</head> 1.15 +<body> 1.16 + <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=941830">asm.js browser tests</a> 1.17 + <p id="display"></p> 1.18 + <div id="content" style="display: none"></div> 1.19 + <pre id="test"></pre> 1.20 + 1.21 + <script> 1.22 + var jsFuns = SpecialPowers.Cu.getJSTestingFunctions(); 1.23 + ok(jsFuns.isAsmJSCompilationAvailable()); 1.24 + 1.25 + var asmjsCode = "function f() { 'use asm';"; 1.26 + for (var i = 0; i < 5000; i++) 1.27 + asmjsCode += "function g" + i + "() { return " + i + "}"; 1.28 + asmjsCode += "return g42 }"; 1.29 + ok(asmjsCode.length > 100000, "code is long enough to definitely hit the cache"); 1.30 + 1.31 + var workerCode = asmjsCode; 1.32 + workerCode += "if (f()() !== 42) postMessage('fail'); else postMessage('ok');"; 1.33 + workerCode = 'var code = "' + workerCode + '"; eval(code); eval(code)'; 1.34 + var workerBlob = new Blob([workerCode], {type:"application/javascript"}); 1.35 + 1.36 + var mainCode = asmjsCode; 1.37 + mainCode += "ok(jsFuns.isAsmJSModuleLoadedFromCache(f), 'f is a cache hit')\n"; 1.38 + mainCode += "var g42 = f();\n"; 1.39 + mainCode += "ok(jsFuns.isAsmJSFunction(g42), 'g42 is an asm.js function');\n"; 1.40 + mainCode += "ok(g42() === 42, 'g42 returns the correct result');\n"; 1.41 + mainCode += "SimpleTest.finish();\n"; 1.42 + var mainBlob = new Blob([mainCode], {type:"application/javascript"}); 1.43 + 1.44 + var w = new Worker(URL.createObjectURL(workerBlob)); 1.45 + 1.46 + var received = 0; 1.47 + w.onmessage = function(e) { 1.48 + switch (received) { 1.49 + case 0: 1.50 + ok(e.data === "ok", "Received first message"); 1.51 + received = 1; 1.52 + break; 1.53 + case 1: 1.54 + ok(e.data === "ok", "Received second message"); 1.55 + received = 2; 1.56 + 1.57 + var script = document.createElement('script'); 1.58 + script.src = URL.createObjectURL(mainBlob); 1.59 + document.body.appendChild(script); 1.60 + break; 1.61 + default: 1.62 + throw "Huh?"; 1.63 + } 1.64 + } 1.65 + 1.66 + SimpleTest.waitForExplicitFinish(); 1.67 + </script> 1.68 + 1.69 +</body> 1.70 +</html>