Compare commits

...

1 Commits

6 changed files with 108 additions and 12 deletions
+15
View File
@@ -1836,6 +1836,21 @@ int sqlite3__wasm_init_wasmfs(const char *zUnused){
}
#endif /* __EMSCRIPTEN__ && SQLITE_ENABLE_WASMFS */
#if 0
SQLITE_WASM_EXPORT
int sqlite3__wasm_wait_int32(int32_t * addr, int interval, int max){
unsigned tWaited = 0;
if( interval <= 0 ) interval = 50;
if( max <= 0 ) max = 3000;
while( tWaited < max ){
//printf("tWaited=%d, interval=%d, max=%d, *addr=%d\n", tWaited, interval, max, *addr);
if( *addr ) return 1;
tWaited += sqlite3_sleep(interval);
}
return 0;
}
#endif
#if SQLITE_WASM_ENABLE_C_TESTS
SQLITE_WASM_EXPORT
+11 -1
View File
@@ -40,5 +40,15 @@
<script src="@sqlite3.js@"></script>
<script src="@tester1.js@"></script>
//#endif
</body>
//#if nope
<script type='tester1/worker' id='worker-asyncTest1'>
onmessage = function(e){
console.debug("tester1 Worker message:",e);
postMessage('gone');
};
console.debug("tester1/worker coming to life");
postMessage('ready');
</script>
//#endif
</body>
</html>
+67
View File
@@ -140,6 +140,9 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
}
TestUtil.checkHeapSize(true);
};
const debug = (...args)=>{
console.debug('tester1',...args);
};
const log = (...args)=>{
//console.log(...args);
logClass('',...args);
@@ -3304,6 +3307,70 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
//#endif enable-see
;/* end kvvfs tests */
//#if nope
////////////////////////////////////////////////////////////////////////
T.g('Async as sync experiment')
.t({
name: 'async via sync',
predicate: ()=>isUIThread() || 'UI thread only',
test: function(sqlite3){
log("An experiment in hiding async behind a sync interface.");
const nExpect = 11;
const blob = new Blob(
[document.querySelector("#worker-asyncTest1").textContent],
{ type: "text/javascript" }
);
const dbg = (...args)=>console.warn('syncy test',...args);
const startTime = Date.now();
const indirection = function*(pOut){
const genWaiter = function*(ptrToWatch, maxWait){
const maxTime = startTime + maxWait;
const gap = 200;
let n = 0;
const f = wasm.exports.sqlite3__wasm_wait_int32;
do{
dbg("Checking ptr...");
++n;
if( f(ptrToWatch, 75, gap) ){
break;
}
dbg("nope to ptr", n);
yield 0;
}while( Date.now() + gap < maxTime );
dbg("Exited loop?");
dbg("Got async result", wasm.peek32(ptrToWatch));
return 1;
//return 0;
};
const waiter = genWaiter(pOut, 3000);
// does not fire when we need it to. setTimeout( fa, 300 );
debug("Beginning wait on pOut...");
yield *waiter;
//wasm.dealloc(pOut);
};
const pOut = wasm.alloc(4);
if( 1 ){
dbg("Starting worker");
const worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage = function(ev){
dbg("worker shows signs of life",ev);
dbg("Setting pOut async", startTime, Date.now());
//wasm.poke32(pOut, nExpect);
};
}
wasm.poke32(pOut, 0);
const indy = indirection(pOut);
const p = new Promise((ok,nok)=>{
while( !indy.next().done );
ok();
});
//indy.next();
//indy.next();
//indy.next();
}
})/*async-as-sync experiment*/;
//#endif
////////////////////////////////////////////////////////////////////////
T.g('Hook APIs')
.t({
+12 -8
View File
@@ -1,5 +1,5 @@
C Add\sa\skvvfs\svtab\sfor\sinspecting\sthe\sstorage\sstate.\sThis\sis\sfor\stesting\sand\smy\sown\sedification,\snot\spart\sof\sthe\spublic\sAPI.
D 2025-11-29T16:41:27.823
C A\sfailed\sexperiment\sin\shiding\sJS\sasync\sbehind\sa\ssync\sinterface.\sIt's\sa\sfraction\sof\sa\shair's\swidth\sfrom\sworking\sbut\scan't\swork\sbecause\sof\sthe\stiming\swhen\sasync\stasks\sget\sthe\schance\sto\srun.\sStashing\sfor\sfuture\scontemplation.
D 2025-11-29T20:27:42.350
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -604,7 +604,7 @@ F ext/wasm/api/sqlite3-vfs-kvvfs.c-pp.js 3f65769166670f2bd044374958f8eeb43b9fae8
F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js a2eea6442556867b589e04107796c6e1d04a472219529eeb45b7cd221d7d048b
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 88ce2078267a2d1af57525a32d896295f4a8db7664de0e17e82dc9ff006ed8d3
F ext/wasm/api/sqlite3-vtab-helper.c-pp.js 366596d8ff73d4cefb938bbe95bc839d503c3fab6c8335ce4bf52f0d8a7dee81
F ext/wasm/api/sqlite3-wasm.c 1d6f8f3486f4f9a21db597f84a015fe9bb7c111652ce6beacdaceb0d162617ff
F ext/wasm/api/sqlite3-wasm.c c19f1271030cd45d3b36018e03b6f765222d2408b31f5c0f5e92da7aedd8cfa7
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js bda1c75bd674a92a0e27cc2f3d46dbbf21e422413f8046814515a0bd7409328a
F ext/wasm/api/sqlite3-worker1.c-pp.js 802d69ead8c38dc1be52c83afbfc77e757da8a91a2e159e7ed3ecda8b8dba2e7
F ext/wasm/c-pp-lite.c f38254fba42561728c2e4764a7ba8d68700091e7c2f4418112868c0daba16783
@@ -646,8 +646,8 @@ F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.c-pp.html 0e432ec2c0d99cd470484337066e8d27e7aee4641d97115338f7d962bf7b081a
F ext/wasm/tester1.c-pp.html 52d88fe2c6f21a046030a36410b4839b632f4424028197a45a3d5669ea724ddb
F ext/wasm/tester1.c-pp.js 05bb1099472d410b8b5b822af0f362ec565c617eea924d5f53a3b643fc1466d8
F ext/wasm/tester1.c-pp.html dc583906438f2d309664c39e7e12f2d9c733275e362e7c98f295605a64e25524
F ext/wasm/tester1.c-pp.js 37855d8f06a687fb101284b42b0c0bd6f74057df7f9d378b1e087b7a883e1cf5
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@@ -2180,8 +2180,12 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P 0e1a6ca0f1123da680918027b16608bf87593a9d91f7b1f3fc0c3a454185740d
R 2aee549605fa5886143a182c3a989cec
P eaff2e8b7f63575e85fb9be800a2c59163e402d6a25fc6a955b9df15afe13b92
R eee05954a5d93d6f5b89fedeca9b5693
T *branch * js-async-as-sync
T *sym-js-async-as-sync *
T +closed *
T -sym-kvvfs-v2 *
U stephan
Z db62e7bb06a82ac76e6e3341ca1c99a3
Z 8e292bd04ff361d77347b3aa9675c412
# Remove this line to create a well-formed Fossil manifest.
+2 -2
View File
@@ -1,2 +1,2 @@
branch kvvfs-v2
tag kvvfs-v2
branch js-async-as-sync
tag js-async-as-sync
+1 -1
View File
@@ -1 +1 @@
eaff2e8b7f63575e85fb9be800a2c59163e402d6a25fc6a955b9df15afe13b92
d5753272e4861f664297ac0b81f3da9709bbdc9c67663d53688b12d7a05c68a7