/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include #include "hardware-counter.h" namespace PerfCounters { using HPHP::HardwareCounter; void Init(const v8::FunctionCallbackInfo& args) { // TODO: Allow customizing recorded events bool enable = true; std::string events = ""; bool recordSubprocesses = false; HardwareCounter::Init(enable, events, recordSubprocesses); HardwareCounter::s_counter.getCheck(); } void GetCounters(const v8::FunctionCallbackInfo& args) { v8::Isolate* isolate = args.GetIsolate(); v8::Local obj = v8::Object::New(isolate); std::pair> pair(isolate, obj); HardwareCounter::GetPerfEvents( [](const std::string& key, int64_t value, void* data) { std::pair>& pair = *reinterpret_cast>*>(data); v8::Isolate* isolate = pair.first; v8::Local obj = pair.second; obj->Set( v8::String::NewFromUtf8(isolate, key.c_str()), v8::Number::New(isolate, value) ); }, &pair); args.GetReturnValue().Set(obj); } void InitModule(v8::Local exports) { NODE_SET_METHOD(exports, "init", Init); NODE_SET_METHOD(exports, "getCounters", GetCounters); } NODE_MODULE(perfcounters, InitModule) }