Chromium Code Reviews| Index: test/cctest/test-heap-profiler.cc | 
| diff --git a/test/cctest/test-heap-profiler.cc b/test/cctest/test-heap-profiler.cc | 
| index 436f2559bb7fad15f5e6708d51021534567b25c8..5c102e0c52bc290fba38004da13a7c18e036e9eb 100644 | 
| --- a/test/cctest/test-heap-profiler.cc | 
| +++ b/test/cctest/test-heap-profiler.cc | 
| @@ -2388,6 +2388,51 @@ TEST(ArrayBufferAndArrayBufferView) { | 
| } | 
| +static int GetRetainersCount(const v8::HeapSnapshot* snapshot, | 
| + const v8::HeapGraphNode* node) { | 
| + int count = 0; | 
| + for (int i = 0, l = snapshot->GetNodesCount(); i < l; ++i) { | 
| + const v8::HeapGraphNode* parent = snapshot->GetNode(i); | 
| + for (int j = 0, l2 = parent->GetChildrenCount(); j < l2; ++j) { | 
| + if (parent->GetChild(j)->GetToNode() == node) { | 
| + ++count; | 
| + } | 
| + } | 
| + } | 
| + return count; | 
| +} | 
| + | 
| + | 
| +TEST(ArrayBufferSharedBackingStore) { | 
| 
 
Dmitry Lomov (no reviews)
2014/02/17 15:26:36
I'd prefer a test that allocates ArrayBuffers with
 
 | 
| + LocalContext env; | 
| + v8::HandleScope scope(env->GetIsolate()); | 
| + v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); | 
| + CompileRun("sin1 = Math.sin(1);"); | 
| + LocalContext env2; | 
| + CompileRun("sin2 = Math.sin(2);"); | 
| + const v8::HeapSnapshot* snapshot = | 
| + heap_profiler->TakeHeapSnapshot(v8_str("snapshot")); | 
| + CHECK(ValidateSnapshot(snapshot)); | 
| + // The 0th-child is (GC Roots), 1st is the user root. | 
| + const v8::HeapGraphNode* global = | 
| + snapshot->GetRoot()->GetChild(1)->GetToNode(); | 
| + const v8::HeapGraphNode* builtins = | 
| + GetProperty(global, v8::HeapGraphEdge::kInternal, "builtins"); | 
| + CHECK_NE(NULL, builtins); | 
| + const v8::HeapGraphNode* sin_table = | 
| + GetProperty(builtins, v8::HeapGraphEdge::kProperty, "kSinTable"); | 
| + CHECK_NE(NULL, sin_table); | 
| + const v8::HeapGraphNode* buffer = | 
| + GetProperty(sin_table, v8::HeapGraphEdge::kInternal, "buffer"); | 
| + CHECK_NE(NULL, buffer); | 
| + const v8::HeapGraphNode* backing_store = | 
| + GetProperty(buffer, v8::HeapGraphEdge::kInternal, "backing_store"); | 
| + CHECK_NE(NULL, backing_store); | 
| + int retainers = GetRetainersCount(snapshot, backing_store); | 
| + CHECK_EQ(2, retainers); | 
| +} | 
| + | 
| + | 
| TEST(BoxObject) { | 
| v8::Isolate* isolate = CcTest::isolate(); | 
| v8::HandleScope scope(isolate); |