From e0e20176cd6c93988727ae2c9883fead23d2d39e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Perkki=C3=B6?= Date: Thu, 30 Nov 2023 17:09:20 +0200 Subject: [PATCH] perf: close pool early in run-mode (#4623) --- packages/vitest/src/node/core.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/vitest/src/node/core.ts b/packages/vitest/src/node/core.ts index bc36be4c30d3..58d1a1903d0c 100644 --- a/packages/vitest/src/node/core.ts +++ b/packages/vitest/src/node/core.ts @@ -10,7 +10,7 @@ import { ViteNodeRunner } from 'vite-node/client' import { SnapshotManager } from '@vitest/snapshot/manager' import type { CancelReason, File } from '@vitest/runner' import { ViteNodeServer } from 'vite-node/server' -import type { ArgumentsType, CoverageProvider, OnServerRestartHandler, Reporter, ResolvedConfig, UserConfig, UserWorkspaceConfig, VitestRunMode } from '../types' +import type { ArgumentsType, Awaitable, CoverageProvider, OnServerRestartHandler, Reporter, ResolvedConfig, UserConfig, UserWorkspaceConfig, VitestRunMode } from '../types' import { hasFailed, noop, slash, toArray } from '../utils' import { getCoverageProvider } from '../integrations/coverage' import type { BrowserProvider } from '../types/browser' @@ -76,6 +76,7 @@ export class Vitest { private _onClose: (() => Awaited)[] = [] private _onSetServer: OnServerRestartHandler[] = [] private _onCancelListeners: ((reason: CancelReason) => Promise | void)[] = [] + private _poolClosePromise?: Awaitable async setServer(options: UserConfig, server: ViteDevServer, cliOptions: UserConfig) { this.unregisterWatcher?.() @@ -357,6 +358,10 @@ export class Vitest { await this.runFiles(files) } + // In run mode close pool as early as possible + if (!this.config.watch && this.pool?.close) + this._poolClosePromise = this.pool.close() + await this.reportCoverage(true) if (this.config.watch) @@ -780,7 +785,9 @@ export class Vitest { if (this.pool) { closePromises.push((async () => { - await this.pool?.close?.() + await (this._poolClosePromise || this.pool?.close?.()) + + this._poolClosePromise = undefined this.pool = undefined })()) }