+
+ /**
+ * Gets the task function in the given scope.
+ *
+ * @param name - Name of the function that will be returned.
+ */
+ private getTaskFunction (name?: string): WorkerFunction<Data, Response> {
+ name = name ?? DEFAULT_FUNCTION_NAME
+ const fn = this.taskFunctions.get(name)
+ if (fn == null) {
+ throw new Error(`Task function '${name}' not found`)
+ }
+ return fn
+ }
+
+ private beginTaskPerformance (): TaskPerformance {
+ this.checkStatistics()
+ return {
+ timestamp: performance.now(),
+ ...(this.statistics.elu && { elu: performance.eventLoopUtilization() })
+ }
+ }
+
+ private endTaskPerformance (
+ taskPerformance: TaskPerformance
+ ): TaskPerformance {
+ this.checkStatistics()
+ return {
+ ...taskPerformance,
+ ...(this.statistics.runTime && {
+ runTime: performance.now() - taskPerformance.timestamp
+ }),
+ ...(this.statistics.elu && {
+ elu: performance.eventLoopUtilization(taskPerformance.elu)
+ })
+ }
+ }
+
+ private checkStatistics (): void {
+ if (this.statistics == null) {
+ throw new Error('Performance statistics computation requirements not set')
+ }
+ }