summaryrefslogtreecommitdiffstats
path: root/ext/wasm/speedtest1-wasmfs.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/wasm/speedtest1-wasmfs.mjs')
-rw-r--r--ext/wasm/speedtest1-wasmfs.mjs90
1 files changed, 90 insertions, 0 deletions
diff --git a/ext/wasm/speedtest1-wasmfs.mjs b/ext/wasm/speedtest1-wasmfs.mjs
new file mode 100644
index 0000000..2d5ae32
--- /dev/null
+++ b/ext/wasm/speedtest1-wasmfs.mjs
@@ -0,0 +1,90 @@
+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);
+ if(pDir) unlink(dbFile);
+ log("Done running native main()");
+ }, 25);
+}/*runTests()*/;
+
+sqlite3InitModule({
+ print: log,
+ printErr: logErr
+}).then(runTests);