add new assembly preference for enabling wasm testing

This commit is contained in:
Stewart Allen 2021-07-07 21:09:34 -04:00
commit 841df7b5a9
16 changed files with 178 additions and 100 deletions

View file

@ -5,7 +5,15 @@
// only active in workers
if (!self.window) (function() {
if (!self.geo) self.geo = {};
if (!self.geo) self.geo = {
enable,
disable,
count: {
offset: 0,
union: 0,
diff: 0
}
};
const factor = self.base.config.clipper;
const geo = self.geo;
@ -69,6 +77,7 @@ if (!self.window) (function() {
}
function polyOffset(polys, offset, z) {
geo.count.offset++;
let wasm = geo.wasm,
buffer = geo.wasm.shared,
pcount = writePolys(new DataWriter(wasm.heap, buffer), polys),
@ -78,6 +87,7 @@ if (!self.window) (function() {
}
function polyUnion(polys, z) {
geo.count.union++;
let wasm = geo.wasm,
buffer = geo.wasm.shared,
pcount = writePolys(new DataWriter(wasm.heap, buffer), polys),
@ -87,6 +97,7 @@ if (!self.window) (function() {
}
function polyDiff(polysA, polysB, z, AB, BA) {
geo.count.diff++;
let wasm = geo.wasm,
buffer = geo.wasm.shared,
writer = new DataWriter(wasm.heap, buffer),
@ -143,52 +154,65 @@ if (!self.window) (function() {
console.log('offs',{o1:o1[0].points});
}
fetch('/wasm/kiri-geo.wasm')
.then(response => response.arrayBuffer())
.then(bytes => WebAssembly.instantiate(bytes, {
env: {
polygon: (a,b) => { console.log('polygon',a,b) },
point: (a,b) => { console.log('point',a,b) },
abc: (a,b,c) => { console.log('abc',a,b,c) }
},
wasi_snapshot_preview1: {
args_get: (count,bufsize) => { return 0 },
args_sizes_get: (count,bufsize) => { },
environ_get: (count,bufsize) => { return 0 },
environ_sizes_get: (count,bufsize) => { },
proc_exit: (code) => { return code }
}
}))
.then(results => {
let { module, instance } = results;
let { exports } = instance;
let heap = new DataView(exports.memory.buffer);
let wasm = geo.wasm = {
heap,
exports,
memory: exports.memory,
memmax: exports.memory.buffer.byteLength,
malloc: exports.mem_get,
free: exports.mem_clr,
set_debug: exports.set_debug
};
wasm.shared = wasm.malloc(1024 * 1024 * 10),
wasm.fn = {
diff: exports.poly_diff,
union: exports.poly_union,
offset: exports.poly_offset
};
wasm.js = {
diff: polyDiff,
union: polyUnion,
offset: polyOffset
};
if (debug) {
wasm.set_debug(1);
for (let i=0; i<100; i++) {
function enable() {
if (geo.wasm || geo._wasm) {
return;
}
geo._wasm = 'loading';
fetch('/wasm/kiri-geo.wasm')
.then(response => response.arrayBuffer())
.then(bytes => WebAssembly.instantiate(bytes, {
env: {
polygon: (a,b) => { console.log('polygon',a,b) },
point: (a,b) => { console.log('point',a,b) },
abc: (a,b,c) => { console.log('abc',a,b,c) }
},
wasi_snapshot_preview1: {
args_get: (count,bufsize) => { return 0 },
args_sizes_get: (count,bufsize) => { },
environ_get: (count,bufsize) => { return 0 },
environ_sizes_get: (count,bufsize) => { },
proc_exit: (code) => { return code }
}
}))
.then(results => {
// console.log({enabled: geo.wasm});
delete geo._wasm;
let { module, instance } = results;
let { exports } = instance;
let heap = new DataView(exports.memory.buffer);
let wasm = geo.wasm = {
heap,
exports,
memory: exports.memory,
memmax: exports.memory.buffer.byteLength,
malloc: exports.mem_get,
free: exports.mem_clr,
set_debug: exports.set_debug
};
wasm.shared = wasm.malloc(1024 * 1024 * 32),
wasm.fn = {
diff: exports.poly_diff,
union: exports.poly_union,
offset: exports.poly_offset
};
wasm.js = {
diff: polyDiff,
union: polyUnion,
offset: polyOffset
};
if (debug) {
wasm.set_debug(1);
runTests();
}
}
});
});
}
function disable() {
if (geo.wasm) {
delete geo.wasm;
// console.log({disabled: geo});
}
}
})();