From b4ea3a08f1507e4260f4fb1fa20a4195f5924091 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sun, 21 Aug 2016 12:31:20 +0200 Subject: [PATCH] src: clean up PER_ISOLATE_STRING_PROPERTIES, v2 Remove strings from the PER_ISOLATE_STRING_PROPERTIES list that are only used once during initialization. It's less expensive to simply create them when needed than turn them into v8::Eternal instances. PR-URL: https://github.com/nodejs/node/pull/8207 Reviewed-By: Franziska Hinkelmann Reviewed-By: James M Snell --- src/env.h | 15 ---------- src/fs_event_wrap.cc | 5 ++-- src/node.cc | 67 ++++++++++++++++++++++---------------------- 3 files changed, 37 insertions(+), 50 deletions(-) diff --git a/src/env.h b/src/env.h index c57cd7ffe89eb7..d8b6b8bb5fdfa2 100644 --- a/src/env.h +++ b/src/env.h @@ -67,7 +67,6 @@ namespace node { #define PER_ISOLATE_STRING_PROPERTIES(V) \ V(address_string, "address") \ V(args_string, "args") \ - V(argv_string, "argv") \ V(async, "async") \ V(async_queue_string, "_asyncQueue") \ V(bytes_string, "bytes") \ @@ -82,8 +81,6 @@ namespace node { V(onclose_string, "_onclose") \ V(code_string, "code") \ V(cwd_string, "cwd") \ - V(debug_port_string, "debugPort") \ - V(debug_string, "debug") \ V(dest_string, "dest") \ V(detached_string, "detached") \ V(disposed_string, "_disposed") \ @@ -99,8 +96,6 @@ namespace node { V(errno_string, "errno") \ V(error_string, "error") \ V(events_string, "_events") \ - V(exec_argv_string, "execArgv") \ - V(exec_path_string, "execPath") \ V(exiting_string, "_exiting") \ V(exit_code_string, "exitCode") \ V(exit_string, "exit") \ @@ -115,7 +110,6 @@ namespace node { V(file_string, "file") \ V(fingerprint_string, "fingerprint") \ V(flags_string, "flags") \ - V(fsevent_string, "FSEvent") \ V(gid_string, "gid") \ V(handle_string, "handle") \ V(heap_total_string, "heapTotal") \ @@ -129,7 +123,6 @@ namespace node { V(input_string, "input") \ V(internal_string, "internal") \ V(ipv4_string, "IPv4") \ - V(ipv6_lc_string, "ipv6") \ V(ipv6_string, "IPv6") \ V(isalive_string, "isAlive") \ V(isclosing_string, "isClosing") \ @@ -143,7 +136,6 @@ namespace node { V(model_string, "model") \ V(modulus_string, "modulus") \ V(name_string, "name") \ - V(need_imm_cb_string, "_needImmediateCallback") \ V(netmask_string, "netmask") \ V(nice_string, "nice") \ V(nsname_string, "nsname") \ @@ -215,19 +207,12 @@ namespace node { V(ticketkeycallback_string, "onticketkeycallback") \ V(timeout_string, "timeout") \ V(times_string, "times") \ - V(title_string, "title") \ - V(tls_npn_string, "tls_npn") \ - V(tls_alpn_string, "tls_alpn") \ - V(tls_ocsp_string, "tls_ocsp") \ - V(tls_sni_string, "tls_sni") \ - V(tls_string, "tls") \ V(tls_ticket_string, "tlsTicket") \ V(type_string, "type") \ V(uid_string, "uid") \ V(unknown_string, "") \ V(user_string, "user") \ V(username_string, "username") \ - V(uv_string, "uv") \ V(valid_from_string, "valid_from") \ V(valid_to_string, "valid_to") \ V(verify_error_string, "verifyError") \ diff --git a/src/fs_event_wrap.cc b/src/fs_event_wrap.cc index 2354a1be0cd57b..64ff93e2576adf 100644 --- a/src/fs_event_wrap.cc +++ b/src/fs_event_wrap.cc @@ -65,14 +65,15 @@ void FSEventWrap::Initialize(Local target, Local context) { Environment* env = Environment::GetCurrent(context); + auto fsevent_string = FIXED_ONE_BYTE_STRING(env->isolate(), "FSEvent"); Local t = env->NewFunctionTemplate(New); t->InstanceTemplate()->SetInternalFieldCount(1); - t->SetClassName(env->fsevent_string()); + t->SetClassName(fsevent_string); env->SetProtoMethod(t, "start", Start); env->SetProtoMethod(t, "close", Close); - target->Set(env->fsevent_string(), t->GetFunction()); + target->Set(fsevent_string, t->GetFunction()); } diff --git a/src/node.cc b/src/node.cc index 11a8a3febd757c..06ce9ca6d0c6ef 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2828,41 +2828,40 @@ static Local GetFeatures(Environment* env) { Local debug = False(env->isolate()); #endif // defined(DEBUG) && DEBUG - obj->Set(env->debug_string(), debug); - - obj->Set(env->uv_string(), True(env->isolate())); + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "debug"), debug); + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "uv"), True(env->isolate())); // TODO(bnoordhuis) ping libuv - obj->Set(env->ipv6_lc_string(), True(env->isolate())); + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "ipv6"), True(env->isolate())); #ifdef OPENSSL_NPN_NEGOTIATED Local tls_npn = True(env->isolate()); #else Local tls_npn = False(env->isolate()); #endif - obj->Set(env->tls_npn_string(), tls_npn); + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "tls_npn"), tls_npn); #ifdef TLSEXT_TYPE_application_layer_protocol_negotiation Local tls_alpn = True(env->isolate()); #else Local tls_alpn = False(env->isolate()); #endif - obj->Set(env->tls_alpn_string(), tls_alpn); + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "tls_alpn"), tls_alpn); #ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB Local tls_sni = True(env->isolate()); #else Local tls_sni = False(env->isolate()); #endif - obj->Set(env->tls_sni_string(), tls_sni); + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "tls_sni"), tls_sni); #if !defined(OPENSSL_NO_TLSEXT) && defined(SSL_CTX_set_tlsext_status_cb) Local tls_ocsp = True(env->isolate()); #else Local tls_ocsp = False(env->isolate()); #endif // !defined(OPENSSL_NO_TLSEXT) && defined(SSL_CTX_set_tlsext_status_cb) - obj->Set(env->tls_ocsp_string(), tls_ocsp); + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "tls_ocsp"), tls_ocsp); - obj->Set(env->tls_string(), + obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "tls"), Boolean::New(env->isolate(), get_builtin_module("crypto") != nullptr)); @@ -2964,12 +2963,12 @@ void SetupProcessObject(Environment* env, Local process = env->process_object(); - auto maybe = process->SetAccessor(env->context(), - env->title_string(), - ProcessTitleGetter, - ProcessTitleSetter, - env->as_external()); - CHECK(maybe.FromJust()); + auto title_string = FIXED_ONE_BYTE_STRING(env->isolate(), "title"); + CHECK(process->SetAccessor(env->context(), + title_string, + ProcessTitleGetter, + ProcessTitleSetter, + env->as_external()).FromJust()); // process.version READONLY_PROPERTY(process, @@ -3116,14 +3115,15 @@ void SetupProcessObject(Environment* env, for (int i = 0; i < argc; ++i) { arguments->Set(i, String::NewFromUtf8(env->isolate(), argv[i])); } - process->Set(env->argv_string(), arguments); + process->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "argv"), arguments); // process.execArgv Local exec_arguments = Array::New(env->isolate(), exec_argc); for (int i = 0; i < exec_argc; ++i) { exec_arguments->Set(i, String::NewFromUtf8(env->isolate(), exec_argv[i])); } - process->Set(env->exec_argv_string(), exec_arguments); + process->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "execArgv"), + exec_arguments); // create process.env Local process_env_template = @@ -3140,12 +3140,13 @@ void SetupProcessObject(Environment* env, READONLY_PROPERTY(process, "pid", Integer::New(env->isolate(), getpid())); READONLY_PROPERTY(process, "features", GetFeatures(env)); - maybe = process->SetAccessor(env->context(), - env->need_imm_cb_string(), - NeedImmediateCallbackGetter, - NeedImmediateCallbackSetter, - env->as_external()); - CHECK(maybe.FromJust()); + + auto need_immediate_callback_string = + FIXED_ONE_BYTE_STRING(env->isolate(), "_needImmediateCallback"); + CHECK(process->SetAccessor(env->context(), need_immediate_callback_string, + NeedImmediateCallbackGetter, + NeedImmediateCallbackSetter, + env->as_external()).FromJust()); // -e, --eval if (eval_string) { @@ -3245,16 +3246,16 @@ void SetupProcessObject(Environment* env, } else { exec_path_value = String::NewFromUtf8(env->isolate(), argv[0]); } - process->Set(env->exec_path_string(), exec_path_value); + process->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "execPath"), + exec_path_value); delete[] exec_path; - maybe = process->SetAccessor(env->context(), - env->debug_port_string(), - DebugPortGetter, - DebugPortSetter, - env->as_external()); - CHECK(maybe.FromJust()); - + auto debug_port_string = FIXED_ONE_BYTE_STRING(env->isolate(), "debugPort"); + CHECK(process->SetAccessor(env->context(), + debug_port_string, + DebugPortGetter, + DebugPortSetter, + env->as_external()).FromJust()); // define various internal methods env->SetMethod(process, @@ -3313,8 +3314,8 @@ void SetupProcessObject(Environment* env, // pre-set _events object for faster emit checks Local events_obj = Object::New(env->isolate()); - maybe = events_obj->SetPrototype(env->context(), Null(env->isolate())); - CHECK(maybe.FromJust()); + CHECK(events_obj->SetPrototype(env->context(), + Null(env->isolate())).FromJust()); process->Set(env->events_string(), events_obj); }