UNPKG

molstar

Version:

A comprehensive macromolecular library.

327 lines 12.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Tasks = void 0; var tslib_1 = require("tslib"); var B = (0, tslib_1.__importStar)(require("benchmark")); var now_1 = require("../mol-util/now"); var scheduler_1 = require("../mol-task/util/scheduler"); var Tasks; (function (Tasks) { var Yielding = /** @class */ (function () { function Yielding() { this.lastUpdated = 0; } Yielding.prototype.yield = function () { var t = (0, now_1.now)(); if (t - this.lastUpdated < 250) return; this.lastUpdated = t; return scheduler_1.Scheduler.immediatePromise(); }; return Yielding; }()); Tasks.Yielding = Yielding; var CheckYielding = /** @class */ (function () { function CheckYielding() { this.lastUpdated = 0; } Object.defineProperty(CheckYielding.prototype, "needsYield", { get: function () { return (0, now_1.now)() - this.lastUpdated > 250; }, enumerable: false, configurable: true }); CheckYielding.prototype.yield = function () { this.lastUpdated = (0, now_1.now)(); return scheduler_1.Scheduler.immediatePromise(); }; return CheckYielding; }()); Tasks.CheckYielding = CheckYielding; function yielding() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var y, ret, i; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: console.time('yielding'); y = new Yielding(); ret = 0; i = 0; _a.label = 1; case 1: if (!(i < 1000000)) return [3 /*break*/, 4]; ret += +(i.toString() + i.toString()); if (!(i % 10000 === 0)) return [3 /*break*/, 3]; return [4 /*yield*/, y.yield()]; case 2: _a.sent(); _a.label = 3; case 3: i++; return [3 /*break*/, 1]; case 4: console.timeEnd('yielding'); console.log(ret); return [2 /*return*/, ret]; } }); }); } Tasks.yielding = yielding; function yielding1() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var y, ret, yy, i; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: console.time('yielding1'); y = new Yielding(); ret = 0; i = 0; _a.label = 1; case 1: if (!(i < 1000000)) return [3 /*break*/, 4]; ret += +(i.toString() + i.toString()); if (!(i % 10000 === 0 && (yy = y.yield()))) return [3 /*break*/, 3]; return [4 /*yield*/, yy]; case 2: _a.sent(); _a.label = 3; case 3: i++; return [3 /*break*/, 1]; case 4: console.timeEnd('yielding1'); console.log(ret); return [2 /*return*/, ret]; } }); }); } Tasks.yielding1 = yielding1; function testYielding() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var y, ret, i; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: console.time('check yielding'); y = new CheckYielding(); ret = 0; i = 0; _a.label = 1; case 1: if (!(i < 1000000)) return [3 /*break*/, 4]; ret += +(i.toString() + i.toString()); if (!(i % 10000 === 0 && y.needsYield)) return [3 /*break*/, 3]; return [4 /*yield*/, y.yield()]; case 2: _a.sent(); _a.label = 3; case 3: i++; return [3 /*break*/, 1]; case 4: console.timeEnd('check yielding'); console.log(ret); return [2 /*return*/, ret]; } }); }); } Tasks.testYielding = testYielding; function baseline() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var ret, i; return (0, tslib_1.__generator)(this, function (_a) { console.time('baseline'); ret = 0; for (i = 0; i < 1000000; i++) { ret += +(i.toString() + i.toString()); } console.timeEnd('baseline'); console.log(ret); return [2 /*return*/, ret]; }); }); } Tasks.baseline = baseline; function testImmediate() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var ret, y, i; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: console.time('immediate'); ret = 0; y = new CheckYielding(); i = 0; _a.label = 1; case 1: if (!(i < 1000000)) return [3 /*break*/, 4]; if (!(i % 10000 === 0)) return [3 /*break*/, 3]; return [4 /*yield*/, y.yield()]; case 2: _a.sent(); _a.label = 3; case 3: i++; return [3 /*break*/, 1]; case 4: console.timeEnd('immediate'); console.log(ret); return [2 /*return*/, ret]; } }); }); } Tasks.testImmediate = testImmediate; function run() { var _this = this; var suite = new B.Suite(); suite .add("yielding", function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, yielding()]; case 1: return [2 /*return*/, _a.sent()]; } }); }); }) // .add(`test yielding`, () => testYielding().then(() => { })) .on('cycle', function (e) { return console.log(String(e.target)); }) .run(); } Tasks.run = run; function add(x, y) { return x + y; } // async function addAs(x: number, y: number) { // return x + y; // } function opAsync(n) { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var ret, i, v, _a, _b; return (0, tslib_1.__generator)(this, function (_c) { switch (_c.label) { case 0: ret = 0; i = 0; _c.label = 1; case 1: if (!(i < n)) return [3 /*break*/, 6]; v = add(i, i + 1); _a = ret; if (!v.then) return [3 /*break*/, 3]; return [4 /*yield*/, v]; case 2: _b = _c.sent(); return [3 /*break*/, 4]; case 3: _b = v; _c.label = 4; case 4: ret = _a + _b; _c.label = 5; case 5: i++; return [3 /*break*/, 1]; case 6: return [2 /*return*/, ret]; } }); }); } function opNormal(n) { var ret = 0; for (var i = 0; i < n; i++) { ret += add(i, i + 1); } return ret; } function awaitF() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var N, _a, _b, _c, _d, _e, _f; return (0, tslib_1.__generator)(this, function (_g) { switch (_g.label) { case 0: N = 10000000; console.time('async'); _b = (_a = console).log; return [4 /*yield*/, opAsync(N)]; case 1: _b.apply(_a, [_g.sent()]); console.timeEnd('async'); console.time('async'); _d = (_c = console).log; return [4 /*yield*/, opAsync(N)]; case 2: _d.apply(_c, [_g.sent()]); console.timeEnd('async'); console.time('async'); _f = (_e = console).log; return [4 /*yield*/, opAsync(N)]; case 3: _f.apply(_e, [_g.sent()]); console.timeEnd('async'); console.time('normal'); console.log(opNormal(N)); console.timeEnd('normal'); console.time('normal'); console.log(opNormal(N)); console.timeEnd('normal'); console.time('normal'); console.log(opNormal(N)); console.timeEnd('normal'); return [2 /*return*/]; } }); }); } Tasks.awaitF = awaitF; })(Tasks = exports.Tasks || (exports.Tasks = {})); (function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: // await Tasks.testImmediate(); // await Tasks.testImmediate(); // await Tasks.baseline(); // await Tasks.yielding(); // await Tasks.yielding1(); // await Tasks.testYielding(); // await Tasks.baseline(); // await Tasks.yielding(); // await Tasks.yielding1(); // await Tasks.testYielding(); return [4 /*yield*/, Tasks.awaitF()]; case 1: // await Tasks.testImmediate(); // await Tasks.testImmediate(); // await Tasks.baseline(); // await Tasks.yielding(); // await Tasks.yielding1(); // await Tasks.testYielding(); // await Tasks.baseline(); // await Tasks.yielding(); // await Tasks.yielding1(); // await Tasks.testYielding(); _a.sent(); return [2 /*return*/]; } }); }); }()); // console.time('test') // Tasks.yielding(); // console.timeEnd('test') // console.time('test') // Tasks.yielding(); // console.timeEnd('test') // console.time('test') // Tasks.testYielding(); // console.timeEnd('test') // console.time('test') // Tasks.testYielding(); // console.timeEnd('test') //# sourceMappingURL=tasks.js.map