mirror of
https://github.com/sqlite/sqlite.git
synced 2026-01-06 08:01:16 +03:00
Get speedtest1 wasmfs variant running again.
FossilOrigin-Name: 0f77e031daf0121f7603409cedf57f138edbb43083cbbcf00d2a423e16de25a7
This commit is contained in:
91
ext/wasm/speedtest1-wasmfs.mjs
Normal file
91
ext/wasm/speedtest1-wasmfs.mjs
Normal file
@@ -0,0 +1,91 @@
|
||||
import sqlite3InitModule from './jswasm/speedtest1-wasmfs.mjs';
|
||||
const wMsg = (type,...args)=>{
|
||||
console.log("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);
|
||||
//if(pDir) unlink(dbFile);
|
||||
log("Done running native main()");
|
||||
}, 25);
|
||||
}/*runTests()*/;
|
||||
|
||||
sqlite3InitModule({
|
||||
print: log,
|
||||
printErr: logErr
|
||||
}).then(runTests);
|
||||
Reference in New Issue
Block a user