busy-wait.js: rename a method argument
[benchmarks-js.git] / busy-wait.js
CommitLineData
ed2968f2 1const Benchmark = require('benchmark')
a9c78d5d 2const { LIST_FORMATTER, sleep } = require('./benchmark-utils')
ed2968f2
JB
3
4const suite = new Benchmark.Suite()
5
6const timeout = 2000
7
e9bfc28e
JB
8/**
9 * @param timeoutMs
10 */
ed2968f2 11function dummyTimeoutBusyWait (timeoutMs) {
a9c78d5d
JB
12 const timeoutTimestampMs = Date.now() + timeoutMs
13 do {} while (Date.now() < timeoutTimestampMs)
14}
15
16/**
17 * @param timeoutMs
e47f67db 18 * @param intervalMs
a9c78d5d 19 */
e47f67db
JB
20async function divideAndConquerTimeoutBusyWait (timeoutMs, intervalMs = 200) {
21 const tries = Math.round(timeoutMs / intervalMs)
a9c78d5d
JB
22 let count = 0
23 do {
24 count++
e47f67db 25 await sleep(intervalMs)
a9c78d5d 26 } while (count <= tries)
ed2968f2
JB
27}
28
e9bfc28e
JB
29/**
30 * @param timeoutMs
e47f67db 31 * @param intervalMs
e9bfc28e 32 */
e47f67db
JB
33function setIntervalTimeoutBusyWait (timeoutMs, intervalMs = 200) {
34 const tries = Math.round(timeoutMs / intervalMs)
ed2968f2
JB
35 let count = 0
36 const triesSetInterval = setInterval(() => {
37 count++
38 if (count === tries) {
39 clearInterval(triesSetInterval)
40 }
e47f67db 41 }, intervalMs)
ed2968f2
JB
42}
43
44suite
45 .add('dummyTimeoutBusyWait', function () {
46 dummyTimeoutBusyWait(timeout)
47 })
a9c78d5d
JB
48 .add('divideAndConquerTimeoutBusyWait', async function () {
49 await divideAndConquerTimeoutBusyWait(timeout)
50 })
ed2968f2
JB
51 .add('setIntervalTimeoutBusyWait', function () {
52 setIntervalTimeoutBusyWait(timeout)
53 })
54 .on('cycle', function (event) {
55 console.log(event.target.toString())
56 })
57 .on('complete', function () {
58 console.log(
59 'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
60 )
61 // eslint-disable-next-line no-process-exit
62 process.exit()
63 })
64 .run()