mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Add return value checks to kvstorageWrite(), necessary for recognizing storage-full errors in the JS binding. speedtest1-kvvfs.html runs successfully on localStorage with --size 1 to 6 and starts failing with storage shortage at --size 7.
FossilOrigin-Name: 13839759f8f45e4eb0aa6a5052801f3964d5b2dc2e427e5e91ee6692176381eb
This commit is contained in:
@ -330,6 +330,7 @@ all: batch
|
||||
# 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
|
||||
@ -342,7 +343,24 @@ 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.eflags += -sENVIRONMENT=web
|
||||
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))
|
||||
@ -360,6 +378,7 @@ $(speedtest1.js): $(speedtest1.c) $(sqlite3-wasm.c) $(MAKEFILE) $(sqlite3.c)
|
||||
$(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)
|
||||
|
@ -103,7 +103,7 @@ $(speedtest1-kvvfs.js): $(speedtest1.c) $(sqlite3-wasm.c) $(sqlite3.c) $(MAKEFIL
|
||||
$(emcc.bin) \
|
||||
$(speedtest1.eflags) $(speedtest1-common.eflags) $(speedtest1.cflags) \
|
||||
$(SQLITE_OPT) \
|
||||
-sEXIT_RUNTIME=1 \
|
||||
$(speedtest1.exit-runtime1) \
|
||||
$(kvvfs.cflags) \
|
||||
-o $@ $(speedtest1.c) $(sqlite3-wasm.c) -lm
|
||||
$(maybe-wasm-strip) $(speedtest1-kvvfs.wasm)
|
||||
|
@ -6,10 +6,10 @@
|
||||
<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.wasm</title>
|
||||
<title>speedtest1-kvvfs.wasm</title>
|
||||
</head>
|
||||
<body>
|
||||
<header id='titlebar'><span>speedtest1.wasm</span></header>
|
||||
<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">
|
||||
@ -63,12 +63,28 @@
|
||||
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;
|
||||
};
|
||||
const clearStorage = function(){
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
};
|
||||
const runTests = function(EmscriptenModule){
|
||||
console.log("Module inited.",EmscriptenModule);
|
||||
console.log("Module inited.",EmscriptenModule);
|
||||
|
||||
const wasm = {
|
||||
exports: EmscriptenModule.asm,
|
||||
@ -83,7 +99,7 @@
|
||||
const scope = wasm.scopedAllocPush();
|
||||
const dbFile = 0 ? "session" : "local";
|
||||
const urlArgs = self.SqliteTestUtil.processUrlArgs();
|
||||
const argv = ["speedtest1", "--size", "1"];
|
||||
const argv = ["speedtest1", "--size", "5"];
|
||||
if(urlArgs.flags){
|
||||
// transform flags=a,b,c to ["--a", "--b", "--c"]
|
||||
argv.push(...(urlArgs.flags.split(',').map((v)=>'--'+v)));
|
||||
@ -93,10 +109,14 @@
|
||||
"--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);
|
||||
}
|
||||
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
|
||||
@ -119,8 +139,9 @@
|
||||
wasm.scopedAllocPop(scope);
|
||||
logList.unshift("Done running native main(). Output:");
|
||||
dumpLogList();
|
||||
log2('warning',"Clearing session/local storage.");
|
||||
clearStorage();
|
||||
log2('',"Approximate",dbFile,"storage usage:",guessStorageSize(),"bytes");
|
||||
log2('warning',"Clearing",dbFile,"storage.");
|
||||
clearStorage(dbFile);
|
||||
});
|
||||
}/*runTests()*/;
|
||||
|
||||
|
@ -41,6 +41,9 @@
|
||||
<span>→ <a id='link-wasmfs' href='#' target='speedtest-wasmfs'
|
||||
title='Start speedtest1-wasmfs.html with the selected flags'>speedtest1-wasmfs.html</a>
|
||||
</span>
|
||||
<span>→ <a id='link-kvvfs' href='#' target='speedtest-kvvfs'
|
||||
title='Start speedtest1-kvvfs.html with the selected flags'>speedtest1-kvvfs.html</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class='toolbar-inner-vertical' id='toolbar-runner-controls'>
|
||||
@ -173,6 +176,7 @@
|
||||
const eSelectedFlags = E('#toolbar-selected-flags');
|
||||
const eLinkMainThread = E('#link-main-thread');
|
||||
const eLinkWasmfs = E('#link-wasmfs');
|
||||
const eLinkKvvfs = E('#link-kvvfs');
|
||||
const getSelectedFlags = ()=>Array.prototype.map.call(eFlags.selectedOptions, (v)=>v.value);
|
||||
const updateSelectedFlags = function(){
|
||||
eSelectedFlags.innerText = '';
|
||||
@ -188,6 +192,8 @@
|
||||
eLinkMainThread.href = 'speedtest1.html?flags='+comma;
|
||||
eLinkWasmfs.setAttribute('target', 'speedtest1-wasmfs-'+comma);
|
||||
eLinkWasmfs.href = 'speedtest1-wasmfs.html?flags='+comma;
|
||||
eLinkKvvfs.setAttribute('target', 'speedtest1-kvvfs-'+comma);
|
||||
eLinkKvvfs.href = 'speedtest1-kvvfs.html?flags='+comma;
|
||||
};
|
||||
eFlags.addEventListener('change', updateSelectedFlags );
|
||||
{
|
||||
|
Reference in New Issue
Block a user