@loaders.gl/worker-utils
Version:
Utilities for running tasks on worker threads
80 lines (79 loc) • 2.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _workerPool = _interopRequireDefault(require("./worker-pool"));
var _workerThread = _interopRequireDefault(require("./worker-thread"));
const DEFAULT_PROPS = {
maxConcurrency: 3,
maxMobileConcurrency: 1,
reuseWorkers: true,
onDebug: () => {}
};
class WorkerFarm {
static isSupported() {
return _workerThread.default.isSupported();
}
static getWorkerFarm() {
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});
WorkerFarm._workerFarm.setProps(props);
return WorkerFarm._workerFarm;
}
constructor(props) {
(0, _defineProperty2.default)(this, "props", void 0);
(0, _defineProperty2.default)(this, "workerPools", new Map());
this.props = {
...DEFAULT_PROPS
};
this.setProps(props);
this.workerPools = new Map();
}
destroy() {
for (const workerPool of this.workerPools.values()) {
workerPool.destroy();
}
this.workerPools = new Map();
}
setProps(props) {
this.props = {
...this.props,
...props
};
for (const workerPool of this.workerPools.values()) {
workerPool.setProps(this._getWorkerPoolProps());
}
}
getWorkerPool(options) {
const {
name,
source,
url
} = options;
let workerPool = this.workerPools.get(name);
if (!workerPool) {
workerPool = new _workerPool.default({
name,
source,
url
});
workerPool.setProps(this._getWorkerPoolProps());
this.workerPools.set(name, workerPool);
}
return workerPool;
}
_getWorkerPoolProps() {
return {
maxConcurrency: this.props.maxConcurrency,
maxMobileConcurrency: this.props.maxMobileConcurrency,
reuseWorkers: this.props.reuseWorkers,
onDebug: this.props.onDebug
};
}
}
exports.default = WorkerFarm;
(0, _defineProperty2.default)(WorkerFarm, "_workerFarm", void 0);
//# sourceMappingURL=worker-farm.js.map