Index: test/cctest/test-heap-profiler.cc |
diff --git a/test/cctest/test-heap-profiler.cc b/test/cctest/test-heap-profiler.cc |
index 6b452960b5ecb3c6746459583213b4e6e653ead3..809372d75aa80c1710c6c224d29fcbc76fc6cd09 100644 |
--- a/test/cctest/test-heap-profiler.cc |
+++ b/test/cctest/test-heap-profiler.cc |
@@ -2007,17 +2007,68 @@ TEST(JSFunctionHasCodeLink) { |
} |
+ |
+class HeapProfilerExtension : public v8::Extension { |
+ public: |
+ static const char* kName; |
+ HeapProfilerExtension() : v8::Extension(kName, kSource) { } |
+ virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( |
+ v8::Handle<v8::String> name); |
+ static void FindUntrackedObjects( |
+ const v8::FunctionCallbackInfo<v8::Value>& args); |
+ private: |
+ static const char* kSource; |
+}; |
+ |
+const char* HeapProfilerExtension::kName = "v8/heap-profiler"; |
+ |
+ |
+const char* HeapProfilerExtension::kSource = |
+ "native function findUntrackedObjects();"; |
+ |
+ |
+v8::Handle<v8::FunctionTemplate> HeapProfilerExtension::GetNativeFunction( |
+ v8::Handle<v8::String> name) { |
+ if (name->Equals(v8::String::New("findUntrackedObjects"))) { |
+ return v8::FunctionTemplate::New( |
+ HeapProfilerExtension::FindUntrackedObjects); |
+ } else { |
+ CHECK(false); |
+ return v8::Handle<v8::FunctionTemplate>(); |
+ } |
+} |
+ |
+ |
+void HeapProfilerExtension::FindUntrackedObjects( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ i::HeapProfiler* heap_profiler = |
+ reinterpret_cast<i::HeapProfiler*>(args.GetIsolate()->GetHeapProfiler()); |
+ int untracked_objects = heap_profiler->FindUntrackedObjects(); |
+ args.GetReturnValue().Set(untracked_objects); |
+ CHECK_EQ(0, untracked_objects); |
+} |
+ |
+ |
+static HeapProfilerExtension kHeapProfilerExtension; |
+v8::DeclareExtension kHeapProfilerExtensionDeclaration( |
+ &kHeapProfilerExtension); |
+ |
+ |
// This is an example of using checking of JS allocations tracking in a test. |
TEST(HeapObjectsTracker) { |
- LocalContext env; |
+ const char* extensions[] = { HeapProfilerExtension::kName }; |
+ v8::ExtensionConfiguration config(1, extensions); |
+ LocalContext env(&config); |
v8::HandleScope scope(env->GetIsolate()); |
HeapObjectsTracker tracker; |
CompileRun("var a = 1.2"); |
CompileRun("var a = 1.2; var b = 1.0; var c = 1.0;"); |
CompileRun( |
- "var a = [];" |
- "for (var i = 0; i < 5; ++i)" |
+ "var a = [];\n" |
+ "for (var i = 0; i < 5; ++i)\n" |
" a[i] = i;\n" |
- "for (var i = 0; i < 3; ++i)" |
- " a.shift();\n"); |
+ "findUntrackedObjects();\n" |
+ "for (var i = 0; i < 3; ++i)\n" |
+ " a.shift();\n" |
+ "findUntrackedObjects();\n"); |
} |