UNPKG

awv3

Version:
1 lines 2.43 kB
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}exports.__esModule=!0;var _from=require("babel-runtime/core-js/array/from"),_from2=_interopRequireDefault(_from),_getIterator2=require("babel-runtime/core-js/get-iterator"),_getIterator3=_interopRequireDefault(_getIterator2),_keys=require("babel-runtime/core-js/object/keys"),_keys2=_interopRequireDefault(_keys),_promise=require("babel-runtime/core-js/promise"),_promise2=_interopRequireDefault(_promise),_classCallCheck2=require("babel-runtime/helpers/classCallCheck"),_classCallCheck3=_interopRequireDefault(_classCallCheck2),_webworker=require("worker?inline=true!../worker/webworker"),_webworker2=_interopRequireDefault(_webworker),_helpers=require("../core/helpers"),WorkerHandler=function(){function e(){var r=this;(0,_classCallCheck3["default"])(this,e),this.id=(0,_helpers.guid)(),this.worker=new _webworker2["default"],this.promises={},this.requests=[],this.worker.addEventListener("message",function(e){switch(e.data.action){case"Finished":var t=r.promises[e.data.task].resolve;delete r.promises[e.data.task],t(e.data),r.requests.length>0&&r.requests.pop().resolve();break;case"Result":r.promises[e.data.task].callback&&r.promises[e.data.task].callback(e.data.result)}},!1)}return e.prototype.occupy=function(){var e={};e.promise=new _promise2["default"](function(r){return e.resolve=r}),this.requests.push(e)},e.prototype.wait=function(){var e=this;return _promise2["default"].all((0,_keys2["default"])(this.promises).map(function(r){return e.promises[r].promise}).concat(this.requests.map(function(e){return e.promise}))).then(function(){return e})},e.prototype.post=function(e,r){var t=this;e.task=(0,_helpers.guid)();var s={callback:r};return this.promises[e.task]=s,s.promise=new _promise2["default"](function(r){s.resolve=r;var a=[];"Binary"===e.type&&a.push(e.data.buffer),t.worker.postMessage(e,a)}),s.promise},e.getFreeCore=function(){for(var e=cores,r=Array.isArray(e),t=0,e=r?e:(0,_getIterator3["default"])(e);;){var s;if(r){if(t>=e.length)break;s=e[t++]}else{if(t=e.next(),t.done)break;s=t.value}var a=s;if(0==a.requests.length&&0==(0,_keys2["default"])(a.promises).length)return a.occupy(),a}var o=cores[Math.round(Math.random()*(cores.length-1))];return o.occupy(),o},e}();exports["default"]=WorkerHandler;var cores=(0,_from2["default"])(new Array(navigator.hardwareConcurrency||4),function(){return new WorkerHandler});