Browse Source

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 <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
v7.x
Ben Noordhuis 9 years ago
parent
commit
b4ea3a08f1
  1. 15
      src/env.h
  2. 5
      src/fs_event_wrap.cc
  3. 67
      src/node.cc

15
src/env.h

@ -67,7 +67,6 @@ namespace node {
#define PER_ISOLATE_STRING_PROPERTIES(V) \ #define PER_ISOLATE_STRING_PROPERTIES(V) \
V(address_string, "address") \ V(address_string, "address") \
V(args_string, "args") \ V(args_string, "args") \
V(argv_string, "argv") \
V(async, "async") \ V(async, "async") \
V(async_queue_string, "_asyncQueue") \ V(async_queue_string, "_asyncQueue") \
V(bytes_string, "bytes") \ V(bytes_string, "bytes") \
@ -82,8 +81,6 @@ namespace node {
V(onclose_string, "_onclose") \ V(onclose_string, "_onclose") \
V(code_string, "code") \ V(code_string, "code") \
V(cwd_string, "cwd") \ V(cwd_string, "cwd") \
V(debug_port_string, "debugPort") \
V(debug_string, "debug") \
V(dest_string, "dest") \ V(dest_string, "dest") \
V(detached_string, "detached") \ V(detached_string, "detached") \
V(disposed_string, "_disposed") \ V(disposed_string, "_disposed") \
@ -99,8 +96,6 @@ namespace node {
V(errno_string, "errno") \ V(errno_string, "errno") \
V(error_string, "error") \ V(error_string, "error") \
V(events_string, "_events") \ V(events_string, "_events") \
V(exec_argv_string, "execArgv") \
V(exec_path_string, "execPath") \
V(exiting_string, "_exiting") \ V(exiting_string, "_exiting") \
V(exit_code_string, "exitCode") \ V(exit_code_string, "exitCode") \
V(exit_string, "exit") \ V(exit_string, "exit") \
@ -115,7 +110,6 @@ namespace node {
V(file_string, "file") \ V(file_string, "file") \
V(fingerprint_string, "fingerprint") \ V(fingerprint_string, "fingerprint") \
V(flags_string, "flags") \ V(flags_string, "flags") \
V(fsevent_string, "FSEvent") \
V(gid_string, "gid") \ V(gid_string, "gid") \
V(handle_string, "handle") \ V(handle_string, "handle") \
V(heap_total_string, "heapTotal") \ V(heap_total_string, "heapTotal") \
@ -129,7 +123,6 @@ namespace node {
V(input_string, "input") \ V(input_string, "input") \
V(internal_string, "internal") \ V(internal_string, "internal") \
V(ipv4_string, "IPv4") \ V(ipv4_string, "IPv4") \
V(ipv6_lc_string, "ipv6") \
V(ipv6_string, "IPv6") \ V(ipv6_string, "IPv6") \
V(isalive_string, "isAlive") \ V(isalive_string, "isAlive") \
V(isclosing_string, "isClosing") \ V(isclosing_string, "isClosing") \
@ -143,7 +136,6 @@ namespace node {
V(model_string, "model") \ V(model_string, "model") \
V(modulus_string, "modulus") \ V(modulus_string, "modulus") \
V(name_string, "name") \ V(name_string, "name") \
V(need_imm_cb_string, "_needImmediateCallback") \
V(netmask_string, "netmask") \ V(netmask_string, "netmask") \
V(nice_string, "nice") \ V(nice_string, "nice") \
V(nsname_string, "nsname") \ V(nsname_string, "nsname") \
@ -215,19 +207,12 @@ namespace node {
V(ticketkeycallback_string, "onticketkeycallback") \ V(ticketkeycallback_string, "onticketkeycallback") \
V(timeout_string, "timeout") \ V(timeout_string, "timeout") \
V(times_string, "times") \ 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(tls_ticket_string, "tlsTicket") \
V(type_string, "type") \ V(type_string, "type") \
V(uid_string, "uid") \ V(uid_string, "uid") \
V(unknown_string, "<unknown>") \ V(unknown_string, "<unknown>") \
V(user_string, "user") \ V(user_string, "user") \
V(username_string, "username") \ V(username_string, "username") \
V(uv_string, "uv") \
V(valid_from_string, "valid_from") \ V(valid_from_string, "valid_from") \
V(valid_to_string, "valid_to") \ V(valid_to_string, "valid_to") \
V(verify_error_string, "verifyError") \ V(verify_error_string, "verifyError") \

5
src/fs_event_wrap.cc

@ -65,14 +65,15 @@ void FSEventWrap::Initialize(Local<Object> target,
Local<Context> context) { Local<Context> context) {
Environment* env = Environment::GetCurrent(context); Environment* env = Environment::GetCurrent(context);
auto fsevent_string = FIXED_ONE_BYTE_STRING(env->isolate(), "FSEvent");
Local<FunctionTemplate> t = env->NewFunctionTemplate(New); Local<FunctionTemplate> t = env->NewFunctionTemplate(New);
t->InstanceTemplate()->SetInternalFieldCount(1); t->InstanceTemplate()->SetInternalFieldCount(1);
t->SetClassName(env->fsevent_string()); t->SetClassName(fsevent_string);
env->SetProtoMethod(t, "start", Start); env->SetProtoMethod(t, "start", Start);
env->SetProtoMethod(t, "close", Close); env->SetProtoMethod(t, "close", Close);
target->Set(env->fsevent_string(), t->GetFunction()); target->Set(fsevent_string, t->GetFunction());
} }

67
src/node.cc

@ -2828,41 +2828,40 @@ static Local<Object> GetFeatures(Environment* env) {
Local<Value> debug = False(env->isolate()); Local<Value> debug = False(env->isolate());
#endif // defined(DEBUG) && DEBUG #endif // defined(DEBUG) && DEBUG
obj->Set(env->debug_string(), debug); obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "debug"), debug);
obj->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "uv"), True(env->isolate()));
obj->Set(env->uv_string(), True(env->isolate()));
// TODO(bnoordhuis) ping libuv // 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 #ifdef OPENSSL_NPN_NEGOTIATED
Local<Boolean> tls_npn = True(env->isolate()); Local<Boolean> tls_npn = True(env->isolate());
#else #else
Local<Boolean> tls_npn = False(env->isolate()); Local<Boolean> tls_npn = False(env->isolate());
#endif #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 #ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
Local<Boolean> tls_alpn = True(env->isolate()); Local<Boolean> tls_alpn = True(env->isolate());
#else #else
Local<Boolean> tls_alpn = False(env->isolate()); Local<Boolean> tls_alpn = False(env->isolate());
#endif #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 #ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
Local<Boolean> tls_sni = True(env->isolate()); Local<Boolean> tls_sni = True(env->isolate());
#else #else
Local<Boolean> tls_sni = False(env->isolate()); Local<Boolean> tls_sni = False(env->isolate());
#endif #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) #if !defined(OPENSSL_NO_TLSEXT) && defined(SSL_CTX_set_tlsext_status_cb)
Local<Boolean> tls_ocsp = True(env->isolate()); Local<Boolean> tls_ocsp = True(env->isolate());
#else #else
Local<Boolean> tls_ocsp = False(env->isolate()); Local<Boolean> tls_ocsp = False(env->isolate());
#endif // !defined(OPENSSL_NO_TLSEXT) && defined(SSL_CTX_set_tlsext_status_cb) #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(), Boolean::New(env->isolate(),
get_builtin_module("crypto") != nullptr)); get_builtin_module("crypto") != nullptr));
@ -2964,12 +2963,12 @@ void SetupProcessObject(Environment* env,
Local<Object> process = env->process_object(); Local<Object> process = env->process_object();
auto maybe = process->SetAccessor(env->context(), auto title_string = FIXED_ONE_BYTE_STRING(env->isolate(), "title");
env->title_string(), CHECK(process->SetAccessor(env->context(),
ProcessTitleGetter, title_string,
ProcessTitleSetter, ProcessTitleGetter,
env->as_external()); ProcessTitleSetter,
CHECK(maybe.FromJust()); env->as_external()).FromJust());
// process.version // process.version
READONLY_PROPERTY(process, READONLY_PROPERTY(process,
@ -3116,14 +3115,15 @@ void SetupProcessObject(Environment* env,
for (int i = 0; i < argc; ++i) { for (int i = 0; i < argc; ++i) {
arguments->Set(i, String::NewFromUtf8(env->isolate(), argv[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 // process.execArgv
Local<Array> exec_arguments = Array::New(env->isolate(), exec_argc); Local<Array> exec_arguments = Array::New(env->isolate(), exec_argc);
for (int i = 0; i < exec_argc; ++i) { for (int i = 0; i < exec_argc; ++i) {
exec_arguments->Set(i, String::NewFromUtf8(env->isolate(), exec_argv[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 // create process.env
Local<ObjectTemplate> process_env_template = Local<ObjectTemplate> process_env_template =
@ -3140,12 +3140,13 @@ void SetupProcessObject(Environment* env,
READONLY_PROPERTY(process, "pid", Integer::New(env->isolate(), getpid())); READONLY_PROPERTY(process, "pid", Integer::New(env->isolate(), getpid()));
READONLY_PROPERTY(process, "features", GetFeatures(env)); READONLY_PROPERTY(process, "features", GetFeatures(env));
maybe = process->SetAccessor(env->context(),
env->need_imm_cb_string(), auto need_immediate_callback_string =
NeedImmediateCallbackGetter, FIXED_ONE_BYTE_STRING(env->isolate(), "_needImmediateCallback");
NeedImmediateCallbackSetter, CHECK(process->SetAccessor(env->context(), need_immediate_callback_string,
env->as_external()); NeedImmediateCallbackGetter,
CHECK(maybe.FromJust()); NeedImmediateCallbackSetter,
env->as_external()).FromJust());
// -e, --eval // -e, --eval
if (eval_string) { if (eval_string) {
@ -3245,16 +3246,16 @@ void SetupProcessObject(Environment* env,
} else { } else {
exec_path_value = String::NewFromUtf8(env->isolate(), argv[0]); 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; delete[] exec_path;
maybe = process->SetAccessor(env->context(), auto debug_port_string = FIXED_ONE_BYTE_STRING(env->isolate(), "debugPort");
env->debug_port_string(), CHECK(process->SetAccessor(env->context(),
DebugPortGetter, debug_port_string,
DebugPortSetter, DebugPortGetter,
env->as_external()); DebugPortSetter,
CHECK(maybe.FromJust()); env->as_external()).FromJust());
// define various internal methods // define various internal methods
env->SetMethod(process, env->SetMethod(process,
@ -3313,8 +3314,8 @@ void SetupProcessObject(Environment* env,
// pre-set _events object for faster emit checks // pre-set _events object for faster emit checks
Local<Object> events_obj = Object::New(env->isolate()); Local<Object> events_obj = Object::New(env->isolate());
maybe = events_obj->SetPrototype(env->context(), Null(env->isolate())); CHECK(events_obj->SetPrototype(env->context(),
CHECK(maybe.FromJust()); Null(env->isolate())).FromJust());
process->Set(env->events_string(), events_obj); process->Set(env->events_string(), events_obj);
} }

Loading…
Cancel
Save