diff --git a/packages/playwright-test/src/dispatcher.ts b/packages/playwright-test/src/dispatcher.ts index ad676bf0d5354..d7f14241c8d6a 100644 --- a/packages/playwright-test/src/dispatcher.ts +++ b/packages/playwright-test/src/dispatcher.ts @@ -43,7 +43,7 @@ type TestData = { export class Dispatcher { private _workerSlots: { busy: boolean, worker?: Worker }[] = []; private _queue: TestGroup[] = []; - private _queueHashCount = new Map(); + private _queuedOrRunningHashCount = new Map(); private _finished = new ManualPromise(); private _isStopped = false; @@ -58,7 +58,7 @@ export class Dispatcher { this._reporter = reporter; this._queue = testGroups; for (const group of testGroups) { - this._queueHashCount.set(group.workerHash, 1 + (this._queueHashCount.get(group.workerHash) || 0)); + this._queuedOrRunningHashCount.set(group.workerHash, 1 + (this._queuedOrRunningHashCount.get(group.workerHash) || 0)); for (const test of group.tests) this._testById.set(test._id, { test, resultByWorkerIndex: new Map() }); } @@ -80,7 +80,6 @@ export class Dispatcher { // 3. Claim both the job and the worker, run the job and release the worker. this._queue.shift(); - this._queueHashCount.set(job.workerHash, this._queueHashCount.get(job.workerHash)! - 1); this._workerSlots[index].busy = true; await this._startJobInWorker(index, job); this._workerSlots[index].busy = false; @@ -143,7 +142,7 @@ export class Dispatcher { if (slot.worker && !slot.worker.didSendStop() && slot.worker.hash() === worker.hash()) workersWithSameHash++; } - return workersWithSameHash > this._queueHashCount.get(worker.hash())!; + return workersWithSameHash > this._queuedOrRunningHashCount.get(worker.hash())!; } async run() { @@ -273,6 +272,7 @@ export class Dispatcher { worker.on('stepEnd', onStepEnd); const onDone = (params: DonePayload) => { + this._queuedOrRunningHashCount.set(worker.hash(), this._queuedOrRunningHashCount.get(worker.hash())! - 1); let remaining = [...remainingByTestId.values()]; // We won't file remaining if: @@ -379,7 +379,7 @@ export class Dispatcher { if (remaining.length) { this._queue.unshift({ ...testGroup, tests: remaining }); - this._queueHashCount.set(testGroup.workerHash, this._queueHashCount.get(testGroup.workerHash)! + 1); + this._queuedOrRunningHashCount.set(testGroup.workerHash, this._queuedOrRunningHashCount.get(testGroup.workerHash)! + 1); // Perhaps we can immediately start the new job if there is a worker available? this._scheduleJob(); }