+++ /dev/null
-<!doctype html>
-<html lang="en-us">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
- <link rel="stylesheet" href="common/emscripten.css"/>
- <link rel="stylesheet" href="common/testing.css"/>
- <title>speedtest1-kvvfs.wasm</title>
- </head>
- <body>
- <header id='titlebar'><span>speedtest1-kvvfs.wasm</span></header>
- <div>See also: <a href='speedtest1-worker.html'>A Worker-thread variant of this page.</a></div>
- <!-- emscripten bits -->
- <figure id="module-spinner">
- <div class="spinner"></div>
- <div class='center'><strong>Initializing app...</strong></div>
- <div class='center'>
- On a slow internet connection this may take a moment. If this
- message displays for "a long time", intialization may have
- failed and the JavaScript console may contain clues as to why.
- </div>
- </figure>
- <div class="emscripten" id="module-status">Downloading...</div>
- <div class="emscripten">
- <progress value="0" max="100" id="module-progress" hidden='1'></progress>
- </div><!-- /emscripten bits -->
- <div class='warning'>This page starts running the main exe when it loads, which will
- block the UI until it finishes! Adding UI controls to manually configure and start it
- are TODO.</div>
- </div>
- <div class='warning'>Achtung: running it with the dev tools open may
- <em>drastically</em> slow it down. For faster results, keep the dev
- tools closed when running it!
- </div>
- <div>Output is delayed/buffered because we cannot update the UI while the
- speedtest is running. Output will appear below when ready...
- <div id='test-output'></div>
- <script src="common/whwasmutil.js"></script>
- <script src="common/SqliteTestUtil.js"></script>
- <script src="speedtest1-kvvfs.js"></script>
- <script>(function(){
- const eOut = document.querySelector('#test-output');
- const log2 = function(cssClass,...args){
- const ln = document.createElement('div');
- if(cssClass) ln.classList.add(cssClass);
- ln.append(document.createTextNode(args.join(' ')));
- eOut.append(ln);
- };
- const logList = [
- ] /* We can't update DOM while speedtest and kvvfs only works
- in the main thread, so we queue up main()-time output
- into logList. */;
- const dumpLogList = function(){
- logList.forEach((v)=>log2('',v));
- logList.length = 0;
- };
- const log = (...args)=>{
- console.log(...args);
- logList.push(args.join(' '));
- };
- const logErr = function(...args){
- console.error(...args);
- logList.push('ERROR: '+args.join(' '));
- };
-
- const guessStorageSize = function(which=''){
- let sz = 0;
- const prefix = 'kvvfs-'+which;
- [localStorage,sessionStorage].forEach((s)=>{
- let i;
- for(i = 0; i < s.length; ++i){
- const k = s.key(i);
- if(k.startsWith(prefix)){
- sz += k.length;
- sz += s.getItem(k).length;
- }
- }
- });
- return sz * 2 /* for 16-bit-char encoding */;
- };
- const clearStorage = function(){
- sessionStorage.clear();
- localStorage.clear();
- };
- const runTests = function(EmscriptenModule){
- console.log("Module inited.",EmscriptenModule);
-
- const wasm = {
- exports: EmscriptenModule.asm,
- alloc: (n)=>EmscriptenModule._malloc(n),
- dealloc: (m)=>EmscriptenModule._free(m),
- memory: EmscriptenModule.asm.memory || EmscriptenModule.wasmMemory
- };
- log2('warning',"Clearing session/local storage before test starts.");
- clearStorage();
- //console.debug('wasm =',wasm);
- self.WhWasmUtilInstaller(wasm);
- const scope = wasm.scopedAllocPush();
- const dbFile = 0 ? "session" : "local";
- const urlArgs = self.SqliteTestUtil.processUrlArgs();
- const argv = ["speedtest1",
- "--size", "2",
- "--pagesize", "4096" /*1024, 2096 fail with --size > 1.*/
- ];
- if(urlArgs.flags){
- // transform flags=a,b,c to ["--a", "--b", "--c"]
- argv.push(...(urlArgs.flags.split(',').map((v)=>'--'+v)));
- }else{
- argv.push(
- "--singlethread",
- "--nomutex",
- //"--nosync",
- "--nomemstat"
- // ,"--sqlonly"
- );
- //argv.push("--memdb" /* note that memdb trumps the filename arg */);
- }
- argv.push("--big-transactions"/*important for tests 410 and 510!*/,
- dbFile);
- if(argv.indexOf('--memdb')>=0){
- log2('error',"WARNING: --memdb flag trumps db filename.");
- }
- console.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.
- log2('',"Starting native app:\n ",argv.join(' '));
- log2('',"This will take a while and the browser might warn about the runaway JS.",
- "Give it time...");
- logList.length = 0;
- new Promise(function(resolve,reject){
- setTimeout(function(){
- try {
- wasm.xCall('__main_argc_argv', argv.length,
- wasm.scopedAllocMainArgv(argv));
- }catch(e){
- reject(e);
- }
- resolve();
- }, 50);
- }).finally(function(){
- wasm.scopedAllocPop(scope);
- logList.unshift("Done running native main(). Output:");
- dumpLogList();
- log2('',"Approximate",dbFile,"storage usage:",guessStorageSize(),"bytes");
- log2('warning',"Clearing",dbFile,"storage.");
- clearStorage(dbFile);
- });
- }/*runTests()*/;
-
- self.sqlite3TestModule.print = log;
- self.sqlite3TestModule.printErr = logErr;
- sqlite3Speedtest1InitModule(self.sqlite3TestModule).then(function(M){
- setTimeout(()=>runTests(M), 100);
- });
- })();
- </script>
- </body>
-</html>
<div>Output is delayed/buffered because we cannot update the UI while the
speedtest is running. Output will appear below when ready...
<div id='test-output'></div>
- <script src="common/whwasmutil.js"></script>
<script src="common/SqliteTestUtil.js"></script>
<script src="speedtest1-wasmfs.js"></script>
<script>(function(){
returns the name of the dir on which OPFS is mounted, else it returns
an empty string.
*/
- const opfsDir = function f(wasmUtil){
+ const wasmfsDir = function f(wasmUtil){
if(undefined !== f._) return f._;
const pdir = '/persistent';
if( !self.FileSystemHandle
return f._ = "";
}
};
- opfsDir._ = undefined;
+ wasmfsDir._ = undefined;
const eOut = document.querySelector('#test-output');
const log2 = function(cssClass,...args){
logList.push('ERROR: '+args.join(' '));
};
- const runTests = function(EmscriptenModule){
- console.log("Module inited.",EmscriptenModule);
- const wasm = {
- exports: EmscriptenModule.asm,
- alloc: (n)=>EmscriptenModule._malloc(n),
- dealloc: (m)=>EmscriptenModule._free(m),
- memory: EmscriptenModule.asm.memory || EmscriptenModule.wasmMemory
- };
- //console.debug('wasm =',wasm);
- self.WhWasmUtilInstaller(wasm);
+ const runTests = function(sqlite3){
+ console.log("Module inited.");
+ const wasm = sqlite3.capi.wasm;
const unlink = wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]);
- const pDir = opfsDir(wasm);
+ const pDir = wasmfsDir(wasm);
if(pDir) log2('',"Persistent storage:",pDir);
else{
log2('error',"Expecting persistent storage in this build.");
return;
}
const scope = wasm.scopedAllocPush();
- const dbFile = 0 ? "" : pDir+"/speedtest1.db";
- const urlArgs = self.SqliteTestUtil.processUrlArgs();
+ const dbFile = pDir+"/speedtest1.db";
+ const urlParams = self.SqliteTestUtil.processUrlArgs();
const argv = ["speedtest1"];
- if(urlArgs.flags){
- argv.push(...(urlArgs.flags.split(',')));
+ if(urlParams.flags){
+ argv.push(...(urlParams.flags.split(',')));
+ let i = argv.indexOf('--vfs');
+ if(i>=0) argv.splice(i,2);
}else{
argv.push(
"--singlethread",
);
//"--memdb", // note that memdb trumps the filename arg
}
+
if(argv.indexOf('--memdb')>=0){
- log2('error',"WARNING: --memdb flag trumps db filename.");
+ log2('error',"WARNING: --memdb flag trumps db filename.");
}
argv.push("--big-transactions"/*important for tests 410 and 510!*/,
dbFile);
"Give it time...");
logList.length = 0;
setTimeout(function(){
- wasm.xCall('wasm_main', argv.length,
- wasm.scopedAllocMainArgv(argv));
- wasm.scopedAllocPop(scope);
- if(pDir) unlink(dbFile);
- logList.unshift("Done running native main(). Output:");
- dumpLogList();
- }, 50);
+ wasm.xCall('wasm_main', argv.length,
+ wasm.scopedAllocMainArgv(argv));
+ wasm.scopedAllocPop(scope);
+ if(pDir) unlink(dbFile);
+ logList.unshift("Done running native main(). Output:");
+ dumpLogList();
+ }, 25);
}/*runTests()*/;
self.sqlite3TestModule.print = log;
self.sqlite3TestModule.printErr = logErr;
sqlite3Speedtest1InitModule(self.sqlite3TestModule).then(function(M){
- setTimeout(()=>runTests(M), 100);
+ runTests(M.sqlite3);
});
})();
</script>
log2('', ...args);
};
const logErr = function(...args){
- //console.error(...args);
+ console.error(...args);
log2('error', ...args);
};
const logWarn = function(...args){
- //console.warn(...args);
+ console.warn(...args);
log2('warning', ...args);
};
<div>Output is delayed/buffered because we cannot update the UI while the
speedtest is running. Output will appear below when ready...
<div id='test-output'></div>
- <script src="common/whwasmutil.js"></script>
<script src="common/SqliteTestUtil.js"></script>
<script src="speedtest1.js"></script>
<script>(function(){
const fh = __openFiles[fid];
try{
affirmNotRO('xTruncate', fh);
- await fh.accessHandle.truncate(size);
+ await fh.accessHandle.truncate(Number(size));
}catch(e){
error("xTruncate():",e,fh);
rc = state.sq3Codes.SQLITE_IOERR_TRUNCATE;
sqlite3-wasmfs.jsflags += -sINITIAL_MEMORY=128450560
sqlite3-wasmfs.fsflags := -pthread -sWASMFS -sPTHREAD_POOL_SIZE=2 -sENVIRONMENT=web,worker
sqlite3-wasmfs.jsflags += $(sqlite3-wasmfs.fsflags)
+speedtest1-common.eflags += -sEXPORTED_FUNCTIONS=@$(dir.wasm)/EXPORTED_FUNCTIONS.speedtest1
#sqlite3-wasmfs.jsflags += -sALLOW_MEMORY_GROWTH
#^^^ using ALLOW_MEMORY_GROWTH produces a warning from emcc:
# USE_PTHREADS + ALLOW_MEMORY_GROWTH may run non-wasm code slowly,
sqlite3-wasmfs.jsflags += -sWASM_BIGINT
endif
-$(sqlite3-wasmfs.js): $(sqlite3-wasmfs.wasm.c) $(sqlite3.c) $(sqlite3-wasmfs.extra.c) \
- EXPORTED_FUNCTIONS.api $(MAKEFILE) $(MAKEFILE.wasmfs) \
+$(sqlite3-wasmfs.js): $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasm.c) $(sqlite3-wasmfs.extra.c) \
+ EXPORTED_FUNCTIONS.api $(sqlite3-wasm.js) $(MAKEFILE) $(MAKEFILE.wasmfs) \
$(post-js.js)
@echo "Building $@ ..."
$(emcc.bin) -o $@ $(emcc_opt) $(emcc.flags) \
- $(sqlite3-wasmfs.cflags) $(sqlite3-wasmfs.jsflags) $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasmfs.extra.c)
+ $(sqlite3-wasmfs.cflags) $(speedtest1-common.eflags) $(sqlite3-wasmfs.jsflags) $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasmfs.extra.c)
chmod -x $(sqlite3-wasmfs.wasm)
$(maybe-wasm-strip) $(sqlite3-wasmfs.wasm)
@ls -la $@ $(sqlite3-wasmfs.wasm)
# faster binary.
speedtest1-wasmfs.js := speedtest1-wasmfs.js
speedtest1-wasmfs.wasm := $(subst .js,.wasm,$(speedtest1-wasmfs.js))
-speedtest1-wasmfs.eflags := -sENVIRONMENT=web,worker $(sqlite3-wasmfs.fsflags)
+speedtest1-wasmfs.eflags := $(sqlite3-wasmfs.fsflags)
speedtest1-wasmfs.eflags += $(SQLITE_OPT) -DSQLITE_WASM_WASMFS
+speedtest1-wasmfs.eflags += --post-js=$(sqlite3-wasmfs.js)
$(speedtest1-wasmfs.js): $(MAKEFILE) $(MAKEFILE.wasmfs)
#$(speedtest1-wasmfs.js): $(sqlite3-wasmfs.js)
-$(speedtest1-wasmfs.js): $(speedtest1.c) $(sqlite3-wasm.c)
+$(speedtest1-wasmfs.js): $(speedtest1.cs) $(sqlite3-wasmfs.js) \
+ EXPORTED_FUNCTIONS.speedtest1
@echo "Building $@ ..."
$(emcc.bin) \
$(speedtest1-wasmfs.eflags) $(speedtest1-common.eflags) \
$(speedtest1.cflags) \
$(sqlite3-wasmfs.cflags) \
- -o $@ $(speedtest1.c) $(sqlite3-wasm.c) -lm
+ -o $@ $(speedtest1.cs) -lm
$(maybe-wasm-strip) $(speedtest1-wasmfs.wasm)
ls -la $@ $(speedtest1-wasmfs.wasm)
-C Add\ssqlite3_web_vfs_list()\sto\sJS\sAPI.\sCorrected\sOPFS\sVFS's\sregistering\sitself\sas\sthe\sdefault\sVFS.\sspeedtest1-worker\snow\suses\sthe\sxDelete()\sof\sboth\sthe\sdefault\sVFS\sand\sOPFS,\sto\savoid\sthat\sit\sstarts\sup\swith\sa\spersistent\sOPFS\stest\sdb\s(the\snative\sapp\scalls\sunlink(),\sbut\sthat\sunlink\scall\soperates\son\sa\sdifferent\svirtual\sfilesystem\sthan\sthe\sOPFS\sVFS).
-D 2022-09-19T13:44:23.433
+C Remove\san\sobsolete\sfile.\sUpdate\swasmfs\sbuild\sfor\stoday's\schanges.\sFix\sthe\scase\sthat\sOPFS.xTruncate()\sis\spassed\sa\sBigInt\sinstead\sof\sa\sNumber.
+D 2022-09-19T14:56:13.838
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19
F ext/wasm/scratchpad-wasmfs-main.html 20cf6f1a8f368e70d01e8c17200e3eaa90f1c8e1029186d836d14b83845fbe06
F ext/wasm/scratchpad-wasmfs-main.js f0836e3576df7a89390d777bb53e142e559e8a79becfb2a5a976490b05a1c4fa
-F ext/wasm/speedtest1-kvvfs.html c8b65c20e2b35298dc02d8e0a394d5e1eb857fd22e504468388234aee13aef08
-F ext/wasm/speedtest1-wasmfs.html a5eafc99e108f3b8136e9bb59757865aa45e6f1fa9d412cd4b4852a570cb4e11
-F ext/wasm/speedtest1-worker.html 1d723ae1eb8ddf5eebe7d43de32b5db04d732b674758bc2d684b6952f20b1fce
+F ext/wasm/speedtest1-wasmfs.html 9d8cd19eab8854d17f7129aa11607cae6f6d9857c505a4aef13000588583d93e
+F ext/wasm/speedtest1-worker.html f7adcc68af76d347741ecd884e0c773f707fa2cdec87cfd9b2e147f5fc2c56c7
F ext/wasm/speedtest1-worker.js d7e02ff74c28c8f2ef19eb6585642d44b7c8e7b83ac19b7848b209a880945706
-F ext/wasm/speedtest1.html f136c6da59d77c5c0c784e0a67795723304ba4b47a45028dfb45132c4625cd4e
+F ext/wasm/speedtest1.html 512addeb3c27c94901178b7bcbde83a6f95c093f9ebe16a2959a0aa0d828cf1d
F ext/wasm/split-speedtest1-script.sh a3e271938d4d14ee49105eb05567c6a69ba4c1f1293583ad5af0cd3a3779e205 x
F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d82675bd63d9c2d97a15f0
F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
-F ext/wasm/sqlite3-opfs-async-proxy.js 2e9a95fc6204f53ed871d04bdd0341d1c0d1a49c22d43b38144a5319f865930a
+F ext/wasm/sqlite3-opfs-async-proxy.js 7ce90feb4ed582a7709f6a99a46fd43a240a1c1ad2f9f47efff1bd32136ab09c
F ext/wasm/sqlite3-worker1-promiser.js 4fd0465688a28a75f1d4ee4406540ba494f49844e3cad0670d0437a001943365
F ext/wasm/sqlite3-worker1.js 0c1e7626304543969c3846573e080c082bf43bcaa47e87d416458af84f340a9e
F ext/wasm/test-opfs-vfs.html eb69dda21eb414b8f5e3f7c1cc0f774103cc9c0f87b2d28a33419e778abfbab5
F ext/wasm/testing1.js 507001a970fe8a8eb67b6c8d783e1c1daa3db2719f727c4551af29349410e538
F ext/wasm/testing2.html a66951c38137ff1d687df79466351f3c734fa9c6d9cce71d3cf97c291b2167e3
F ext/wasm/testing2.js 25584bcc30f19673ce13a6f301f89f8820a59dfe044e0c4f2913941f4097fe3c
-F ext/wasm/wasmfs.make 21a5cf297954a689e0dc2a95299ae158f681cae5e90c10b99d986097815fd42d
+F ext/wasm/wasmfs.make 0fbe3b4ef4e5e25ed61d7b581c48e6406dd688443d1b8d4daf94d779a8056c54
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P ec09f32f7ae2249aaf27388ad2062982afa8bbbb5f88d236d6d9068bf33ad93d
-R 51982b0b1e31fbc7ea3b58657a7f12b2
+P 2ec7e09139a510b9fd29e4c97283b20740a00f369193c6fecbb734f187e81b48
+R 1715d33dc730c3ab31438d0a66f7aa0a
U stephan
-Z d7c826042daaeccd4155ca97997a92df
+Z 0f0e9b03805cac5450f028e863da1f77
# Remove this line to create a well-formed Fossil manifest.
-2ec7e09139a510b9fd29e4c97283b20740a00f369193c6fecbb734f187e81b48
\ No newline at end of file
+976053925013bf1975f5f9222e28ba648af28e305bb6bdae600eb24d0e136bec
\ No newline at end of file