From fdfd3ad73408020831502a1aaca2622273d9327a Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Wed, 23 May 2018 14:20:14 -0700 Subject: [PATCH] added user-timing to mol-task --- src/mol-task/execution/observable.ts | 6 +++++- src/mol-task/util/user-timing.ts | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/mol-task/util/user-timing.ts diff --git a/src/mol-task/execution/observable.ts b/src/mol-task/execution/observable.ts index 81fe04efb..6f2cb67c2 100644 --- a/src/mol-task/execution/observable.ts +++ b/src/mol-task/execution/observable.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ @@ -9,6 +9,7 @@ import { RuntimeContext } from './runtime-context' import { Progress } from './progress' import { now } from '../util/now' import { Scheduler } from '../util/scheduler' +import { UserTiming } from '../util/user-timing' interface ExposedTask<T> extends Task<T> { f: (ctx: RuntimeContext) => Promise<T>, @@ -91,9 +92,12 @@ function snapshotProgress(info: ProgressInfo): Progress { } async function execute<T>(task: ExposedTask<T>, ctx: ObservableRuntimeContext) { + UserTiming.markStart(task) ctx.node.progress.startedTime = now(); try { const ret = await task.f(ctx); + UserTiming.markEnd(task) + UserTiming.measure(task) if (ctx.info.abortToken.abortRequested) { abort(ctx.info, ctx.node); } diff --git a/src/mol-task/util/user-timing.ts b/src/mol-task/util/user-timing.ts new file mode 100644 index 000000000..fc64b57ab --- /dev/null +++ b/src/mol-task/util/user-timing.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author Alexander Rose <alexander.rose@weirdbyte.de> + */ + +import { Task } from '../task' + +const hasPerformance = typeof performance !== 'undefined' + +export namespace UserTiming { + function startMarkName(task: Task<any>) { return `startTask${task.id}` } + function endMarkName(task: Task<any>) { return `endTask${task.id}` } + export function markStart(task: Task<any>) { + if (hasPerformance) performance.mark(startMarkName(task)) + } + export function markEnd(task: Task<any>) { + if (hasPerformance) performance.mark(endMarkName(task)) + } + export function measure(task: Task<any>) { + if (hasPerformance) performance.measure(task.name, startMarkName(task), endMarkName(task)) + } +} \ No newline at end of file -- GitLab