| Index: test/cctest/test-heap-profiler.cc
|
| diff --git a/test/cctest/test-heap-profiler.cc b/test/cctest/test-heap-profiler.cc
|
| index 7a227cdf9b273acc8b026eccabc337dae7062230..a56f250c2ad2a09619982611f43fb33215b59a20 100644
|
| --- a/test/cctest/test-heap-profiler.cc
|
| +++ b/test/cctest/test-heap-profiler.cc
|
| @@ -352,6 +352,59 @@ TEST(HeapSnapshotInternalReferences) {
|
| #define CHECK_NE_UINT64_T(a, b) \
|
| CHECK((a) != (b)) // NOLINT
|
|
|
| +TEST(HeapEntryIdsAndArrayShift) {
|
| + v8::HandleScope scope;
|
| + LocalContext env;
|
| +
|
| + CompileRun(
|
| + "function AnObject() {\n"
|
| + " this.first = 'first';\n"
|
| + " this.second = 'second';\n"
|
| + "}\n"
|
| + "var a = new Array();\n"
|
| + "for (var i = 0; i < 10; ++i)\n"
|
| + " a.push(new AnObject());\n");
|
| + const v8::HeapSnapshot* snapshot1 =
|
| + v8::HeapProfiler::TakeSnapshot(v8_str("s1"));
|
| +
|
| + CompileRun(
|
| + "for (var i = 0; i < 1; ++i)\n"
|
| + " a.shift();\n");
|
| +
|
| + HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
|
| +
|
| + const v8::HeapSnapshot* snapshot2 =
|
| + v8::HeapProfiler::TakeSnapshot(v8_str("s2"));
|
| +
|
| + const v8::HeapGraphNode* global1 = GetGlobalObject(snapshot1);
|
| + const v8::HeapGraphNode* global2 = GetGlobalObject(snapshot2);
|
| + CHECK_NE_UINT64_T(0, global1->GetId());
|
| + CHECK_EQ_UINT64_T(global1->GetId(), global2->GetId());
|
| +
|
| + const v8::HeapGraphNode* a1 =
|
| + GetProperty(global1, v8::HeapGraphEdge::kProperty, "a");
|
| + CHECK_NE(NULL, a1);
|
| + const v8::HeapGraphNode* e1 =
|
| + GetProperty(a1, v8::HeapGraphEdge::kHidden, "1");
|
| + CHECK_NE(NULL, e1);
|
| + const v8::HeapGraphNode* k1 =
|
| + GetProperty(e1, v8::HeapGraphEdge::kInternal, "elements");
|
| + CHECK_NE(NULL, k1);
|
| + const v8::HeapGraphNode* a2 =
|
| + GetProperty(global2, v8::HeapGraphEdge::kProperty, "a");
|
| + CHECK_NE(NULL, a2);
|
| + const v8::HeapGraphNode* e2 =
|
| + GetProperty(a2, v8::HeapGraphEdge::kHidden, "1");
|
| + CHECK_NE(NULL, e2);
|
| + const v8::HeapGraphNode* k2 =
|
| + GetProperty(e2, v8::HeapGraphEdge::kInternal, "elements");
|
| + CHECK_NE(NULL, k2);
|
| +
|
| + CHECK_EQ_UINT64_T(a1->GetId(), a2->GetId());
|
| + CHECK_EQ_UINT64_T(e1->GetId(), e2->GetId());
|
| + CHECK_EQ_UINT64_T(k1->GetId(), k2->GetId());
|
| +}
|
| +
|
| TEST(HeapEntryIdsAndGC) {
|
| v8::HandleScope scope;
|
| LocalContext env;
|
|
|