diff --git a/test/addons/heap-profiler/binding.cc b/test/addons/heap-profiler/binding.cc new file mode 100644 index 00000000000000..846d53a9c6c788 --- /dev/null +++ b/test/addons/heap-profiler/binding.cc @@ -0,0 +1,27 @@ +#include "node.h" +#include "v8.h" +#include "v8-profiler.h" + +namespace { + +inline void Test(const v8::FunctionCallbackInfo& args) { + v8::Isolate* const isolate = args.GetIsolate(); + const v8::HeapSnapshot* const heap_snapshot = + isolate->GetHeapProfiler()->TakeHeapSnapshot(v8::String::Empty(isolate)); + struct : public v8::OutputStream { + WriteResult WriteAsciiChunk(char*, int) override { return kContinue; } + void EndOfStream() override {} + } output_stream; + heap_snapshot->Serialize(&output_stream, v8::HeapSnapshot::kJSON); + const_cast(heap_snapshot)->Delete(); +} + +inline void Initialize(v8::Local binding) { + v8::Isolate* const isolate = binding->GetIsolate(); + binding->Set(v8::String::NewFromUtf8(isolate, "test"), + v8::FunctionTemplate::New(isolate, Test)->GetFunction()); +} + +NODE_MODULE(test, Initialize) + +} // anonymous namespace diff --git a/test/addons/heap-profiler/binding.gyp b/test/addons/heap-profiler/binding.gyp new file mode 100644 index 00000000000000..3bfb84493f3e87 --- /dev/null +++ b/test/addons/heap-profiler/binding.gyp @@ -0,0 +1,8 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ 'binding.cc' ] + } + ] +} diff --git a/test/addons/heap-profiler/test.js b/test/addons/heap-profiler/test.js new file mode 100644 index 00000000000000..a4a316fa572f9b --- /dev/null +++ b/test/addons/heap-profiler/test.js @@ -0,0 +1,12 @@ +'use strict'; + +const binding = require('./build/Release/binding'); + +// Create an AsyncWrap object. +const timer = setTimeout(function() {}, 1); +timer.unref(); + +// Stress-test the heap profiler. +binding.test(); + +clearTimeout(timer);