mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
Add node bindings
This commit is contained in:
parent
e922f869e6
commit
b3bccf2273
16
scripts/perf-counters/README.md
Normal file
16
scripts/perf-counters/README.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# perf-counters
|
||||
|
||||
Lightweight bindings to Linux perf event counters.
|
||||
|
||||
```
|
||||
$ node
|
||||
> var PerfCounters = require('perf-counters');
|
||||
> PerfCounters.init();
|
||||
> var start = PerfCounters.getCounters(); console.log('test'); var end = PerfCounters.getCounters();
|
||||
test
|
||||
> start
|
||||
{ instructions: 1382, loads: 421, stores: 309 }
|
||||
> end
|
||||
{ instructions: 647633, loads: 195771, stores: 133246 }
|
||||
>
|
||||
```
|
||||
15
scripts/perf-counters/binding.gyp
Normal file
15
scripts/perf-counters/binding.gyp
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"targets": [
|
||||
{
|
||||
"target_name": "perfcounters",
|
||||
"sources": [
|
||||
"src/hardware-counter.cpp",
|
||||
"src/perf-counters.cpp",
|
||||
"src/thread-local.cpp",
|
||||
],
|
||||
"cflags": [
|
||||
"-Wno-sign-compare",
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
3
scripts/perf-counters/index.js
Normal file
3
scripts/perf-counters/index.js
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
'use strict';
|
||||
|
||||
module.exports = require('bindings')('perfcounters');
|
||||
10
scripts/perf-counters/package.json
Normal file
10
scripts/perf-counters/package.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"name": "perf-counters",
|
||||
"version": "0.1.2",
|
||||
"description": "Lightweight bindings to Linux perf event counters.",
|
||||
"main": "index.js",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"bindings": "^1.2.1"
|
||||
}
|
||||
}
|
||||
55
scripts/perf-counters/src/perf-counters.cpp
Normal file
55
scripts/perf-counters/src/perf-counters.cpp
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
/**
|
||||
* Copyright 2013-2015, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#include <node.h>
|
||||
|
||||
#include "hardware-counter.h"
|
||||
|
||||
namespace PerfCounters {
|
||||
|
||||
using HPHP::HardwareCounter;
|
||||
|
||||
void Init(const v8::FunctionCallbackInfo<v8::Value>& 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<v8::Value>& args) {
|
||||
v8::Isolate* isolate = args.GetIsolate();
|
||||
v8::Local<v8::Object> obj = v8::Object::New(isolate);
|
||||
std::pair<v8::Isolate*, v8::Local<v8::Object>> pair(isolate, obj);
|
||||
|
||||
HardwareCounter::GetPerfEvents(
|
||||
[](const std::string& key, int64_t value, void* data) {
|
||||
std::pair<v8::Isolate*, v8::Local<v8::Object>>& pair =
|
||||
*reinterpret_cast<std::pair<v8::Isolate*, v8::Local<v8::Object>>*>(data);
|
||||
v8::Isolate* isolate = pair.first;
|
||||
v8::Local<v8::Object> 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<v8::Object> exports) {
|
||||
NODE_SET_METHOD(exports, "init", Init);
|
||||
NODE_SET_METHOD(exports, "getCounters", GetCounters);
|
||||
}
|
||||
|
||||
NODE_MODULE(perfcounters, InitModule)
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user