| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Tests for heap profiler | 3 // Tests for heap profiler |
| 4 | 4 |
| 5 #include <ctype.h> | 5 #include <ctype.h> |
| 6 | 6 |
| 7 #include "v8.h" | 7 #include "v8.h" |
| 8 | 8 |
| 9 #include "cctest.h" | 9 #include "cctest.h" |
| 10 #include "hashmap.h" | 10 #include "hashmap.h" |
| (...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1471 const v8::HeapGraphNode* gc_roots = GetNode( | 1471 const v8::HeapGraphNode* gc_roots = GetNode( |
| 1472 snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(GC roots)"); | 1472 snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(GC roots)"); |
| 1473 CHECK_NE(NULL, gc_roots); | 1473 CHECK_NE(NULL, gc_roots); |
| 1474 const v8::HeapGraphNode* global_handles = GetNode( | 1474 const v8::HeapGraphNode* global_handles = GetNode( |
| 1475 gc_roots, v8::HeapGraphNode::kObject, "(Global handles)"); | 1475 gc_roots, v8::HeapGraphNode::kObject, "(Global handles)"); |
| 1476 CHECK_NE(NULL, global_handles); | 1476 CHECK_NE(NULL, global_handles); |
| 1477 return HasWeakEdge(global_handles); | 1477 return HasWeakEdge(global_handles); |
| 1478 } | 1478 } |
| 1479 | 1479 |
| 1480 | 1480 |
| 1481 static void PersistentHandleCallback(v8::Persistent<v8::Value> handle, void*) { | 1481 static void PersistentHandleCallback(v8::Isolate* isolate, |
| 1482 handle.Dispose(); | 1482 v8::Persistent<v8::Value> handle, |
| 1483 void*) { |
| 1484 handle.Dispose(isolate); |
| 1483 } | 1485 } |
| 1484 | 1486 |
| 1485 | 1487 |
| 1486 TEST(WeakGlobalHandle) { | 1488 TEST(WeakGlobalHandle) { |
| 1487 v8::HandleScope scope; | 1489 v8::HandleScope scope; |
| 1488 LocalContext env; | 1490 LocalContext env; |
| 1489 | 1491 |
| 1490 CHECK(!HasWeakGlobalHandle()); | 1492 CHECK(!HasWeakGlobalHandle()); |
| 1491 | 1493 |
| 1492 v8::Persistent<v8::Object> handle = | 1494 v8::Persistent<v8::Object> handle = |
| 1493 v8::Persistent<v8::Object>::New(v8::Object::New()); | 1495 v8::Persistent<v8::Object>::New(v8::Object::New()); |
| 1494 handle.MakeWeak(NULL, PersistentHandleCallback); | 1496 handle.MakeWeak(env->GetIsolate(), NULL, PersistentHandleCallback); |
| 1495 | 1497 |
| 1496 CHECK(HasWeakGlobalHandle()); | 1498 CHECK(HasWeakGlobalHandle()); |
| 1497 } | 1499 } |
| 1498 | 1500 |
| 1499 | 1501 |
| 1500 TEST(WeakNativeContextRefs) { | 1502 TEST(WeakNativeContextRefs) { |
| 1501 v8::HandleScope scope; | 1503 v8::HandleScope scope; |
| 1502 LocalContext env; | 1504 LocalContext env; |
| 1503 | 1505 |
| 1504 const v8::HeapSnapshot* snapshot = | 1506 const v8::HeapSnapshot* snapshot = |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1577 v8::Persistent<v8::String> p_BBB = | 1579 v8::Persistent<v8::String> p_BBB = |
| 1578 v8::Persistent<v8::String>::New(v8_str("BBB")); | 1580 v8::Persistent<v8::String>::New(v8_str("BBB")); |
| 1579 CHECK_EQ(global_handle_count + 2, | 1581 CHECK_EQ(global_handle_count + 2, |
| 1580 v8::HeapProfiler::GetPersistentHandleCount()); | 1582 v8::HeapProfiler::GetPersistentHandleCount()); |
| 1581 v8::Persistent<v8::String> p_CCC = | 1583 v8::Persistent<v8::String> p_CCC = |
| 1582 v8::Persistent<v8::String>::New(v8_str("CCC")); | 1584 v8::Persistent<v8::String>::New(v8_str("CCC")); |
| 1583 CHECK_EQ(global_handle_count + 3, | 1585 CHECK_EQ(global_handle_count + 3, |
| 1584 v8::HeapProfiler::GetPersistentHandleCount()); | 1586 v8::HeapProfiler::GetPersistentHandleCount()); |
| 1585 | 1587 |
| 1586 // Dipose the persistent handles in a different order. | 1588 // Dipose the persistent handles in a different order. |
| 1587 p_AAA.Dispose(); | 1589 p_AAA.Dispose(env->GetIsolate()); |
| 1588 CHECK_EQ(global_handle_count + 2, | 1590 CHECK_EQ(global_handle_count + 2, |
| 1589 v8::HeapProfiler::GetPersistentHandleCount()); | 1591 v8::HeapProfiler::GetPersistentHandleCount()); |
| 1590 p_CCC.Dispose(); | 1592 p_CCC.Dispose(env->GetIsolate()); |
| 1591 CHECK_EQ(global_handle_count + 1, | 1593 CHECK_EQ(global_handle_count + 1, |
| 1592 v8::HeapProfiler::GetPersistentHandleCount()); | 1594 v8::HeapProfiler::GetPersistentHandleCount()); |
| 1593 p_BBB.Dispose(); | 1595 p_BBB.Dispose(env->GetIsolate()); |
| 1594 CHECK_EQ(global_handle_count, v8::HeapProfiler::GetPersistentHandleCount()); | 1596 CHECK_EQ(global_handle_count, v8::HeapProfiler::GetPersistentHandleCount()); |
| 1595 } | 1597 } |
| 1596 | 1598 |
| 1597 | 1599 |
| 1598 TEST(AllStrongGcRootsHaveNames) { | 1600 TEST(AllStrongGcRootsHaveNames) { |
| 1599 v8::HandleScope scope; | 1601 v8::HandleScope scope; |
| 1600 LocalContext env; | 1602 LocalContext env; |
| 1601 | 1603 |
| 1602 CompileRun("foo = {};"); | 1604 CompileRun("foo = {};"); |
| 1603 const v8::HeapSnapshot* snapshot = | 1605 const v8::HeapSnapshot* snapshot = |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1650 const v8::HeapGraphNode* map = | 1652 const v8::HeapGraphNode* map = |
| 1651 GetProperty(global_object, v8::HeapGraphEdge::kInternal, "map"); | 1653 GetProperty(global_object, v8::HeapGraphEdge::kInternal, "map"); |
| 1652 CHECK_NE(NULL, map); | 1654 CHECK_NE(NULL, map); |
| 1653 const v8::HeapGraphNode* own_descriptors = GetProperty( | 1655 const v8::HeapGraphNode* own_descriptors = GetProperty( |
| 1654 map, v8::HeapGraphEdge::kInternal, "descriptors"); | 1656 map, v8::HeapGraphEdge::kInternal, "descriptors"); |
| 1655 CHECK_NE(NULL, own_descriptors); | 1657 CHECK_NE(NULL, own_descriptors); |
| 1656 const v8::HeapGraphNode* own_transitions = GetProperty( | 1658 const v8::HeapGraphNode* own_transitions = GetProperty( |
| 1657 map, v8::HeapGraphEdge::kInternal, "transitions"); | 1659 map, v8::HeapGraphEdge::kInternal, "transitions"); |
| 1658 CHECK_EQ(NULL, own_transitions); | 1660 CHECK_EQ(NULL, own_transitions); |
| 1659 } | 1661 } |
| OLD | NEW |