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 dbef127b6e011ca44600a3c78d371aa869a68c36..ab0731e9870c9944c540708c625f6b3d9049571d 100644 |
| --- a/test/cctest/test-heap-profiler.cc |
| +++ b/test/cctest/test-heap-profiler.cc |
| @@ -495,6 +495,63 @@ TEST(HeapSnapshotSymbol) { |
| } |
| +TEST(HeapSnapshotWeakCollection) { |
| + i::FLAG_harmony_collections = true; |
| + |
| + LocalContext env; |
| + v8::HandleScope scope(env->GetIsolate()); |
| + v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); |
| + |
| + CompileRun("k = {}; v = {};\n" |
| + "ws = new WeakSet(); ws.add(k); ws.add(v);\n" |
| + "wm = new WeakMap(); wm.set(k, v);\n"); |
| + const v8::HeapSnapshot* snapshot = |
| + heap_profiler->TakeHeapSnapshot(v8_str("WeakCollections")); |
| + CHECK(ValidateSnapshot(snapshot)); |
| + const v8::HeapGraphNode* global = GetGlobalObject(snapshot); |
| + const v8::HeapGraphNode* k = |
| + GetProperty(global, v8::HeapGraphEdge::kProperty, "k"); |
| + CHECK_NE(NULL, k); |
| + const v8::HeapGraphNode* v = |
| + GetProperty(global, v8::HeapGraphEdge::kProperty, "v"); |
| + CHECK_NE(NULL, v); |
| + |
| + const v8::HeapGraphNode* ws = |
| + GetProperty(global, v8::HeapGraphEdge::kProperty, "ws"); |
| + CHECK_NE(NULL, ws); |
| + CHECK_EQ(v8::HeapGraphNode::kObject, ws->GetType()); |
| + CHECK_EQ(v8_str("WeakSet"), ws->GetName()); |
| + |
| + const v8::HeapGraphNode* ws_table = |
| + GetProperty(ws, v8::HeapGraphEdge::kInternal, "table"); |
| + CHECK_EQ(v8::HeapGraphNode::kArray, ws_table->GetType()); |
| + CHECK_GT(ws_table->GetChildrenCount(), 0); |
| + for (int i = 0, count = ws_table->GetChildrenCount(); i < count; ++i) { |
| + const v8::HeapGraphEdge* prop = ws_table->GetChild(i); |
| + if (prop->GetType() != v8::HeapGraphEdge::kElement) continue; |
|
alph
2014/05/22 15:41:40
kWeak
Also check that you've found exactly one.
yurys
2014/05/22 15:47:33
Done.
|
| + const v8::SnapshotObjectId to_node_id = prop->GetToNode()->GetId(); |
| + CHECK(to_node_id == k->GetId() || to_node_id == v->GetId()); |
| + } |
| + |
| + const v8::HeapGraphNode* wm = |
| + GetProperty(global, v8::HeapGraphEdge::kProperty, "wm"); |
| + CHECK_NE(NULL, wm); |
| + CHECK_EQ(v8::HeapGraphNode::kObject, wm->GetType()); |
| + CHECK_EQ(v8_str("WeakMap"), wm->GetName()); |
| + |
| + const v8::HeapGraphNode* wm_table = |
| + GetProperty(wm, v8::HeapGraphEdge::kInternal, "table"); |
| + CHECK_EQ(v8::HeapGraphNode::kArray, wm_table->GetType()); |
| + CHECK_GT(wm_table->GetChildrenCount(), 0); |
| + for (int i = 0, count = wm_table->GetChildrenCount(); i < count; ++i) { |
| + const v8::HeapGraphEdge* prop = wm_table->GetChild(i); |
| + if (prop->GetType() != v8::HeapGraphEdge::kElement) continue; |
|
alph
2014/05/22 15:41:40
Ditto
yurys
2014/05/22 15:47:33
Done.
|
| + const v8::SnapshotObjectId to_node_id = prop->GetToNode()->GetId(); |
| + CHECK(to_node_id == k->GetId() || to_node_id == v->GetId()); |
| + } |
| +} |
| + |
| + |
| TEST(HeapSnapshotInternalReferences) { |
| v8::Isolate* isolate = CcTest::isolate(); |
| v8::HandleScope scope(isolate); |