diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2018-11-06 18:37:39 +0800 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2018-11-08 15:01:14 -0800 |
commit | ca51b9471ce2e031a569e49d6c6188e36f9a1b81 (patch) | |
tree | e62c9cda34b274092ce54a1f910fbd62161fccd2 /src/node_file.cc | |
parent | c7e657908c4c2ade215ca51c04754b77489c760a (diff) | |
download | android-node-v8-ca51b9471ce2e031a569e49d6c6188e36f9a1b81.tar.gz android-node-v8-ca51b9471ce2e031a569e49d6c6188e36f9a1b81.tar.bz2 android-node-v8-ca51b9471ce2e031a569e49d6c6188e36f9a1b81.zip |
benchmark: add dir and withFileTypes option readdir benchmarks
PR-URL: https://github.com/nodejs/node/pull/24125
Refs: https://github.com/v8/v8/commit/0483e9a9abe77a73632fd85b9c0cd608efa9aa0d
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Yang Guo <yangguo@chromium.org>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Diffstat (limited to 'src/node_file.cc')
-rw-r--r-- | src/node_file.cc | 64 |
1 files changed, 11 insertions, 53 deletions
diff --git a/src/node_file.cc b/src/node_file.cc index 6333f8d862..fc826ffe69 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -571,7 +571,7 @@ void AfterScanDir(uv_fs_t* req) { Environment* env = req_wrap->env(); Local<Value> error; int r; - std::vector<Local<Value>> name_argv; + std::vector<Local<Value>> name_v; for (int i = 0; ; i++) { uv_dirent_t ent; @@ -593,12 +593,10 @@ void AfterScanDir(uv_fs_t* req) { if (filename.IsEmpty()) return req_wrap->Reject(error); - name_argv.push_back(filename.ToLocalChecked()); + name_v.push_back(filename.ToLocalChecked()); } - Local<Array> names = - Array::New(env->isolate(), name_argv.data(), name_argv.size()); - req_wrap->Resolve(names); + req_wrap->Resolve(Array::New(env->isolate(), name_v.data(), name_v.size())); } void AfterScanDirWithTypes(uv_fs_t* req) { @@ -613,13 +611,9 @@ void AfterScanDirWithTypes(uv_fs_t* req) { Isolate* isolate = env->isolate(); Local<Value> error; int r; - Local<Array> names = Array::New(isolate, 0); - Local<Function> fn = env->push_values_to_array_function(); - Local<Value> name_argv[NODE_PUSH_VAL_TO_ARRAY_MAX]; - size_t name_idx = 0; - Local<Value> types = Array::New(isolate, 0); - Local<Value> type_argv[NODE_PUSH_VAL_TO_ARRAY_MAX]; - size_t type_idx = 0; + + std::vector<Local<Value>> name_v; + std::vector<Local<Value>> type_v; for (int i = 0; ; i++) { uv_dirent_t ent; @@ -641,48 +635,13 @@ void AfterScanDirWithTypes(uv_fs_t* req) { if (filename.IsEmpty()) return req_wrap->Reject(error); - name_argv[name_idx++] = filename.ToLocalChecked(); - - if (name_idx >= arraysize(name_argv)) { - MaybeLocal<Value> ret = fn->Call(env->context(), names, name_idx, - name_argv); - if (ret.IsEmpty()) { - return; - } - name_idx = 0; - } - - type_argv[type_idx++] = Integer::New(isolate, ent.type); - - if (type_idx >= arraysize(type_argv)) { - MaybeLocal<Value> ret = fn->Call(env->context(), types, type_idx, - type_argv); - if (ret.IsEmpty()) { - return; - } - type_idx = 0; - } - } - - if (name_idx > 0) { - MaybeLocal<Value> ret = fn->Call(env->context(), names, name_idx, - name_argv); - if (ret.IsEmpty()) { - return; - } - } - - if (type_idx > 0) { - MaybeLocal<Value> ret = fn->Call(env->context(), types, type_idx, - type_argv); - if (ret.IsEmpty()) { - return; - } + name_v.push_back(filename.ToLocalChecked()); + type_v.push_back(Integer::New(isolate, ent.type)); } Local<Array> result = Array::New(isolate, 2); - result->Set(0, names); - result->Set(1, types); + result->Set(0, Array::New(isolate, name_v.data(), name_v.size())); + result->Set(1, Array::New(isolate, type_v.data(), type_v.size())); req_wrap->Resolve(result); } @@ -1523,9 +1482,8 @@ static void ReadDir(const FunctionCallbackInfo<Value>& args) { Local<Array> names = Array::New(isolate, name_v.data(), name_v.size()); if (with_types) { Local<Array> result = Array::New(isolate, 2); - Local<Value> types = Array::New(isolate, type_v.data(), type_v.size()); result->Set(0, names); - result->Set(1, types); + result->Set(1, Array::New(isolate, type_v.data(), type_v.size())); args.GetReturnValue().Set(result); } else { args.GetReturnValue().Set(names); |