{"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":["MemoryTest","writeSnapshot","name","fn","run","options","time","startTime","results","callibrate","Date","now","end","stats","Stats","delta","runOnce","update","max","dump","dumped","start","heapdumpTrigger","heapdumped","n","gc","process","memoryUsage","heapUsed","metric","mean","formatStats","memoryStdev","Math","sqrt","variance","humanize","toFixed"],"mappings":"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"}