-
-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathplugin-memspike.js
More file actions
48 lines (42 loc) · 1.38 KB
/
plugin-memspike.js
File metadata and controls
48 lines (42 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// @ts-check
const { RecordMemorySpikePlugin, Suite
} = require('../lib/index');
const { test } = require("node:test");
const assert = require("node:assert");
const { setTimeout } = require("node:timers/promises");
const wasteMemoryForAWhile = async () => {
const a = Buffer.alloc(1024 * 1024, "a");
await setTimeout(5);
a.at(1); // prevent optimization
};
function noop() {}
test("RecordMemorySpikePlugin", async (t) => {
const bench = new Suite({
reporter: noop,
plugins: [new RecordMemorySpikePlugin()],
});
bench
.add("sequence", async () => {
for (let i = 0; i < 20; i++) {
await wasteMemoryForAWhile();
}
})
.add("concurent", async () => {
await Promise.all(
Array.from({ length: 20 }, () => wasteMemoryForAWhile()),
);
});
const [bench1, bench2] = await bench.run();
console.dir(
{
bench1,
bench2,
},
{ depth: 100 },
);
const { plugins: [{ result: result1 }] } = bench1;
const { plugins: [{ result: result2 }] } = bench2;
const parseResult = (str) => parseFloat(str.replace(/[^\d.-]/g, ''));
assert.ok(parseResult(result1.new_space) > parseResult(result2.new_space), "Sequence new_space should be larger than concurrent new_space");
assert.ok(parseResult(result1.old_space) > parseResult(result2.old_space), "Sequence old_space should be larger than concurrent old_space");
});