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); |