From de312cfd7c21c551d497af49aa981e07ed2f5ba3 Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Mon, 29 Sep 2014 10:13:35 -0700 Subject: [PATCH] timer_wrap: remove HandleScopes, check return size Calls from JS to C++ have an implicit HandleScope. So there is no need to instantiate a new HandleScope in these basic cases. Check if the returned int64_t is an SMI and cast the return value to uint32_t instead of a double. Prevents needing to box the return value, and saves a small amount of execution time. Signed-off-by: Trevor Norris --- src/timer_wrap.cc | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/timer_wrap.cc b/src/timer_wrap.cc index 099a54ec95..71e6a61343 100644 --- a/src/timer_wrap.cc +++ b/src/timer_wrap.cc @@ -97,8 +97,6 @@ class TimerWrap : public HandleWrap { } static void Start(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args.GetIsolate()); - HandleScope scope(env->isolate()); TimerWrap* wrap = Unwrap(args.Holder()); int64_t timeout = args[0]->IntegerValue(); @@ -108,8 +106,6 @@ class TimerWrap : public HandleWrap { } static void Stop(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args.GetIsolate()); - HandleScope scope(env->isolate()); TimerWrap* wrap = Unwrap(args.Holder()); int err = uv_timer_stop(&wrap->handle_); @@ -117,8 +113,6 @@ class TimerWrap : public HandleWrap { } static void Again(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args.GetIsolate()); - HandleScope scope(env->isolate()); TimerWrap* wrap = Unwrap(args.Holder()); int err = uv_timer_again(&wrap->handle_); @@ -126,8 +120,6 @@ class TimerWrap : public HandleWrap { } static void SetRepeat(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args.GetIsolate()); - HandleScope scope(env->isolate()); TimerWrap* wrap = Unwrap(args.Holder()); int64_t repeat = args[0]->IntegerValue(); @@ -136,12 +128,13 @@ class TimerWrap : public HandleWrap { } static void GetRepeat(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args.GetIsolate()); - HandleScope scope(env->isolate()); TimerWrap* wrap = Unwrap(args.Holder()); int64_t repeat = uv_timer_get_repeat(&wrap->handle_); - args.GetReturnValue().Set(static_cast(repeat)); + if (repeat <= 0xfffffff) + args.GetReturnValue().Set(static_cast(repeat)); + else + args.GetReturnValue().Set(static_cast(repeat)); } static void OnTimeout(uv_timer_t* handle) { @@ -153,11 +146,13 @@ class TimerWrap : public HandleWrap { } static void Now(const FunctionCallbackInfo& args) { - HandleScope handle_scope(args.GetIsolate()); Environment* env = Environment::GetCurrent(args.GetIsolate()); uv_update_time(env->event_loop()); - double now = static_cast(uv_now(env->event_loop())); - args.GetReturnValue().Set(now); + uint64_t now = uv_now(env->event_loop()); + if (now <= 0xfffffff) + args.GetReturnValue().Set(static_cast(now)); + else + args.GetReturnValue().Set(static_cast(now)); } uv_timer_t handle_;