include zerocopy in minion postMessage

This commit is contained in:
Stewart Allen 2022-10-15 15:52:16 -04:00
commit cbf23bc351
2 changed files with 12 additions and 7 deletions

View file

@ -61,16 +61,18 @@ const funcs = {
reply({ seq, union: codec.encode([]) }); reply({ seq, union: codec.encode([]) });
return; return;
} }
let state = { zeros: [] };
let polys = codec.decode(data.polys); let polys = codec.decode(data.polys);
let union = POLY.union(polys, data.minarea || 0, true); let union = POLY.union(polys, data.minarea || 0, true);
reply({ seq, union: codec.encode(union) }); reply({ seq, union: codec.encode(union) }, state.zeros);
}, },
topShells: (data, seq) => { topShells: (data, seq) => {
let top = codec.decode(data.top, {full: true}); let top = codec.decode(data.top, {full: true});
let {z, count, offset1, offsetN, fillOffset, opt} = data; let {z, count, offset1, offsetN, fillOffset, opt} = data;
kiri.driver.FDM.doTopShells(z, top, count, offset1, offsetN, fillOffset, opt); kiri.driver.FDM.doTopShells(z, top, count, offset1, offsetN, fillOffset, opt);
reply({ seq, top: codec.encode(top, {full: true}) }); let state = { zeros: [] };
reply({ seq, top: codec.encode(top, {full: true}) }, state.zeros);
}, },
fill: (data, seq) => { fill: (data, seq) => {
@ -111,6 +113,7 @@ const funcs = {
while (i < points.length) { while (i < points.length) {
realp[p++] = base.newPoint(points[i++], points[i++], points[i++]).round(3); realp[p++] = base.newPoint(points[i++], points[i++], points[i++]).round(3);
} }
let state = { zero: [] };
let output = []; let output = [];
base.sliceZ(z, realp, { base.sliceZ(z, realp, {
...options, ...options,
@ -120,7 +123,7 @@ const funcs = {
// lines do not pass codec properly (for now) // lines do not pass codec properly (for now)
delete rec.lines; delete rec.lines;
} }
reply({ seq, output: codec.encode(output) }); reply({ seq, output: codec.encode(output) }, state.zeros);
}); });
}, },

View file

@ -100,8 +100,9 @@ kiri.minions = {
let polyper = Math.ceil(polys.length / concurrent); let polyper = Math.ceil(polys.length / concurrent);
let running = 0; let running = 0;
let union = []; let union = [];
let state = { zeros: [] };
let receiver = function(data) { let receiver = function(data) {
let polys = codec.decode(data.union); let polys = codec.decode(data.union, state);
union.appendAll(polys); union.appendAll(polys);
if (--running === 0) { if (--running === 0) {
resolve(POLY.union(union, minarea, true)); resolve(POLY.union(union, minarea, true));
@ -113,7 +114,7 @@ kiri.minions = {
cmd: "union", cmd: "union",
minarea, minarea,
polys: codec.encode(polys.slice(i, i + polyper)) polys: codec.encode(polys.slice(i, i + polyper))
}, receiver); }, receiver, state.zeros);
} }
}); });
}, },
@ -124,9 +125,10 @@ kiri.minions = {
resolve(POLY.fillArea(polys, angle, spacing, [], minLen, maxLen)); resolve(POLY.fillArea(polys, angle, spacing, [], minLen, maxLen));
return; return;
} }
const state = { zeros: [] };
minwork.queue({ minwork.queue({
cmd: "fill", cmd: "fill",
polys: codec.encode(polys), polys: codec.encode(polys, state),
angle, spacing, minLen, maxLen angle, spacing, minLen, maxLen
}, data => { }, data => {
let arr = data.fill; let arr = data.fill;
@ -138,7 +140,7 @@ kiri.minions = {
} }
output.appendAll(fill); output.appendAll(fill);
resolve(fill); resolve(fill);
}); }, state.zeros);
}); });
}, },