summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-10-09 01:23:18 +0200
committerAnna Henningsen <anna@addaleax.net>2019-10-11 23:09:39 +0200
commit5c93aab278f6e09e345270b3a0fe49c591a0424f (patch)
tree7ba5931ecb38d399154e7fb1f28975eec3bb5344 /test
parentc0305af2c4aba6d6ecd39eb100a59998d87ddc69 (diff)
downloadandroid-node-v8-5c93aab278f6e09e345270b3a0fe49c591a0424f.tar.gz
android-node-v8-5c93aab278f6e09e345270b3a0fe49c591a0424f.tar.bz2
android-node-v8-5c93aab278f6e09e345270b3a0fe49c591a0424f.zip
fs: buffer dir entries in opendir()
Read up to 32 directory entries in one batch when `dir.readSync()` or `dir.read()` are called. This increases performance significantly, although it introduces quite a bit of edge case complexity. confidence improvement accuracy (*) (**) (***) fs/bench-opendir.js mode='async' dir='lib' n=100 *** 155.93 % ±30.05% ±40.34% ±53.21% fs/bench-opendir.js mode='async' dir='test/parallel' n=100 *** 479.65 % ±56.81% ±76.47% ±101.32% fs/bench-opendir.js mode='sync' dir='lib' n=100 10.38 % ±14.39% ±19.16% ±24.96% fs/bench-opendir.js mode='sync' dir='test/parallel' n=100 *** 63.13 % ±12.84% ±17.18% ±22.58% PR-URL: https://github.com/nodejs/node/pull/29893 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-fs-opendir.js14
1 files changed, 12 insertions, 2 deletions
diff --git a/test/parallel/test-fs-opendir.js b/test/parallel/test-fs-opendir.js
index c9a6d657ed..f2c5d03345 100644
--- a/test/parallel/test-fs-opendir.js
+++ b/test/parallel/test-fs-opendir.js
@@ -58,17 +58,27 @@ const dirclosedError = {
// Check the opendir async version
fs.opendir(testDir, common.mustCall(function(err, dir) {
assert.ifError(err);
- dir.read(common.mustCall(function(err, dirent) {
+ let sync = true;
+ dir.read(common.mustCall((err, dirent) => {
+ assert(!sync);
assert.ifError(err);
// Order is operating / file system dependent
assert(files.includes(dirent.name), `'files' should include ${dirent}`);
assertDirent(dirent);
- dir.close(common.mustCall(function(err) {
+ let syncInner = true;
+ dir.read(common.mustCall((err, dirent) => {
+ assert(!syncInner);
assert.ifError(err);
+
+ dir.close(common.mustCall(function(err) {
+ assert.ifError(err);
+ }));
}));
+ syncInner = false;
}));
+ sync = false;
}));
// opendir() on file should throw ENOTDIR