perf: add measurement coverage to benchmark
[poolifier.git] / benchmarks / internal / bench.mjs
CommitLineData
149fdbb9 1import { add, complete, cycle, save, suite } from 'benny'
d09b37fc 2import {
d9d8c14e
JB
3 Measurements,
4 PoolTypes,
d09b37fc 5 WorkerChoiceStrategies,
d9d8c14e 6 WorkerTypes,
d09b37fc
JB
7 availableParallelism
8} from '../../lib/index.mjs'
d9d8c14e 9import { WorkerFunctions } from '../benchmarks-types.mjs'
8f810074 10import { buildPool, runTest } from '../benchmarks-utils.mjs'
cdace0e5 11
d09b37fc 12const poolSize = availableParallelism()
149fdbb9
JB
13const pools = []
14for (const poolType of Object.values(PoolTypes)) {
15 for (const workerType of Object.values(WorkerTypes)) {
23a6c28d
JB
16 if (workerType === WorkerTypes.cluster) {
17 continue
18 }
149fdbb9 19 for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) {
d9d8c14e
JB
20 for (const enableTasksQueue of [false, true]) {
21 if (workerChoiceStrategy === WorkerChoiceStrategies.FAIR_SHARE) {
22 for (const measurement of [Measurements.runTime, Measurements.elu]) {
23 const pool = buildPool(workerType, poolType, poolSize, {
24 workerChoiceStrategy,
25 workerChoiceStrategyOptions: {
26 measurement
27 },
28 enableTasksQueue
29 })
30 pools.push([
31 `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}|measurement:${measurement}`,
32 pool
33 ])
34 }
35 } else {
36 const pool = buildPool(workerType, poolType, poolSize, {
37 workerChoiceStrategy,
38 enableTasksQueue
39 })
40 pools.push([
41 `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}`,
42 pool
43 ])
44 }
149fdbb9
JB
45 }
46 }
47 }
48}
0819631d 49
cdace0e5
JB
50const taskExecutions = 1
51const workerData = {
52 function: WorkerFunctions.jsonIntegerSerialization,
53 taskSize: 1000
54}
149fdbb9
JB
55const addPools = pools =>
56 pools.map(([name, pool]) => {
57 return add(name, async () => {
58 await runTest(pool, {
59 taskExecutions,
60 workerData
61 })
62 })
63 })
325f50bc 64
ca6c7d70
JB
65const resultsFile = 'poolifier'
66const resultsFolder = 'benchmarks/internal/results'
149fdbb9 67suite(
ca6c7d70 68 'Poolifier',
149fdbb9
JB
69 ...addPools(pools),
70 cycle(),
71 complete(),
72 save({
ca6c7d70
JB
73 file: resultsFile,
74 folder: resultsFolder,
75 format: 'json',
76 details: true
77 }),
149fdbb9 78 save({
ca6c7d70
JB
79 file: resultsFile,
80 folder: resultsFolder,
81 format: 'chart.html',
82 details: true
83 }),
149fdbb9 84 save({
ca6c7d70
JB
85 file: resultsFile,
86 folder: resultsFolder,
87 format: 'table.html',
88 details: true
89 })
90)
18cac485
JB
91 .then(() => {
92 // eslint-disable-next-line n/no-process-exit
93 return process.exit()
94 })
95 .catch(err => console.error(err))