Add and remove chefworkers when adding or removing inputs.

This increases the responsiveness of baking as it means we don't have to...
spin up workers when bake is clicked
This commit is contained in:
j433866 2019-05-28 14:11:05 +01:00
parent 7528065d4d
commit 6c711ec211
3 changed files with 30 additions and 8 deletions

View File

@ -284,6 +284,9 @@ class InputWaiter {
case "getInput": case "getInput":
this.callbacks[r.data.id](r.data); this.callbacks[r.data.id](r.data);
break; break;
case "removeChefWorker":
this.removeChefWorker();
break;
default: default:
log.error(`Unknown action ${r.action}.`); log.error(`Unknown action ${r.action}.`);
} }
@ -1200,6 +1203,17 @@ class InputWaiter {
inputAdded(changeTab, inputNum) { inputAdded(changeTab, inputNum) {
this.addTab(inputNum, changeTab); this.addTab(inputNum, changeTab);
this.manager.output.addOutput(inputNum, changeTab); this.manager.output.addOutput(inputNum, changeTab);
this.manager.worker.addChefWorker();
}
/**
* Remove a chefWorker from the workerWaiter if we remove an input
*/
removeChefWorker() {
const workerIdx = this.manager.worker.getInactiveChefWorker(true);
const worker = this.manager.worker.chefWorkers[workerIdx];
this.manager.worker.removeChefWorker(worker);
} }
/** /**
@ -1258,7 +1272,8 @@ class InputWaiter {
action: "removeInput", action: "removeInput",
data: { data: {
inputNum: inputNum, inputNum: inputNum,
refreshTabs: refresh refreshTabs: refresh,
removeChefWorker: true
} }
}); });

View File

@ -716,7 +716,11 @@ self.loadFiles = function(filesData) {
const inputNums = []; const inputNums = [];
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
if (i === 0 && self.getInputValue(activeTab) === "") { if (i === 0 && self.getInputValue(activeTab) === "") {
self.removeInput(activeTab); self.removeInput({
inputNum: activeTab,
refreshTabs: false,
removeChefWorker: false
});
lastInputNum = self.addInput(false, "file", { lastInputNum = self.addInput(false, "file", {
name: files[i].name, name: files[i].name,
size: files[i].size.toLocaleString(), size: files[i].size.toLocaleString(),
@ -805,6 +809,7 @@ self.addInput = function(changeTab=false, type, fileData={name: "unknown", size:
* @param {object} removeInputData * @param {object} removeInputData
* @param {number} removeInputData.inputNum - The number of the input to be removed * @param {number} removeInputData.inputNum - The number of the input to be removed
* @param {boolean} removeInputData.refreshTabs - If true, refresh the tabs after removing the input * @param {boolean} removeInputData.refreshTabs - If true, refresh the tabs after removing the input
* @param {boolean} removeInputData.removeChefWorker - If true, remove a chefWorker from the WorkerWaiter
*/ */
self.removeInput = function(removeInputData) { self.removeInput = function(removeInputData) {
const inputNum = removeInputData.inputNum; const inputNum = removeInputData.inputNum;
@ -830,13 +835,15 @@ self.removeInput = function(removeInputData) {
delete self.inputs[inputNum]; delete self.inputs[inputNum];
if (Object.keys(self.inputs).length === 0) {
self.addInput(true, "string");
}
if (refreshTabs) { if (refreshTabs) {
self.refreshTabs(inputNum, "left"); self.refreshTabs(inputNum, "left");
} }
if (self.numInputs < self.maxWorkers && removeInputData.removeChefWorker) {
self.postMessage({
action: "removeChefWorker"
});
}
}; };
/** /**

View File

@ -106,7 +106,7 @@ class WorkerWaiter {
const newWorkerObj = { const newWorkerObj = {
worker: newWorker, worker: newWorker,
active: false, active: false,
inputNum: this.manager.input.getActiveTab() inputNum: -1
}; };
this.chefWorkers.push(newWorkerObj); this.chefWorkers.push(newWorkerObj);
@ -141,6 +141,7 @@ class WorkerWaiter {
} }
if (this.chefWorkers.length > 1 || this.chefWorkers[index].active) { if (this.chefWorkers.length > 1 || this.chefWorkers[index].active) {
log.debug(`Removing ChefWorker at index ${index}`);
this.chefWorkers[index].worker.terminate(); this.chefWorkers[index].worker.terminate();
this.chefWorkers.splice(index, 1); this.chefWorkers.splice(index, 1);
} }
@ -230,7 +231,6 @@ class WorkerWaiter {
this.app.options[r.data.option] = r.data.value; this.app.options[r.data.option] = r.data.value;
break; break;
case "setRegisters": case "setRegisters":
// Should this update with the tabs?
this.manager.recipe.setRegisters(r.data.opIndex, r.data.numPrevRegisters, r.data.registers); this.manager.recipe.setRegisters(r.data.opIndex, r.data.numPrevRegisters, r.data.registers);
break; break;
case "highlightsCalculated": case "highlightsCalculated":