mirror of
				https://github.com/tursodatabase/libsql.git
				synced 2025-11-04 04:48:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!doctype html>
 | 
						|
<html lang="en-us">
 | 
						|
  <head>
 | 
						|
    <meta charset="utf-8">
 | 
						|
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
						|
    <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
 | 
						|
    <link rel="stylesheet" href="common/emscripten.css"/>
 | 
						|
    <link rel="stylesheet" href="common/testing.css"/>
 | 
						|
    <title>speedtest1.wasm</title>
 | 
						|
  </head>
 | 
						|
  <body>
 | 
						|
    <header id='titlebar'><span>speedtest1.wasm</span></header>
 | 
						|
    <div>See also: <a href='speedtest1-worker.html'>A Worker-thread variant of this page.</a></div>
 | 
						|
    <!-- emscripten bits -->
 | 
						|
    <figure id="module-spinner">
 | 
						|
      <div class="spinner"></div>
 | 
						|
      <div class='center'><strong>Initializing app...</strong></div>
 | 
						|
      <div class='center'>
 | 
						|
        On a slow internet connection this may take a moment.  If this
 | 
						|
        message displays for "a long time", intialization may have
 | 
						|
        failed and the JavaScript console may contain clues as to why.
 | 
						|
      </div>
 | 
						|
    </figure>
 | 
						|
    <div class="emscripten" id="module-status">Downloading...</div>
 | 
						|
    <div class="emscripten">
 | 
						|
      <progress value="0" max="100" id="module-progress" hidden='1'></progress>  
 | 
						|
    </div><!-- /emscripten bits -->
 | 
						|
    <div class='warning'>This page starts running the main exe when it loads, which will
 | 
						|
      block the UI until it finishes! Adding UI controls to manually configure and start it
 | 
						|
      are TODO.</div>
 | 
						|
    </div>
 | 
						|
    <div class='warning'>Achtung: running it with the dev tools open may
 | 
						|
      <em>drastically</em> slow it down. For faster results, keep the dev
 | 
						|
      tools closed when running it!
 | 
						|
    </div>
 | 
						|
    <div>Output is delayed/buffered because we cannot update the UI while the
 | 
						|
      speedtest is running. Output will appear below when ready...
 | 
						|
    <div id='test-output'></div>
 | 
						|
    <script src="common/SqliteTestUtil.js"></script>
 | 
						|
    <script src="jswasm/speedtest1.js"></script>
 | 
						|
    <script>(function(){
 | 
						|
    /**
 | 
						|
       If this environment contains WASMFS with OPFS, this function
 | 
						|
       initializes it and returns the name of the dir on which OPFS is
 | 
						|
       mounted, else it returns an empty string.
 | 
						|
    */
 | 
						|
    const wasmfsDir = function f(wasmUtil){
 | 
						|
        if(undefined !== f._) return f._;
 | 
						|
        const pdir = '/persistent';
 | 
						|
        if( !self.FileSystemHandle
 | 
						|
            || !self.FileSystemDirectoryHandle
 | 
						|
            || !self.FileSystemFileHandle){
 | 
						|
            return f._ = "";
 | 
						|
        }
 | 
						|
        try{
 | 
						|
            if(0===wasmUtil.xCallWrapped(
 | 
						|
                'sqlite3_wasm_init_wasmfs', 'i32', ['string'], pdir
 | 
						|
            )){
 | 
						|
                return f._ = pdir;
 | 
						|
            }else{
 | 
						|
                return f._ = "";
 | 
						|
            }
 | 
						|
        }catch(e){
 | 
						|
            // sqlite3_wasm_init_wasmfs() is not available
 | 
						|
            return f._ = "";
 | 
						|
        }
 | 
						|
    };
 | 
						|
    wasmfsDir._ = undefined;
 | 
						|
 | 
						|
    const eOut = document.querySelector('#test-output');
 | 
						|
    const log2 = function(cssClass,...args){
 | 
						|
        const ln = document.createElement('div');
 | 
						|
        if(cssClass) ln.classList.add(cssClass);
 | 
						|
        ln.append(document.createTextNode(args.join(' ')));
 | 
						|
        eOut.append(ln);
 | 
						|
        //this.e.output.lastElementChild.scrollIntoViewIfNeeded();
 | 
						|
    };
 | 
						|
    const logList = [];
 | 
						|
    const dumpLogList = function(){
 | 
						|
        logList.forEach((v)=>log2('',v));
 | 
						|
        logList.length = 0;
 | 
						|
    };
 | 
						|
    /* can't update DOM while speedtest is running unless we run
 | 
						|
       speedtest in a worker thread. */;
 | 
						|
    const log = (...args)=>{
 | 
						|
        console.log(...args);
 | 
						|
        logList.push(args.join(' '));
 | 
						|
    };
 | 
						|
    const logErr = function(...args){
 | 
						|
        console.error(...args);
 | 
						|
        logList.push('ERROR: '+args.join(' '));
 | 
						|
    };
 | 
						|
 | 
						|
    const runTests = function(sqlite3){
 | 
						|
        const capi = sqlite3.capi, wasm = sqlite3.wasm;
 | 
						|
        //console.debug('sqlite3 =',sqlite3);
 | 
						|
        const pDir = wasmfsDir(wasm);
 | 
						|
        if(pDir){
 | 
						|
            console.warn("Persistent storage:",pDir);
 | 
						|
        }
 | 
						|
        const scope = wasm.scopedAllocPush();
 | 
						|
        let dbFile = pDir+"/speedtest1.db";
 | 
						|
        const urlParams = new URL(self.location.href).searchParams;
 | 
						|
        const argv = ["speedtest1"];
 | 
						|
        if(urlParams.has('flags')){
 | 
						|
            argv.push(...(urlParams.get('flags').split(',')));
 | 
						|
        }
 | 
						|
 | 
						|
        let forceSize = 0;
 | 
						|
        let vfs, pVfs = 0;
 | 
						|
        if(urlParams.has('vfs')){
 | 
						|
            vfs = urlParams.get('vfs');
 | 
						|
            pVfs = capi.sqlite3_vfs_find(vfs);
 | 
						|
            if(!pVfs){
 | 
						|
                log2('error',"Unknown VFS:",vfs);
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            argv.push("--vfs", vfs);
 | 
						|
            log2('',"Using VFS:",vfs);
 | 
						|
            if('kvvfs' === vfs){
 | 
						|
                forceSize = 4 /* 5 uses approx. 4.96mb */;
 | 
						|
                dbFile = 'session';
 | 
						|
                log2('warning',"kvvfs VFS: forcing --size",forceSize,
 | 
						|
                     "and filename '"+dbFile+"'.");
 | 
						|
                capi.sqlite3_js_kvvfs_clear(dbFile);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if(forceSize){
 | 
						|
            argv.push('--size',forceSize);
 | 
						|
        }else{
 | 
						|
            [
 | 
						|
                'size'
 | 
						|
            ].forEach(function(k){
 | 
						|
                const v = urlParams.get(k);
 | 
						|
                if(v) argv.push('--'+k, urlParams[k]);
 | 
						|
            });
 | 
						|
        }
 | 
						|
        argv.push(
 | 
						|
            "--singlethread",
 | 
						|
            //"--nomutex",
 | 
						|
            //"--nosync",
 | 
						|
            //"--memdb", // note that memdb trumps the filename arg
 | 
						|
            "--nomemstat"
 | 
						|
        );
 | 
						|
        argv.push("--big-transactions"/*important for tests 410 and 510!*/,
 | 
						|
                  dbFile);
 | 
						|
        console.log("argv =",argv);
 | 
						|
        // These log messages are not emitted to the UI until after main() returns. Fixing that
 | 
						|
        // requires moving the main() call and related cleanup into a timeout handler.
 | 
						|
        if(pDir) wasm.sqlite3_wasm_vfs_unlink(pVfs,dbFile);
 | 
						|
        log2('',"Starting native app:\n ",argv.join(' '));
 | 
						|
        log2('',"This will take a while and the browser might warn about the runaway JS.",
 | 
						|
             "Give it time...");
 | 
						|
        logList.length = 0;
 | 
						|
        setTimeout(function(){
 | 
						|
            wasm.xCall('wasm_main', argv.length,
 | 
						|
                       wasm.scopedAllocMainArgv(argv));
 | 
						|
            wasm.scopedAllocPop(scope);
 | 
						|
            if('kvvfs'===vfs){
 | 
						|
                logList.unshift("KVVFS "+dbFile+" size = "+
 | 
						|
                                capi.sqlite3_js_kvvfs_size(dbFile));
 | 
						|
            }
 | 
						|
            if(pDir) wasm.sqlite3_wasm_vfs_unlink(pVfs,dbFile);
 | 
						|
            logList.unshift("Done running native main(). Output:");
 | 
						|
            dumpLogList();
 | 
						|
        }, 50);
 | 
						|
    }/*runTests()*/;
 | 
						|
 | 
						|
    self.sqlite3TestModule.print = log;
 | 
						|
    self.sqlite3TestModule.printErr = logErr;
 | 
						|
    sqlite3InitModule(self.sqlite3TestModule).then(runTests);
 | 
						|
})();</script>
 | 
						|
</body>
 | 
						|
</html>
 |