summaryrefslogtreecommitdiff
path: root/src/node_file.cc
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2018-11-06 18:37:39 +0800
committerRich Trott <rtrott@gmail.com>2018-11-08 15:01:14 -0800
commitca51b9471ce2e031a569e49d6c6188e36f9a1b81 (patch)
treee62c9cda34b274092ce54a1f910fbd62161fccd2 /src/node_file.cc
parentc7e657908c4c2ade215ca51c04754b77489c760a (diff)
downloadandroid-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.cc64
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);