- this.workerLastVirtualTaskTimestamp.set(workerKey, {
- start: workerVirtualTaskStartTimestamp,
- end:
- workerVirtualTaskStartTimestamp +
- (this.pool.workers[workerKey].tasksUsage.avgRunTime ?? 0)
- })
+ }
+
+ private getWorkerNodeVirtualTaskEndTimestamp (
+ workerNodeKey: number,
+ workerNodeVirtualTaskStartTimestamp: number
+ ): number {
+ const workerNodeTaskExecutionTime =
+ this.getWorkerNodeTaskWaitTime(workerNodeKey) +
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ (this.opts!.measurement === Measurements.elu
+ ? this.getWorkerNodeTaskElu(workerNodeKey)
+ : this.getWorkerNodeTaskRunTime(workerNodeKey))
+ return workerNodeVirtualTaskStartTimestamp + workerNodeTaskExecutionTime
+ }
+
+ private getWorkerNodeVirtualTaskStartTimestamp (
+ workerNodeKey: number
+ ): number {
+ const virtualTaskEndTimestamp =
+ this.pool.workerNodes[workerNodeKey]?.strategyData
+ ?.virtualTaskEndTimestamp
+ const now = performance.now()
+ return now < (virtualTaskEndTimestamp ?? -Infinity)
+ ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ virtualTaskEndTimestamp!
+ : now