]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge kv-vfs branch into fiddle-opfs branch. Adjust speedtest1 --size flags to accoun...
authorstephan <stephan@noemail.net>
Fri, 16 Sep 2022 20:16:50 +0000 (20:16 +0000)
committerstephan <stephan@noemail.net>
Fri, 16 Sep 2022 20:16:50 +0000 (20:16 +0000)
FossilOrigin-Name: afb79050e635f3c698e51f06c346cbf23b096cfda7d0f1d8e68514ea0c25b7b7

1  2 
ext/wasm/GNUmakefile
ext/wasm/speedtest1-kvvfs.html
manifest
manifest.uuid

index 18ca4ef3ea300b9a3063e4c7a716bfc092b4e54f,3133d1230bfd3930adf8f52d65e480f06005d9a2..dc0ce3681f3f0f05e5e5412f52d3738d391ce586
@@@ -302,94 -262,7 +302,94 @@@ wasm: $(sqlite3.js
  # End main Emscripten-based module build
  ########################################################################
  
 -include kvvfs.make
 +########################################################################
 +# batch-runner.js...
 +dir.sql := sql
 +speedtest1 := ../../speedtest1
 +speedtest1.c := ../../test/speedtest1.c
 +speedtest1.sql := $(dir.sql)/speedtest1.sql
- speedtest1.cliflags := --size 5 --big-transactions
++speedtest1.cliflags := --size 1 --big-transactions
 +#  --------------------^^^^^^^^ small size is needed for batch-runner-kvvfs.html
 +$(speedtest1):
 +      $(MAKE) -C ../.. speedtest1
 +$(speedtest1.sql): $(speedtest1) $(MAKEFILE)
 +      $(speedtest1) $(speedtest1.cliflags) --script $@
 +batch-runner.list: $(MAKEFILE) $(speedtest1.sql) $(dir.sql)/000-mandelbrot.sql
 +      bash split-speedtest1-script.sh $(dir.sql)/speedtest1.sql
 +      ls -1 $(dir.sql)/*.sql | grep -v speedtest1.sql | sort > $@
 +clean-batch:
 +      rm -f batch-runner.list $(dir.sql)/speedtest1*.sql
 +# ^^^ we don't do this along with 'clean' because we clean/rebuild on
 +# a regular basis with different -Ox flags and rebuilding the batch
 +# pieces each time is an unnecessary time sink.
 +batch: batch-runner.list
 +all: batch
 +# end batch-runner.js
 +########################################################################
 +# speedtest1.js...
 +# speedtest1-common.eflags = emcc flags used by multiple builds of speedtest1
 +# speedtest1.eflags = emcc flags used by main build of speedtest1
 +speedtest1-common.eflags := -g $(emcc_opt)
 +speedtest1.eflags :=
 +speedtest1.eflags += -sENVIRONMENT=web
 +speedtest1-common.eflags += -sINVOKE_RUN=0
 +#speedtest1-common.eflags += --no-entry
 +speedtest1-common.eflags += -flto
 +speedtest1-common.eflags += -sABORTING_MALLOC
 +speedtest1-common.eflags += -sINITIAL_MEMORY=128450560
 +speedtest1-common.eflags += -sSTRICT_JS
 +speedtest1-common.eflags += -sMODULARIZE
 +speedtest1-common.eflags += -Wno-limited-postlink-optimizations
 +speedtest1-common.eflags += -sEXPORTED_FUNCTIONS=_main,_malloc,_free
 +speedtest1-common.eflags += -sDYNAMIC_EXECUTION=0
 +speedtest1-common.eflags += --minify 0
 +speedtest1-common.eflags += -sEXPORT_NAME=sqlite3Speedtest1InitModule
 +speedtest1.exit-runtime0 := -sEXIT_RUNTIME=0
 +speedtest1.exit-runtime1 := -sEXIT_RUNTIME=1
 +# Re -sEXIT_RUNTIME=1 vs 0: if it's 1 and speedtest1 crashes, we get
 +# this error from emscripten:
 +#
 +# > native function `free` called after runtime exit (use
 +# NO_EXIT_RUNTIME to keep it alive after main() exits))
 +#
 +# If it's 0 and it crashes, we get:
 +#
 +# > stdio streams had content in them that was not flushed. you should
 +# set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline
 +# when you printf etc.
 +#
 +# and pending output is not flushed because it didn't end with a
 +# newline (by design). The lesser of the two evils seems to be
 +# -sEXIT_RUNTIME=1 but we need EXIT_RUNTIME=0 for the worker-based app
 +# which runs speedtest1 multiple times.
 +
 +speedtest1.js := speedtest1.js
 +speedtest1.wasm := $(subst .js,.wasm,$(speedtest1.js))
 +speedtest1.cflags := \
 +  -I. -I.. -I$(dir.top) \
 +  -DSQLITE_SPEEDTEST1_WASM
 +
 +$(speedtest1.js): emcc.cflags+=
 +# speedtest1 notes re. sqlite3-wasm.o vs sqlite3-wasm.c: building against
 +# the latter (predictably) results in a slightly faster binary, but we're
 +# close enough to the target speed requirements that the 500ms makes a
 +# difference.
 +$(speedtest1.js): $(speedtest1.c) $(sqlite3-wasm.c) $(MAKEFILE) $(sqlite3.c)
 +      @echo "Building $@ ..."
 +      $(emcc.bin) \
 +        $(speedtest1.eflags) $(speedtest1-common.eflags) $(speedtest1.cflags) \
 +        $(SQLITE_OPT) \
 +        $(speedtest1.exit-runtime0) \
 +        '-DSQLITE_DEFAULT_UNIX_VFS="unix-none"' \
 +        -o $@ $(speedtest1.c) $(sqlite3-wasm.c) -lm
 +      $(maybe-wasm-strip) $(speedtest1.wasm)
 +      ls -la $@ $(speedtest1.wasm)
 +
 +speedtest1: $(speedtest1.js)
 +all: speedtest1
 +CLEAN_FILES += $(speedtest1.js) $(speedtest1.wasm)
 +# end speedtest1.js
 +########################################################################
  
  ########################################################################
  # fiddle_remote is the remote destination for the fiddle app. It
index 82d32f4fe0c62b2de84bb9fac25f02c5a13d81a6,0000000000000000000000000000000000000000..12085d4cb5ab48974ce226eaa7393bcd0e29507b
mode 100644,000000..100644
--- /dev/null
@@@ -1,156 -1,0 +1,159 @@@
-           const argv = ["speedtest1", "--size", "5"];
 +<!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>
diff --cc manifest
index f946cd3989fd2f1406fe0571c76d74d43f224665,62feced741f93d89a6543a3ec48684f95eae4710..709a71cbc99e4f5f524d30b891955534b653faf2
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C When\scalculating\skvvfs\ssessionStorage/localStorage\ssize,\smultiply\sit\sby\s2\sto\saccount\sfor\sJS\susing\s16-bit\scharacters.
- D 2022-09-16T12:49:45.564
 -C Corrections\sto\sthe\sxRead\smethod\sfor\sdatabases\sin\sthe\sos_kv.c\sVFS\sso\sthat\sit\ncorrectly\sreads\sthe\sheader,\sand\sthus\savoids\sunnecessary\scache\sflushes.\s\sThis\nchanges\salso\sincludes\san\soptimization\sto\sthe\sheader\sread\slogic.
 -D 2022-09-16T15:19:04.113
++C Merge\skv-vfs\sbranch\sinto\sfiddle-opfs\sbranch.\sAdjust\sspeedtest1\s--size\sflags\sto\saccount\sfor\snew\ssize\slimit.
++D 2022-09-16T20:16:50.240
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@@ -474,64 -474,41 +474,64 @@@ F ext/userauth/user-auth.txt e6641021a9
  F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
  F ext/wasm/EXPORTED_FUNCTIONS.fiddle 7fb73f7150ab79d83bb45a67d257553c905c78cd3d693101699243f36c5ae6c3
  F ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle a004bd5eeeda6d3b28d16779b7f1a80305bfe009dfc7f0721b042967f0d39d02
- F ext/wasm/GNUmakefile ab4a43ee7aaa5abf8e30f02cedfb803a18f632bb6554e800d96616050ccab37d
 -F ext/wasm/GNUmakefile 12a672ab9125dc860457c2853f7651b98517e424d7a0e9714c89b28c5ff73800
 -F ext/wasm/README.md 4b00ae7c7d93c4591251245f0996a319e2651361013c98d2efb0b026771b7331
 -F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api c5eaceabb9e759aaae7d3101a4a3e542f96ab2c99d89a80ce20ec18c23115f33
++F ext/wasm/GNUmakefile 0323a7597383bf0dab473304f3a8a7e29d49298d92b5413692c012be2dfa84bf
 +F ext/wasm/README.md e1ee1e7c321c6a250bf78a84ca6f5882890a237a450ba5a0649c7a8399194c52
 +F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 150a793a47205b8009ac934f3b6d6ebf67b965c072339aaa25ce808a19e116cc
  F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
 -F ext/wasm/api/README.md b6d0fb64bfdf7bf9ce6938ea4104228f6f5bbef600f5d910b2f8c8694195988c
 +F ext/wasm/api/README.md d876597edd2b9542b6ea031adaaff1c042076fde7b670b1dc6d8a87b28a6631b
  F ext/wasm/api/post-js-footer.js b64319261d920211b8700004d08b956a6c285f3b0bba81456260a713ed04900c
  F ext/wasm/api/post-js-header.js 0e853b78db83cb1c06b01663549e0e8b4f377f12f5a2d9a4a06cb776c003880b
 -F ext/wasm/api/sqlite3-api-cleanup.js 149fd63a0400cd1d69548887ffde2ed89c13283384a63c2e9fcfc695e38a9e11
 -F ext/wasm/api/sqlite3-api-glue.js 82c09f49c69984009ba5af2b628e67cc26c5dd203d383cd3091d40dab4e6514b
 -F ext/wasm/api/sqlite3-api-oo1.js e9612cb704c0563c5d71ed2a8dccd95bf6394fa4de3115d1b978dc269c49ab02
 -F ext/wasm/api/sqlite3-api-opfs.js c93cdd14f81a26b3a64990515ee05c7e29827fbc8fba4e4c2fef3a37a984db89
 -F ext/wasm/api/sqlite3-api-prologue.js 0fb0703d2d8ac89fa2d4dd8f9726b0ea226b8708ac34e5b482df046e147de0eb
 -F ext/wasm/api/sqlite3-api-worker.js 1124f404ecdf3c14d9f829425cef778cd683911a9883f0809a463c3c7773c9fd
 +F ext/wasm/api/sqlite3-api-cleanup.js 8564a6077cdcaea9a9f428a019af8a05887f0131e6a2a1e72a7ff1145fadfe77
 +F ext/wasm/api/sqlite3-api-glue.js 366d580c8e5bf7fcf4c6dee6f646c31f5549bd417ea03a59a0acca00e8ecce30
 +F ext/wasm/api/sqlite3-api-oo1.js d7526517f7ad3f6bda16ad66d373bbb71b43168deef7af60eda5c9fe873d1387
 +F ext/wasm/api/sqlite3-api-opfs.js 011799db398157cbd254264b6ebae00d7234b93d0e9e810345f213a5774993c0
 +F ext/wasm/api/sqlite3-api-prologue.js 48ebca4ae340b0242d4f39bbded01bd0588393c8023628be1c454b4db6f7bd6e
 +F ext/wasm/api/sqlite3-api-worker1.js d33062afa045fd4be01ba4abc266801807472558b862b30056211b00c9c347b4
  F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
 -F ext/wasm/api/sqlite3-wasm.c 8585793ca8311c7a0618b7e00ed2b3729799c20664a51f196258576e3d475c9e
 -F ext/wasm/api/sqlite3-worker.js 1325ca8d40129a82531902a3a077b795db2eeaee81746e5a0c811a04b415fa7f
 -F ext/wasm/common/SqliteTestUtil.js e41a1406f18da9224523fad0c48885caf995b56956a5b9852909c0989e687e90
 +F ext/wasm/api/sqlite3-wasm.c 4130e2df9587f4e4c3afc04c3549d682c8a5c0cfe5b22819a0a86edb7f01b9bd
 +F ext/wasm/batch-runner-kvvfs.html ef3b2f553abad4f17a2a29ce6526023793a88e8597b7a24b8c7855a030b90a16
 +F ext/wasm/batch-runner.html 2857a6db7292ac83d1581af865d643fd34235db2df830d10b43b01388c599e04
 +F ext/wasm/batch-runner.js 6f5b86e0b5519a9a941d9f17ee9c5ecdc63f452f157602fe7fdf87f6275a2b49
 +F ext/wasm/common/SqliteTestUtil.js 529161a624265ba84271a52db58da022649832fa1c71309fb1e02cc037327a2b
  F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
 -F ext/wasm/common/testing.css 572cf1ffae0b6eb7ca63684d3392bf350217a07b90e7a896e4fa850700c989b0
 -F ext/wasm/common/whwasmutil.js 3d9deda1be718e2b10e2b6b474ba6ba857d905be314201ae5b3df5eef79f66aa
 +F ext/wasm/common/testing.css 3a5143699c2b73a85b962271e1a9b3241b30d90e30d895e4f55665e648572962
 +F ext/wasm/common/whwasmutil.js f7282ef36c9625330d4e6e82d1beec6678cd101e95e7108cd85db587a788c145
 +F ext/wasm/demo-oo1.html 75646855b38405d82781246fd08c852a2b3bee05dd9f0fe10ab655a8cffb79aa
 +F ext/wasm/demo-oo1.js 477f230cce3455e701431436d892d8c6bfea2bdf1ddcdd32a273e2f4bb339801
  F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
 -F ext/wasm/fiddle/fiddle-worker.js 88bc2193a6cb6a3f04d8911bed50a4401fe6f277de7a71ba833865ab64a1b4ae
 +F ext/wasm/fiddle/fiddle-worker.js bccf46045be8824752876f3eec01c223be0616ccac184bffd0024cfe7a3262b8
  F ext/wasm/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08
 -F ext/wasm/fiddle/fiddle.js 812f9954cc7c4b191884ad171f36fcf2d0112d0a7ecfdf6087896833a0c079a8
 -F ext/wasm/jaccwabyt/jaccwabyt.js 99b424b4d467d4544e82615b58e2fe07532a898540bf9de2a985f3c21e7082b2
 +F ext/wasm/fiddle/fiddle.js 4ffcfc9a235beebaddec689a549e9e0dfad6dca5c1f0b41f03468d7e76480686
 +F ext/wasm/index.html 095b9a8cee9aac2654c23686ead22f3452b89d581fb41d34d47b6548546b5365
 +F ext/wasm/jaccwabyt/jaccwabyt.js 0d7f32817456a0f3937fcfd934afeb32154ca33580ab264dab6c285e6dbbd215
  F ext/wasm/jaccwabyt/jaccwabyt.md 447cc02b598f7792edaa8ae6853a7847b8178a18ed356afacbdbf312b2588106
  F ext/wasm/jaccwabyt/jaccwabyt_test.c 39e4b865a33548f943e2eb9dd0dc8d619a80de05d5300668e9960fff30d0d36f
  F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19
 -F ext/wasm/kvvfs.make 7cc9cf10e744c3ba523c3eaf5c4af47028f3a5bb76db304ea8044a9b2a9d496f
 -F ext/wasm/kvvfs1.html 2acb241a6110a4ec581adbf07a23d5fc2ef9c7142aa9d60856732a102abc5016
 -F ext/wasm/kvvfs1.js 46afaf4faba041bf938355627bc529854295e561f49db3a240c914e75a529338
 -F ext/wasm/testing1.html 0bf3ff224628c1f1e3ed22a2dc1837c6c73722ad8c0ad9c8e6fb9e6047667231
 -F ext/wasm/testing1.js cba7134901a965743fa9289d82447ab71de4690b1ee5d06f6cb83e8b569d7943
 -F ext/wasm/testing2.html 73e5048e666fd6fb28b6e635677a9810e1e139c599ddcf28d687c982134b92b8
 -F ext/wasm/testing2.js d37433c601f88ed275712c1cfc92d3fb36c7c22e1ed8c7396fb2359e42238ebc
 +F ext/wasm/kvvfs.make 4b2ba6d061f3a52da9f5812f86f4faa80fb4d9456a152f6b0585dccd667a4e22
 +F ext/wasm/kvvfs1.html 13bb24190bfb276a57b228499519badcc1bf39ed07e4b37bc2a425ce6418fed1
 +F ext/wasm/kvvfs1.js ec1c1d071bb055711f9151df05616111432cf3e6bf7ac7f8dcbcfb56c9d9ed48
 +F ext/wasm/scratchpad-opfs-worker.html 5fdda167571264300f388847d34f00b77dd48984a8dba2ee9c099c3ffa05db66
 +F ext/wasm/scratchpad-opfs-worker.js cf6c4554d3b099c1a50013e50d19b3dc60e183511b4b4dbe7fabc2b9d3360567
 +F ext/wasm/scratchpad-opfs-worker2.js 8c980370bbd5a262d96af8627c443936e11b87d0263a02123769d5953fc146da
 +F ext/wasm/scratchpad-wasmfs-main.html 20cf6f1a8f368e70d01e8c17200e3eaa90f1c8e1029186d836d14b83845fbe06
 +F ext/wasm/scratchpad-wasmfs-main.js 69e960e9161f6412fd0c30f355d4112f1894d6609eb431e2d16d207d1380518e
- F ext/wasm/speedtest1-kvvfs.html 20f47314ea1b892cfb9248d63e2514573be089d7ab1949dddadd4fed761e07a9
++F ext/wasm/speedtest1-kvvfs.html c8b65c20e2b35298dc02d8e0a394d5e1eb857fd22e504468388234aee13aef08
 +F ext/wasm/speedtest1-wasmfs.html 6a67a6812f03a2058eb5c6ad0c8dea4bf749d0160ed9d6b826dabe7b766c3cf7
 +F ext/wasm/speedtest1-worker.html d8881ae802d15fb8adb94049265173e99f350e07e1d4e6f9e1cbd8969fe63a04
 +F ext/wasm/speedtest1-worker.js fb5d282c0b8aed18daf41c57f768cbf434f8137dbff707d53dcedcd7d4cb60ef
 +F ext/wasm/speedtest1.html fbb8e4d1639028443f3687a683be660beca6927920545cf6b1fdf503104591c0
 +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-worker1-promiser.js 92b8da5f38439ffec459a8215775d30fa498bc0f1ab929ff341fc3dd479660b9
 +F ext/wasm/sqlite3-worker1.js 0c1e7626304543969c3846573e080c082bf43bcaa47e87d416458af84f340a9e
 +F ext/wasm/testing-worker1-promiser.html 6eaec6e04a56cf24cf4fa8ef49d78ce8905dde1354235c9125dca6885f7ce893
 +F ext/wasm/testing-worker1-promiser.js 63448fddfd3b8c89ff667d17c8b31c6c2259dd4647ebbbd28f3a921c48e924da
 +F ext/wasm/testing1.html 50575755e43232dbe4c2f97c9086b3118eb91ec2ee1fae931e6d7669fb17fcae
 +F ext/wasm/testing1.js 7cd8ab255c238b030d928755ae8e91e7d90a12f2ae601b1b8f7827aaa4fb258e
 +F ext/wasm/testing2.html a66951c38137ff1d687df79466351f3c734fa9c6d9cce71d3cf97c291b2167e3
 +F ext/wasm/testing2.js 25584bcc30f19673ce13a6f301f89f8820a59dfe044e0c4f2913941f4097fe3c
 +F ext/wasm/wasmfs.make 21a5cf297954a689e0dc2a95299ae158f681cae5e90c10b99d986097815fd42d
  F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
  F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
  F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
@@@ -597,10 -574,10 +597,10 @@@ F src/notify.c 89a97dc854c3aa62ad5f384e
  F src/os.c 0eb831ba3575af5277e47f4edd14fdfc90025c67eb25ce5cda634518d308d4e9
  F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63
  F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
- F src/os_kv.c 554a2c109f8810b743af2eed4ba732d18dfdbc4d073e3a9bd8b8e828215a9692
+ F src/os_kv.c 3a2d319988df9da8f3a4d0c753a1492542bd3017ff7ae5d07814460eac6b0b19
  F src/os_setup.h 0711dbc4678f3ac52d7fe736951b6384a0615387c4ba5135a4764e4e31f4b6a6
  F src/os_unix.c 0fa91925f0b8831fc0156a9c04d39d86f85baf9eef66c98712395e1715cb75cc
 -F src/os_win.c e9454cb141908e8eef2102180bad353a36480612d5b736e4c2bd5777d9b25a34
 +F src/os_win.c 8d129ae3e59e0fa900e20d0ad789e96f2e08177f0b00b53cdda65c40331e0902
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
  F src/pager.c 6176d9752eb580419e8fef4592dc417a6b00ddfd43ee22f818819bf8840ceee8
  F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3
@@@ -2027,8 -2004,8 +2027,8 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P 13899bb98c80525276d2484598b94e4206358f243f06d45c02700024f7e226fd
- R 9d9ce1010dbc2786b3b027fc9d4d0a5f
 -P 21915af560b111aeeaee751790356151a5f063c2fc703dd4b35b22dc393409fb
 -R 64099072882bb903603d527810cdf234
 -U drh
 -Z 33c23cb0033c7cdf863f626ff2ea91a9
++P 52d1b185b9f6cee1eb3dec436f47e0f52e4621a127abfad8c27f92fd78147889 ef54961ce69fddb4cfeeff0860288de2858a6f7a5aa396691e8e99933eb9af54
++R e35abbf6d1d9b2b828d30426a9a9f018
 +U stephan
- Z a004dca4566819b88df76b8693bd15c3
++Z 0ddb259c4784fc46ece386ccc85309e5
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index ea2d80a5935f945ee60d6da43cb4caafaccb9591,54e92cfb4b36c0a7cc3d1cfcced7aab2b876c518..a8bb9e363c07100e6376df1eb6fce80747831ff9
@@@ -1,1 -1,1 +1,1 @@@
- 52d1b185b9f6cee1eb3dec436f47e0f52e4621a127abfad8c27f92fd78147889
 -ef54961ce69fddb4cfeeff0860288de2858a6f7a5aa396691e8e99933eb9af54
++afb79050e635f3c698e51f06c346cbf23b096cfda7d0f1d8e68514ea0c25b7b7