feat: add initial continous benchmarking
[poolifier.git] / benchmarks / internal / bench.mjs
CommitLineData
f1c674cd 1import Benchmark from 'benchmark'
d09b37fc 2import {
d9d8c14e
JB
3 Measurements,
4 PoolTypes,
d09b37fc 5 WorkerChoiceStrategies,
d9d8c14e 6 WorkerTypes,
d09b37fc
JB
7 availableParallelism
8} from '../../lib/index.mjs'
dbca3be9 9import { TaskFunctions } from '../benchmarks-types.mjs'
f1c674cd
JB
10import {
11 LIST_FORMATTER,
12 buildPoolifierPool,
13 runPoolifierTest
14} from '../benchmarks-utils.mjs'
cdace0e5 15
d09b37fc 16const poolSize = availableParallelism()
149fdbb9
JB
17const pools = []
18for (const poolType of Object.values(PoolTypes)) {
19 for (const workerType of Object.values(WorkerTypes)) {
23a6c28d
JB
20 if (workerType === WorkerTypes.cluster) {
21 continue
22 }
149fdbb9 23 for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) {
f1c674cd 24 for (const enableTasksQueue of [false]) {
d9d8c14e
JB
25 if (workerChoiceStrategy === WorkerChoiceStrategies.FAIR_SHARE) {
26 for (const measurement of [Measurements.runTime, Measurements.elu]) {
d9d8c14e
JB
27 pools.push([
28 `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}|measurement:${measurement}`,
479ba9f6 29 buildPoolifierPool(workerType, poolType, poolSize, {
6bec21ed
JB
30 workerChoiceStrategy,
31 workerChoiceStrategyOptions: {
32 measurement
33 },
34 enableTasksQueue
35 })
d9d8c14e
JB
36 ])
37 }
38 } else {
d9d8c14e
JB
39 pools.push([
40 `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}`,
479ba9f6 41 buildPoolifierPool(workerType, poolType, poolSize, {
6bec21ed
JB
42 workerChoiceStrategy,
43 enableTasksQueue
44 })
d9d8c14e
JB
45 ])
46 }
149fdbb9
JB
47 }
48 }
49 }
50}
0819631d 51
cdace0e5
JB
52const taskExecutions = 1
53const workerData = {
dbca3be9 54 function: TaskFunctions.jsonIntegerSerialization,
f1c674cd 55 taskSize: 100
cdace0e5 56}
f1c674cd
JB
57
58const suite = new Benchmark.Suite('Poolifier')
59for (const [name, pool] of pools) {
60 suite.add(name, async () => {
61 await runPoolifierTest(pool, {
62 taskExecutions,
63 workerData
149fdbb9
JB
64 })
65 })
f1c674cd 66}
325f50bc 67
f1c674cd
JB
68suite
69 .on('cycle', event => {
70 console.info(event.target.toString())
ca6c7d70 71 })
f1c674cd
JB
72 .on('complete', function () {
73 console.info(
74 'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
75 )
18cac485 76 // eslint-disable-next-line n/no-process-exit
f1c674cd 77 process.exit()
18cac485 78 })
f1c674cd 79 .run({ async: true, maxTime: 120 })