molstar
Version:
A comprehensive macromolecular library.
213 lines • 8.85 kB
JavaScript
/**
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { __awaiter, __generator } from "tslib";
import { Task, Scheduler, MultistepTask, chunkedSubtask } from '../mol-task';
import { now } from '../mol-util/now';
export function test1() {
return __awaiter(this, void 0, void 0, function () {
var t, r;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
t = Task.create('test', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
return [2 /*return*/, 1];
}); }); });
return [4 /*yield*/, t.run()];
case 1:
r = _a.sent();
console.log(r);
return [2 /*return*/];
}
});
});
}
function messageTree(root, prefix) {
if (prefix === void 0) { prefix = ''; }
var p = root.progress;
if (!root.children.length) {
if (p.isIndeterminate)
return "" + prefix + p.taskName + ": " + p.message;
return "" + prefix + p.taskName + ": [" + p.current + "/" + p.max + "] " + p.message;
}
var newPrefix = prefix + ' |_ ';
var subTree = root.children.map(function (c) { return messageTree(c, newPrefix); });
if (p.isIndeterminate)
return "" + prefix + p.taskName + ": " + p.message + "\n" + subTree.join('\n');
return "" + prefix + p.taskName + ": [" + p.current + "/" + p.max + "] " + p.message + "\n" + subTree.join('\n');
}
function createTask(delayMs, r) {
var _this = this;
return Task.create('delayed value ' + r, function (ctx) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
ctx.update("Processing delayed " + r + " after " + delayMs + "ms", true);
return [4 /*yield*/, Scheduler.delay(delayMs)];
case 1:
_a.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 3];
return [4 /*yield*/, ctx.update({ message: "hello from delayed " + r + " " + delayMs })];
case 2:
_a.sent();
_a.label = 3;
case 3: return [2 /*return*/, r];
}
});
}); }, function () { return console.log('On abort called ' + r); });
}
export function abortAfter(delay) {
var _this = this;
return Task.create('abort after ' + delay, function (ctx) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Scheduler.delay(delay)];
case 1:
_a.sent();
throw Task.Aborted('test');
}
});
}); });
}
export function testTree() {
var _this = this;
return Task.create('test o', function (ctx) { return __awaiter(_this, void 0, void 0, function () {
var c1, c2, c3, r, _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0: return [4 /*yield*/, Scheduler.delay(250)];
case 1:
_c.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 3];
return [4 /*yield*/, ctx.update({ message: 'hi! 1' })];
case 2:
_c.sent();
_c.label = 3;
case 3: return [4 /*yield*/, Scheduler.delay(125)];
case 4:
_c.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 6];
return [4 /*yield*/, ctx.update({ message: 'hi! 2' })];
case 5:
_c.sent();
_c.label = 6;
case 6: return [4 /*yield*/, Scheduler.delay(250)];
case 7:
_c.sent();
if (!ctx.shouldUpdate) return [3 /*break*/, 9];
return [4 /*yield*/, ctx.update('hi! 3')];
case 8:
_c.sent();
_c.label = 9;
case 9:
c1 = createTask(250, 1).runAsChild(ctx);
c2 = createTask(500, 2).runAsChild(ctx);
c3 = createTask(750, 3).runAsChild(ctx);
return [4 /*yield*/, c1];
case 10:
_a = (_c.sent());
return [4 /*yield*/, c2];
case 11:
_b = _a + (_c.sent());
return [4 /*yield*/, c3];
case 12:
r = _b + (_c.sent());
if (!ctx.shouldUpdate) return [3 /*break*/, 14];
return [4 /*yield*/, ctx.update({ message: 'Almost done...' })];
case 13:
_c.sent();
_c.label = 14;
case 14: return [2 /*return*/, r + 1];
}
});
}); }, function () { return console.log('On abort O'); });
}
function processChunk(n, state) {
var toProcess = Math.min(state.current + n, state.total);
var start = state.current;
for (var i = start; i < toProcess; i++) {
for (var j = 0; j < 1000000; j++) {
state.i += (i * j + 1 + state.i) % 1023;
state.i = state.i % 1000;
}
}
state.current = toProcess;
return toProcess - start;
}
export var ms = MultistepTask('ms-task', ['step 1', 'step 2', 'step 3'], function (p, step, ctx) { return __awaiter(void 0, void 0, void 0, function () {
var child;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, step(0)];
case 1:
_a.sent();
child = Task.create('chunked', function (ctx) { return __awaiter(void 0, void 0, void 0, function () {
var s;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, chunkedSubtask(ctx, 25, { i: 0, current: 0, total: 125 }, processChunk, function (ctx, s, p) { return ctx.update('chunk test ' + p); })];
case 1:
s = _a.sent();
return [2 /*return*/, s.i];
}
});
}); });
return [4 /*yield*/, child.runAsChild(ctx)];
case 2:
_a.sent();
return [4 /*yield*/, Scheduler.delay(250)];
case 3:
_a.sent();
return [4 /*yield*/, step(1)];
case 4:
_a.sent();
return [4 /*yield*/, chunkedSubtask(ctx, 25, { i: 0, current: 0, total: 80 }, processChunk, function (ctx, s, p) { return ctx.update('chunk test ' + p); })];
case 5:
_a.sent();
return [4 /*yield*/, Scheduler.delay(250)];
case 6:
_a.sent();
return [4 /*yield*/, step(2)];
case 7:
_a.sent();
return [4 /*yield*/, Scheduler.delay(250)];
case 8:
_a.sent();
return [2 /*return*/, p.i + 3];
}
});
}); });
export function abortingObserver(p) {
console.log(messageTree(p.root));
if (now() - p.root.progress.startedTime > 1000) {
p.requestAbort('test');
}
}
export function logP(p) { console.log(messageTree(p.root)); }
function test() {
return __awaiter(this, void 0, void 0, function () {
var m, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, testTree().run(abortingObserver, 50)];
case 1:
m = _a.sent();
console.log(m);
return [3 /*break*/, 3];
case 2:
e_1 = _a.sent();
console.error(e_1);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
});
}
test();
// testObs();
//# sourceMappingURL=task.js.map