UNPKG

benchmark-suite

Version:
1 lines 5.53 kB
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/benchmark/benchmark-suite/src/MemoryTest.mjs"],"sourcesContent":["// var heapdump = require('heapdump');\n// const pify = require('pify');\nimport gc from 'expose-gc';\nimport humanize from 'pretty-bytes';\nimport Stats from 'stats-accumulator';\n\n// const writeSnapshot = pify(heapdump.writeSnapshot);\nconst writeSnapshot = async () => {};\n\nexport default class MemoryTest {\n constructor(name, fn) {\n this.name = name;\n this.fn = fn;\n }\n\n async run(options) {\n const time = options.time;\n await this.callibrate(options);\n const startTime = Date.now();\n const results = { end: { name: this.name, stats: new Stats() }, delta: { name: this.name, stats: new Stats() } };\n\n do {\n const run = await this.runOnce(options);\n results.end.stats.update(run.end);\n results.delta.stats.update(run.delta.max);\n } while (Date.now() - startTime <= time);\n\n return results;\n }\n\n async callibrate(options) {\n const dump = options.heapdumpTrigger && !options.heapdumped;\n let dumped = false;\n let stats = new Stats();\n\n while (stats.n < 5) {\n gc();\n const start = process.memoryUsage().heapUsed;\n await this.fn(() => {});\n if (dump && !dumped) {\n dumped = true;\n await writeSnapshot('hd-calibrate.heapsnapshot');\n gc();\n }\n gc();\n const delta = process.memoryUsage().heapUsed - start;\n if (delta < 0) stats = new Stats();\n else stats.update(delta);\n }\n }\n\n async runOnce(options = {}) {\n const now = Date.now();\n const stats = new Stats();\n this.n++;\n\n let dumped = false;\n const dump = options.heapdumpTrigger && !options.heapdumped;\n if (dump) {\n await writeSnapshot(`hd-${this.name}-${now}-start.heapsnapshot`);\n gc();\n }\n\n gc();\n const start = process.memoryUsage().heapUsed;\n\n await this.fn(async () => {\n gc();\n const delta = process.memoryUsage().heapUsed - start;\n stats.update(delta);\n if (dump && !dumped && delta > options.heapdumpTrigger) {\n dumped = true;\n options.heapdumped = true;\n await writeSnapshot(`hd-${this.name}-${now}-triggered.heapsnapshot`);\n gc();\n }\n });\n\n gc();\n const delta = process.memoryUsage().heapUsed - start;\n if (dump) {\n await writeSnapshot(`hd-${this.name}-${now}-end.heapsnapshot`);\n gc();\n }\n\n return { end: delta, delta: stats };\n }\n\n static metric(stats) {\n return stats.mean;\n }\n\n static formatStats(stats) {\n const memoryStdev = Math.sqrt(stats.variance / stats.mean) / 100;\n return `${humanize(stats.mean)} ±${memoryStdev.toFixed(1)}% (${stats.n} runs sampled)`;\n }\n}\n"],"names":["gc","humanize","Stats","writeSnapshot","MemoryTest","run","options","time","callibrate","startTime","Date","now","results","end","name","stats","delta","runOnce","update","max","dump","heapdumpTrigger","heapdumped","dumped","n","start","process","memoryUsage","heapUsed","fn","metric","mean","formatStats","memoryStdev","Math","sqrt","variance","toFixed","constructor"],"mappings":"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"}