From 2d368da19f90830e993250050ccd8c6f76bd9cd7 Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Sat, 13 Nov 2021 03:17:42 +0530 Subject: src: prevent extra copies of `TimerWrap::TimerCb` I noticed that we were taking `TimerCb` as a `const&` and then copying that into the member. This is completely fine when the constructor is called with an lvalue. However, when called with an rvalue, we can allow the `std::function` to be moved into the member instead of falling back to a copy, so I changed the constructors to take in universal references. Also, `std::function` constructors can take in multiple arguments, so I further modified the constructors to use variadic templates. Signed-off-by: Darshan Sen PR-URL: https://github.com/nodejs/node/pull/40665 Reviewed-By: Anna Henningsen Reviewed-By: Minwoo Jung Reviewed-By: Antoine du Hamel --- src/timer_wrap.cc | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'src/timer_wrap.cc') diff --git a/src/timer_wrap.cc b/src/timer_wrap.cc index 6660b8c958..2b4457df81 100644 --- a/src/timer_wrap.cc +++ b/src/timer_wrap.cc @@ -1,17 +1,12 @@ +#include "timer_wrap.h" // NOLINT(build/include_inline) +#include "timer_wrap-inl.h" + #include "env-inl.h" #include "memory_tracker-inl.h" -#include "timer_wrap.h" #include "uv.h" namespace node { -TimerWrap::TimerWrap(Environment* env, const TimerCb& fn) - : env_(env), - fn_(fn) { - uv_timer_init(env->event_loop(), &timer_); - timer_.data = this; -} - void TimerWrap::Stop() { if (timer_.data == nullptr) return; uv_timer_stop(&timer_); @@ -48,13 +43,6 @@ void TimerWrap::OnTimeout(uv_timer_t* timer) { t->fn_(); } -TimerWrapHandle::TimerWrapHandle( - Environment* env, - const TimerWrap::TimerCb& fn) { - timer_ = new TimerWrap(env, fn); - env->AddCleanupHook(CleanupHook, this); -} - void TimerWrapHandle::Stop() { if (timer_ != nullptr) return timer_->Stop(); -- cgit v1.2.1