3 let speedtestJs
= 'speedtest1.js';
4 const urlParams
= new URL(self
.location
.href
).searchParams
;
5 if(urlParams
.has('sqlite3.dir')){
6 speedtestJs
= urlParams
.get('sqlite3.dir') + '/' + speedtestJs
;
8 importScripts(speedtestJs
);
10 If this environment contains OPFS, this function initializes it and
11 returns the name of the dir on which OPFS is mounted, else it returns
14 const wasmfsDir
= function f(wasmUtil
){
15 if(undefined !== f
._
) return f
._
;
17 if( !self
.FileSystemHandle
18 || !self
.FileSystemDirectoryHandle
19 || !self
.FileSystemFileHandle
){
23 if(0===wasmUtil
.xCallWrapped(
24 'sqlite3_wasm_init_wasmfs', 'i32', ['string'], pdir
31 // sqlite3_wasm_init_wasmfs() is not available
35 wasmfsDir
._
= undefined;
37 const mPost = function(msgType
,payload
){
38 postMessage({type
: msgType
, data
: payload
});
41 const App
= Object
.create(null);
43 const logMsg
= (type
,msgArgs
)=>{
44 const msg
= msgArgs
.join(' ');
45 App
.logBuffer
.push(msg
);
48 const log
= (...args
)=>logMsg('stdout',args
);
49 const logErr
= (...args
)=>logMsg('stderr',args
);
51 const runSpeedtest
= async
function(cliFlagsArray
){
52 const scope
= App
.wasm
.scopedAllocPush();
53 const dbFile
= App
.pDir
+"/speedtest1.sqlite3";
56 "speedtest1.wasm", ...cliFlagsArray
, dbFile
58 App
.logBuffer
.length
= 0;
59 const ndxSahPool
= argv
.indexOf('opfs-sahpool');
60 const realSahName
= 'opfs-sahpool-speedtest1';
62 argv
[ndxSahPool
] = realSahName
;
63 log("Updated argv for opfs-sahpool: --vfs",realSahName
);
65 mPost('run-start', [...argv
]);
66 if(App
.sqlite3
.installOpfsSAHPoolVfs
67 && !App
.sqlite3
.$SAHPoolUtil
69 log("Installing opfs-sahpool as",realSahName
,"...");
70 await App
.sqlite3
.installOpfsSAHPoolVfs({
76 log("opfs-sahpool successfully installed as",realSahName
);
77 App
.sqlite3
.$SAHPoolUtil
= PoolUtil
;
78 //console.log("sqlite3.oo1.OpfsSAHPoolDb =", App.sqlite3.oo1.OpfsSAHPoolDb);
81 App
.wasm
.xCall('wasm_main', argv
.length
,
82 App
.wasm
.scopedAllocMainArgv(argv
));
84 mPost('error',e
.message
);
86 App
.wasm
.scopedAllocPop(scope
);
87 mPost('run-end', App
.logBuffer
.join('\n'));
88 App
.logBuffer
.length
= 0;
92 self
.onmessage = function(msg
){
96 runSpeedtest(msg
.data
|| [])
97 .catch(e
=>mPost('error',e
));
100 logErr("Unhandled worker message type:",msg
.type
);
105 const sahpSanityChecks = function(sqlite3
){
106 log("Attempting OpfsSAHPoolDb sanity checks...");
107 const db
= new sqlite3
.oo1
.OpfsSAHPoolDb('opfs-sahpoool.db');
108 const fn
= db
.filename
;
110 'create table t(a);',
111 'insert into t(a) values(1),(2),(3);'
114 sqlite3
.wasm
.sqlite3_wasm_vfs_unlink(sqlite3_vfs_find("opfs-sahpool"), fn
);
115 log("SAH sanity checks done.");
118 const EmscriptenModule
= {
121 setStatus
: (text
)=>mPost('load-status',text
)
123 log("Initializing speedtest1 module...");
124 self
.sqlite3InitModule(EmscriptenModule
).then(async (sqlite3
)=>{
125 const S
= globalThis
.S
= App
.sqlite3
= sqlite3
;
126 log("Loaded speedtest1 module. Setting up...");
127 App
.vfsUnlink = function(pDb
, fname
){
128 const pVfs
= S
.wasm
.sqlite3_wasm_db_vfs(pDb
, 0);
129 if(pVfs
) S
.wasm
.sqlite3_wasm_vfs_unlink(pVfs
, fname
||0);
131 App
.pDir
= wasmfsDir(S
.wasm
);
133 //if(App.pDir) log("Persistent storage:",pDir);
134 //else log("Using transient storage.");
136 log("Registered VFSes:", ...S
.capi
.sqlite3_js_vfs_list());