Skip to content

Commit 5a91eca

Browse files
authored
fix(vitest): adjust getWorkerMemoryLimit priority for vmForks (#7960)
1 parent e48c667 commit 5a91eca

File tree

4 files changed

+64
-11
lines changed

4 files changed

+64
-11
lines changed

packages/vitest/src/node/pools/vmForks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ export function createVmForksPool(
213213

214214
function getMemoryLimit(config: ResolvedConfig) {
215215
const memory = nodeos.totalmem()
216-
const limit = getWorkerMemoryLimit(config)
216+
const limit = getWorkerMemoryLimit(config, 'vmForks')
217217

218218
if (typeof memory === 'number') {
219219
return stringToBytes(limit, config.watch ? memory / 2 : memory)

packages/vitest/src/node/pools/vmThreads.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ export function createVmThreadsPool(
206206

207207
function getMemoryLimit(config: ResolvedConfig) {
208208
const memory = nodeos.totalmem()
209-
const limit = getWorkerMemoryLimit(config)
209+
const limit = getWorkerMemoryLimit(config, 'vmThreads')
210210

211211
if (typeof memory === 'number') {
212212
return stringToBytes(limit, config.watch ? memory / 2 : memory)

packages/vitest/src/utils/memory-limit.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,25 @@ function getDefaultThreadsCount(config: ResolvedConfig) {
1919
: Math.max(numCpus - 1, 1)
2020
}
2121

22-
export function getWorkerMemoryLimit(config: ResolvedConfig): string | number {
23-
const memoryLimit = config.poolOptions?.vmThreads?.memoryLimit
22+
export function getWorkerMemoryLimit(config: ResolvedConfig, pool: 'vmThreads' | 'vmForks'): string | number {
23+
if (pool === 'vmForks') {
24+
const opts = config.poolOptions?.vmForks ?? {}
25+
if (opts.memoryLimit) {
26+
return opts.memoryLimit
27+
}
28+
const workers = opts.maxForks ?? getDefaultThreadsCount(config)
2429

25-
if (memoryLimit) {
26-
return memoryLimit
30+
return 1 / workers
2731
}
32+
else {
33+
const opts = config.poolOptions?.vmThreads ?? {}
34+
if (opts.memoryLimit) {
35+
return opts.memoryLimit
36+
}
37+
const workers = opts.maxThreads ?? getDefaultThreadsCount(config)
2838

29-
return (
30-
1
31-
/ (config.poolOptions?.vmThreads?.maxThreads
32-
?? getDefaultThreadsCount(config))
33-
)
39+
return 1 / workers
40+
}
3441
}
3542

3643
/**

test/core/test/memory-limit.test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import type { PoolOptions, ResolvedConfig } from 'vitest/node'
2+
import { describe, expect, it } from 'vitest'
3+
import { getWorkerMemoryLimit } from 'vitest/src/utils/memory-limit.js'
4+
5+
function makeConfig(poolOptions: PoolOptions): ResolvedConfig {
6+
return {
7+
poolOptions: {
8+
vmForks: {
9+
maxForks: poolOptions.maxForks,
10+
memoryLimit: poolOptions.memoryLimit,
11+
},
12+
vmThreads: {
13+
maxThreads: poolOptions.maxThreads,
14+
memoryLimit: poolOptions.memoryLimit,
15+
},
16+
},
17+
} as ResolvedConfig
18+
}
19+
20+
describe('getWorkerMemoryLimit', () => {
21+
it('should prioritize vmThreads.memoryLimit when pool is vmThreads', () => {
22+
const config = {
23+
poolOptions: {
24+
vmForks: { memoryLimit: undefined },
25+
vmThreads: { memoryLimit: '256MB' },
26+
},
27+
} as ResolvedConfig
28+
29+
expect(getWorkerMemoryLimit(config, 'vmThreads')).toBe('256MB')
30+
})
31+
32+
it('should prioritize vmForks.memoryLimit when pool is vmForks', () => {
33+
const config = makeConfig({ memoryLimit: '512MB' })
34+
expect(getWorkerMemoryLimit(config, 'vmForks')).toBe('512MB')
35+
})
36+
37+
it('should calculate 1/maxThreads when vmThreads.memoryLimit is unset', () => {
38+
const config = makeConfig({ maxThreads: 4 })
39+
expect(getWorkerMemoryLimit(config, 'vmThreads')).toBe(1 / 4)
40+
})
41+
42+
it('should calculate 1/maxForks when vmForks.memoryLimit is unset', () => {
43+
const config = makeConfig({ maxForks: 4 })
44+
expect(getWorkerMemoryLimit(config, 'vmForks')).toBe(1 / 4)
45+
})
46+
})

0 commit comments

Comments
 (0)