2023-07-13 19:33:45 +03:00
|
|
|
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( !self.FileSystemHandle
|
|
|
|
|| !self.FileSystemDirectoryHandle
|
|
|
|
|| !self.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(self.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);
|
2023-07-13 20:27:05 +03:00
|
|
|
if(pDir) unlink(dbFile);
|
2023-07-13 19:33:45 +03:00
|
|
|
log("Done running native main()");
|
|
|
|
}, 25);
|
|
|
|
}/*runTests()*/;
|
|
|
|
|
|
|
|
sqlite3InitModule({
|
|
|
|
print: log,
|
|
|
|
printErr: logErr
|
|
|
|
}).then(runTests);
|