12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import sqlite3InitModule from './jswasm/speedtest1-wasmfs.mjs';
- const wMsg = (type,...args)=>{
- postMessage({type, args});
- };
- wMsg('log',"speedtest1-wasmfs starting...");
- /**
- If this environment contains 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,dirName="/opfs"){
- if(undefined !== f._) return f._;
- if( !globalThis.FileSystemHandle
- || !globalThis.FileSystemDirectoryHandle
- || !globalThis.FileSystemFileHandle){
- return f._ = "";
- }
- try{
- if(0===wasmUtil.xCallWrapped(
- 'sqlite3__wasm_init_wasmfs', 'i32', ['string'], dirName
- )){
- return f._ = dirName;
- }else{
- return f._ = "";
- }
- }catch(e){
- // sqlite3_wasm_init_wasmfs() is not available
- return f._ = "";
- }
- };
- wasmfsDir._ = undefined;
- const log = (...args)=>wMsg('log',...args);
- const logErr = (...args)=>wMsg('logErr',...args);
- const runTests = function(sqlite3){
- console.log("Module inited.",sqlite3);
- const wasm = sqlite3.wasm;
- const __unlink = wasm.xWrap("sqlite3__wasm_vfs_unlink", "int", ["*","string"]);
- const unlink = (fn)=>__unlink(0,fn);
- const pDir = wasmfsDir(wasm);
- if(pDir) log("Persistent storage:",pDir);
- else{
- logErr("Expecting persistent storage in this build.");
- return;
- }
- const scope = wasm.scopedAllocPush();
- const dbFile = pDir+"/speedtest1.db";
- const urlParams = new URL(globalThis.location.href).searchParams;
- const argv = ["speedtest1"];
- if(urlParams.has('flags')){
- argv.push(...(urlParams.get('flags').split(',')));
- let i = argv.indexOf('--vfs');
- if(i>=0) argv.splice(i,2);
- }else{
- argv.push(
- "--singlethread",
- "--nomutex",
- //"--nosync",
- "--nomemstat",
- "--size", "10"
- );
- }
- if(argv.indexOf('--memdb')>=0){
- logErr("WARNING: --memdb flag trumps db filename.");
- }
- argv.push("--big-transactions"/*important for tests 410 and 510!*/,
- dbFile);
- //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) unlink(dbFile);
- log("Starting native app:\n ",argv.join(' '));
- log("This will take a while and the browser might warn about the runaway JS.",
- "Give it time...");
- setTimeout(function(){
- if(pDir) unlink(dbFile);
- wasm.xCall('wasm_main', argv.length,
- wasm.scopedAllocMainArgv(argv));
- wasm.scopedAllocPop(scope);
- if(pDir) unlink(dbFile);
- log("Done running native main()");
- }, 25);
- }/*runTests()*/;
- sqlite3InitModule({
- print: log,
- printErr: logErr
- }).then(runTests);
|