diff --git a/binding.gyp b/binding.gyp index a4bbba1..b94ec3b 100644 --- a/binding.gyp +++ b/binding.gyp @@ -6,7 +6,13 @@ "linux-perf.cc", "linux-perf-listener.cc", ], - "include_dirs": [" +#include #include "linux-perf.h" diff --git a/linux-perf.cc b/linux-perf.cc index 60227e0..23b3d9b 100644 --- a/linux-perf.cc +++ b/linux-perf.cc @@ -1,65 +1,55 @@ -#include +#include +#include #include "linux-perf.h" namespace node { -void LinuxPerf::Initialize(v8::Local target) { - Nan::HandleScope scope; - auto className = Nan::New("LinuxPerf").ToLocalChecked(); +void LinuxPerf::Initialize(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); - v8::Local t = - Nan::New(LinuxPerf::New); - t->InstanceTemplate()->SetInternalFieldCount(1); - t->SetClassName(className); + Napi::Function func = DefineClass(env, "LinuxPerf", { + InstanceMethod("start", &LinuxPerf::Start), + InstanceMethod("stop", &LinuxPerf::Stop) + }); - Nan::SetPrototypeMethod(t, "start", LinuxPerf::Start); - Nan::SetPrototypeMethod(t, "stop", LinuxPerf::Stop); - - Nan::Set(target, className, Nan::GetFunction(t).ToLocalChecked()); + exports.Set("LinuxPerf", func); } -NAN_METHOD(LinuxPerf::New) { - Nan::HandleScope scope; - LinuxPerf *linuxPerf = new LinuxPerf(); - linuxPerf->handler = nullptr; - linuxPerf->Wrap(info.This()); - - info.GetReturnValue().Set(info.This()); +LinuxPerf::LinuxPerf(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info){ + handler = nullptr; } -NAN_METHOD(LinuxPerf::Start) { - Nan::HandleScope scope; - LinuxPerf *linuxPerf = Nan::ObjectWrap::Unwrap(info.Holder()); +Napi::Value LinuxPerf::Start(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); - if (linuxPerf->handler == nullptr) { - linuxPerf->handler = new LinuxPerfHandler(info.GetIsolate()); - linuxPerf->handler->Enable(); - info.GetReturnValue().Set(true); - return; + if (handler == nullptr) { + handler = new LinuxPerfHandler(v8::Isolate::GetCurrent()); + handler->Enable(); + return Napi::Boolean::New(env, true); } - info.GetReturnValue().Set(false); + return Napi::Boolean::New(env, false); } -NAN_METHOD(LinuxPerf::Stop) { - Nan::HandleScope scope; - LinuxPerf *linuxPerf = Nan::ObjectWrap::Unwrap(info.Holder()); +Napi::Value LinuxPerf::Stop(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); - if (linuxPerf->handler != nullptr) { - linuxPerf->handler->Disable(); - delete linuxPerf->handler; - linuxPerf->handler = nullptr; - info.GetReturnValue().Set(true); - return; + if (handler != nullptr) { + handler->Disable(); + delete handler; + handler = nullptr; + return Napi::Boolean::New(env, true); } - info.GetReturnValue().Set(false); + return Napi::Boolean::New(env, false); } -extern "C" void -init(v8::Local target) { - LinuxPerf::Initialize(target); +Napi::Object init(Napi::Env env, Napi::Object exports) { + LinuxPerf::Initialize(env, exports); + return exports; } -NODE_MODULE(LiuxPerfBindings, init) +NODE_API_MODULE(LiuxPerfBindings, init) }; diff --git a/linux-perf.h b/linux-perf.h index b76bcd2..84fc1c5 100644 --- a/linux-perf.h +++ b/linux-perf.h @@ -2,8 +2,7 @@ #define __LINUX_PERF_H #include "v8-profiler.h" -#include -#include +#include #include @@ -21,18 +20,17 @@ class LinuxPerfHandler : public v8::CodeEventHandler { std::string FormatName(v8::CodeEvent* code_event); }; -class LinuxPerf : public Nan::ObjectWrap { +class LinuxPerf : public Napi::ObjectWrap { public: - static void Initialize(v8::Local target); + explicit LinuxPerf(const Napi::CallbackInfo& info); + ~LinuxPerf(); - static NAN_METHOD(New); - static NAN_METHOD(Start); - static NAN_METHOD(Stop); + static void Initialize(Napi::Env env, Napi::Object exports); - LinuxPerfHandler* handler; + Napi::Value Start(const Napi::CallbackInfo& info); + Napi::Value Stop(const Napi::CallbackInfo& info); - LinuxPerf() = default; - ~LinuxPerf() = default; + LinuxPerfHandler* handler; }; }; diff --git a/package.json b/package.json index 6de6185..4d9e173 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ }, "homepage": "https://github.com/mmarchini/node-linux-perf#readme", "dependencies": { - "nan": "^2.10.0", + "node-addon-api": "^1.7.1", "node-gyp": "^4.0.0" }, "devDependencies": {