- private computeWorkerLastVirtualTaskTimestamp () {
- for (const worker of this.pool.workers) {
- const workerVirtualTaskStartTimestamp = Math.max(
- Date.now(),
- this.workerLastVirtualTaskTimestamp.get(worker)?.end ?? -Infinity
- )
- const workerVirtualTaskEndTimestamp =
- workerVirtualTaskStartTimestamp +
- (this.pool.getWorkerAverageTasksRunTime(worker) ?? 0)
- this.workerLastVirtualTaskTimestamp.set(worker, {
- start: workerVirtualTaskStartTimestamp,
- end: workerVirtualTaskEndTimestamp
- })
- }
+ private computeWorkerNodeVirtualTaskEndTimestamp (
+ workerNodeKey: number
+ ): number {
+ return this.getWorkerNodeVirtualTaskEndTimestamp(
+ workerNodeKey,
+ this.getWorkerNodeVirtualTaskStartTimestamp(workerNodeKey)
+ )
+ }
+
+ private getWorkerNodeVirtualTaskEndTimestamp (
+ workerNodeKey: number,
+ workerNodeVirtualTaskStartTimestamp: number
+ ): number {
+ const workerNodeTaskRunTime =
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ this.opts!.measurement === Measurements.elu
+ ? this.getWorkerNodeTaskElu(workerNodeKey)
+ : this.getWorkerNodeTaskRunTime(workerNodeKey)
+ return workerNodeVirtualTaskStartTimestamp + workerNodeTaskRunTime
+ }
+
+ 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