xref: /sqlite-3.40.0/ext/wasm/speedtest1.html (revision 100b496d)
1*100b496dSstephan<!doctype html>
2*100b496dSstephan<html lang="en-us">
3*100b496dSstephan  <head>
4*100b496dSstephan    <meta charset="utf-8">
5*100b496dSstephan    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6*100b496dSstephan    <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
7*100b496dSstephan    <link rel="stylesheet" href="common/emscripten.css"/>
8*100b496dSstephan    <link rel="stylesheet" href="common/testing.css"/>
9*100b496dSstephan    <title>speedtest1.wasm</title>
10*100b496dSstephan  </head>
11*100b496dSstephan  <body>
12*100b496dSstephan    <header id='titlebar'><span>speedtest1.wasm</span></header>
13*100b496dSstephan    <!-- emscripten bits -->
14*100b496dSstephan    <figure id="module-spinner">
15*100b496dSstephan      <div class="spinner"></div>
16*100b496dSstephan      <div class='center'><strong>Initializing app...</strong></div>
17*100b496dSstephan      <div class='center'>
18*100b496dSstephan        On a slow internet connection this may take a moment.  If this
19*100b496dSstephan        message displays for "a long time", intialization may have
20*100b496dSstephan        failed and the JavaScript console may contain clues as to why.
21*100b496dSstephan      </div>
22*100b496dSstephan    </figure>
23*100b496dSstephan    <div class="emscripten" id="module-status">Downloading...</div>
24*100b496dSstephan    <div class="emscripten">
25*100b496dSstephan      <progress value="0" max="100" id="module-progress" hidden='1'></progress>
26*100b496dSstephan    </div><!-- /emscripten bits -->
27*100b496dSstephan    <div>Output is sent to the dev console because we cannot update the UI while the
28*100b496dSstephan      speedtest is running unless/until we move the speedtest to a worker thread.</div>
29*100b496dSstephan    <hr>
30*100b496dSstephan    <div id='test-output'></div>
31*100b496dSstephan    <script src="common/whwasmutil.js"></script>
32*100b496dSstephan    <script src="common/SqliteTestUtil.js"></script>
33*100b496dSstephan    <script src="speedtest1.js"></script>
34*100b496dSstephan    <script>
35*100b496dSstephan      (function(){
36*100b496dSstephan        const eOut = document.querySelector('#test-output');
37*100b496dSstephan        const logHtml2 = async function(cssClass,...args){
38*100b496dSstephan          const ln = document.createElement('div');
39*100b496dSstephan          if(cssClass) ln.classList.add(cssClass);
40*100b496dSstephan          ln.append(document.createTextNode(args.join(' ')));
41*100b496dSstephan          eOut.append(ln);
42*100b496dSstephan          //this.e.output.lastElementChild.scrollIntoViewIfNeeded();
43*100b496dSstephan        };
44*100b496dSstephan        const doHtmlOutput = false
45*100b496dSstephan        /* can't update DOM while speedtest is running unless we run
46*100b496dSstephan           speedtest in a worker thread. */;
47*100b496dSstephan        const logHtml = (...args)=>{
48*100b496dSstephan          console.log(...args);
49*100b496dSstephan          if(doHtmlOutput) logHtml2('', ...args);
50*100b496dSstephan        };
51*100b496dSstephan        const logErr = function(...args){
52*100b496dSstephan          console.error(...args);
53*100b496dSstephan          if(doHtmlOutput) this.logHtml2('error', ...args);
54*100b496dSstephan        };
55*100b496dSstephan
56*100b496dSstephan        const runTests = function(EmscriptenModule){
57*100b496dSstephan          console.log("Module inited.");
58*100b496dSstephan          const wasm = {
59*100b496dSstephan            exports: EmscriptenModule.asm,
60*100b496dSstephan            alloc: (n)=>EmscriptenModule._malloc(n),
61*100b496dSstephan            dealloc: (m)=>EmscriptenModule._free(m)
62*100b496dSstephan          };
63*100b496dSstephan          //console.debug('Emscripten Module =',EmscriptenModule);
64*100b496dSstephan          //console.debug('wasm =',wasm);
65*100b496dSstephan          self.WhWasmUtilInstaller(wasm);
66*100b496dSstephan          const scope = wasm.scopedAllocPush();
67*100b496dSstephan          try{
68*100b496dSstephan            const maxArgc = 12;
69*100b496dSstephan            const aArgs = [
70*100b496dSstephan              // TODO: accept flags via URL arguments and/or a
71*100b496dSstephan              // UI control. A multi-SELECT element should do
72*100b496dSstephan              // nicely.
73*100b496dSstephan              "speedtest1",
74*100b496dSstephan              "--memdb",
75*100b496dSstephan              "--stats"
76*100b496dSstephan            ];
77*100b496dSstephan            wasm.xCall('__main_argc_argv', aArgs.length,
78*100b496dSstephan                       wasm.scopedAllocMainArgv(aArgs));
79*100b496dSstephan          }finally{
80*100b496dSstephan            wasm.scopedAllocPop(scope);
81*100b496dSstephan          }
82*100b496dSstephan        };
83*100b496dSstephan
84*100b496dSstephan        self.sqlite3TestModule.print = logHtml;
85*100b496dSstephan        self.sqlite3TestModule.printErr = logErr;
86*100b496dSstephan        sqlite3Speedtest1InitModule(self.sqlite3TestModule).then(function(M){
87*100b496dSstephan          setTimeout(()=>runTests(M), 100);
88*100b496dSstephan        });
89*100b496dSstephan      })();
90*100b496dSstephan    </script>
91*100b496dSstephan  </body>
92*100b496dSstephan</html>
93