| Index: test/cctest/test-heap-profiler.cc
|
| diff --git a/test/cctest/test-heap-profiler.cc b/test/cctest/test-heap-profiler.cc
|
| index db2243a3f0445f847838d5bbe984ef6df5ffe7e9..bcf28ed85a9d6118c7c1bc239f663a0d44d782c9 100644
|
| --- a/test/cctest/test-heap-profiler.cc
|
| +++ b/test/cctest/test-heap-profiler.cc
|
| @@ -2177,3 +2177,55 @@ TEST(TrackHeapAllocations) {
|
| CHECK_GE(node->allocation_size(), 4 * node->allocation_count());
|
| heap_profiler->StopRecordingHeapAllocations();
|
| }
|
| +
|
| +
|
| +static const char* inline_heap_allocation_source =
|
| +"function f_0(x) {\n"
|
| +" try {\n"
|
| +" return f_1(x+1);\n"
|
| +" } catch (e) {}\n"
|
| +"}\n"
|
| +"function f_1(x) {\n"
|
| +" try {\n"
|
| +" return new f_2(x+1);\n"
|
| +" } catch (e) {}\n"
|
| +"}\n"
|
| +"function f_2(x) {\n"
|
| +" this.foo = x;\n"
|
| +"}\n"
|
| +"var instances = [];\n"
|
| +"function start() {\n"
|
| +" instances.push(f_0(0));\n"
|
| +"}\n"
|
| +"\n"
|
| +"for (var i = 0; i < 100; i++) start();\n";
|
| +
|
| +
|
| +TEST(TrackInlineHeapAllocations) {
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
| + LocalContext env;
|
| +
|
| + v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler();
|
| + heap_profiler->StartRecordingHeapAllocations();
|
| +
|
| + CompileRun(inline_heap_allocation_source);
|
| +
|
| + const v8::HeapSnapshot* snapshot = heap_profiler->TakeHeapSnapshot(
|
| + v8::String::New("Test"));
|
| + i::HeapSnapshotsCollection* collection = ToInternal(snapshot)->collection();
|
| + AllocationTracker* tracker = collection->allocation_tracker();
|
| + CHECK_NE(NULL, tracker);
|
| + // Resolve all function locations.
|
| + tracker->PrepareForSerialization();
|
| + // Print for better diagnostics in case of failure.
|
| + tracker->trace_tree()->Print(tracker);
|
| +
|
| + const char* names[] =
|
| + { "(anonymous function)", "start", "f_0", "f_1" };
|
| + AllocationTraceNode* node =
|
| + FindNode(tracker, Vector<const char*>(names, ARRAY_SIZE(names)));
|
| + CHECK_NE(NULL, node);
|
| + CHECK_GE(node->allocation_count(), 100);
|
| + CHECK_GE(node->allocation_size(), 4 * node->allocation_count());
|
| + heap_profiler->StopRecordingHeapAllocations();
|
| +}
|
|
|