mirror of
https://github.com/nodejs/node.git
synced 2025-05-06 20:08:02 +00:00

Many benchmarks use test/common/tmpdir. This changes 3 benchmarks that use NODE_TMPDIR to also use test/common/tmpdir. This is necessary in preparation for the next commit that changes tmpdir to delete tmpdir.path when the Node.js process exits. Thus, if multiple benchmarks are run sequentially, the ones that use tmpdir will remove the directory and the ones changed here would fail because it does not exist. This happens when running test/benchmark. Note: to explicitly select a directory for tmpdir, use NODE_TEST_DIR. PR-URL: https://github.com/nodejs/node/pull/28858 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
62 lines
1.4 KiB
JavaScript
62 lines
1.4 KiB
JavaScript
// Call fs.readFile over and over again really fast.
|
|
// Then see how many times it got called.
|
|
// Yes, this is a silly benchmark. Most benchmarks are silly.
|
|
'use strict';
|
|
|
|
const path = require('path');
|
|
const common = require('../common.js');
|
|
const fs = require('fs');
|
|
const assert = require('assert');
|
|
|
|
const tmpdir = require('../../test/common/tmpdir');
|
|
tmpdir.refresh();
|
|
const filename = path.resolve(tmpdir.path,
|
|
`.removeme-benchmark-garbage-${process.pid}`);
|
|
|
|
const bench = common.createBenchmark(main, {
|
|
dur: [5],
|
|
len: [1024, 16 * 1024 * 1024],
|
|
concurrent: [1, 10]
|
|
});
|
|
|
|
function main({ len, dur, concurrent }) {
|
|
try { fs.unlinkSync(filename); } catch {}
|
|
var data = Buffer.alloc(len, 'x');
|
|
fs.writeFileSync(filename, data);
|
|
data = null;
|
|
|
|
var reads = 0;
|
|
var benchEnded = false;
|
|
bench.start();
|
|
setTimeout(() => {
|
|
benchEnded = true;
|
|
bench.end(reads);
|
|
try { fs.unlinkSync(filename); } catch {}
|
|
process.exit(0);
|
|
}, dur * 1000);
|
|
|
|
function read() {
|
|
fs.readFile(filename, afterRead);
|
|
}
|
|
|
|
function afterRead(er, data) {
|
|
if (er) {
|
|
if (er.code === 'ENOENT') {
|
|
// Only OK if unlinked by the timer from main.
|
|
assert.ok(benchEnded);
|
|
return;
|
|
}
|
|
throw er;
|
|
}
|
|
|
|
if (data.length !== len)
|
|
throw new Error('wrong number of bytes returned');
|
|
|
|
reads++;
|
|
if (!benchEnded)
|
|
read();
|
|
}
|
|
|
|
while (concurrent--) read();
|
|
}
|