| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 bool has_A2; | 89 bool has_A2; |
| 90 bool has_B2; | 90 bool has_B2; |
| 91 bool has_C2; | 91 bool has_C2; |
| 92 }; | 92 }; |
| 93 | 93 |
| 94 } // namespace | 94 } // namespace |
| 95 | 95 |
| 96 | 96 |
| 97 static const v8::HeapGraphNode* GetGlobalObject( | 97 static const v8::HeapGraphNode* GetGlobalObject( |
| 98 const v8::HeapSnapshot* snapshot) { | 98 const v8::HeapSnapshot* snapshot) { |
| 99 CHECK_EQ(3, snapshot->GetRoot()->GetChildrenCount()); | 99 CHECK_EQ(2, snapshot->GetRoot()->GetChildrenCount()); |
| 100 // The 0th-child is (GC Roots), 1st is code stubs context, 2nd is the user | 100 // The 0th-child is (GC Roots), 1st is the user root. |
| 101 // root. | |
| 102 const v8::HeapGraphNode* global_obj = | 101 const v8::HeapGraphNode* global_obj = |
| 103 snapshot->GetRoot()->GetChild(2)->GetToNode(); | 102 snapshot->GetRoot()->GetChild(1)->GetToNode(); |
| 104 CHECK_EQ(0, strncmp("Object", const_cast<i::HeapEntry*>( | 103 CHECK_EQ(0, strncmp("Object", const_cast<i::HeapEntry*>( |
| 105 reinterpret_cast<const i::HeapEntry*>(global_obj))->name(), 6)); | 104 reinterpret_cast<const i::HeapEntry*>(global_obj))->name(), 6)); |
| 106 return global_obj; | 105 return global_obj; |
| 107 } | 106 } |
| 108 | 107 |
| 109 | 108 |
| 110 static const v8::HeapGraphNode* GetProperty(const v8::HeapGraphNode* node, | 109 static const v8::HeapGraphNode* GetProperty(const v8::HeapGraphNode* node, |
| 111 v8::HeapGraphEdge::Type type, | 110 v8::HeapGraphEdge::Type type, |
| 112 const char* name) { | 111 const char* name) { |
| 113 for (int i = 0, count = node->GetChildrenCount(); i < count; ++i) { | 112 for (int i = 0, count = node->GetChildrenCount(); i < count; ++i) { |
| (...skipping 872 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 986 int string_index = static_cast<int>( | 985 int string_index = static_cast<int>( |
| 987 nodes_array->Get(string_obj_pos + 1)->ToNumber(isolate)->Value()); | 986 nodes_array->Get(string_obj_pos + 1)->ToNumber(isolate)->Value()); |
| 988 CHECK_GT(string_index, 0); | 987 CHECK_GT(string_index, 0); |
| 989 v8::Local<v8::Object> strings_array = | 988 v8::Local<v8::Object> strings_array = |
| 990 parsed_snapshot->Get(v8_str("strings"))->ToObject(isolate); | 989 parsed_snapshot->Get(v8_str("strings"))->ToObject(isolate); |
| 991 v8::Local<v8::String> string = | 990 v8::Local<v8::String> string = |
| 992 strings_array->Get(string_index)->ToString(isolate); | 991 strings_array->Get(string_index)->ToString(isolate); |
| 993 v8::Local<v8::String> ref_string = | 992 v8::Local<v8::String> ref_string = |
| 994 CompileRun(STRING_LITERAL_FOR_TEST)->ToString(isolate); | 993 CompileRun(STRING_LITERAL_FOR_TEST)->ToString(isolate); |
| 995 #undef STRING_LITERAL_FOR_TEST | 994 #undef STRING_LITERAL_FOR_TEST |
| 996 CHECK_LT(0, strcmp(*v8::String::Utf8Value(ref_string), | 995 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(ref_string), |
| 997 *v8::String::Utf8Value(string))); | 996 *v8::String::Utf8Value(string))); |
| 998 } | 997 } |
| 999 | 998 |
| 1000 | 999 |
| 1001 TEST(HeapSnapshotJSONSerializationAborting) { | 1000 TEST(HeapSnapshotJSONSerializationAborting) { |
| 1002 LocalContext env; | 1001 LocalContext env; |
| 1003 v8::HandleScope scope(env->GetIsolate()); | 1002 v8::HandleScope scope(env->GetIsolate()); |
| 1004 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); | 1003 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); |
| 1005 const v8::HeapSnapshot* snapshot = heap_profiler->TakeHeapSnapshot(); | 1004 const v8::HeapSnapshot* snapshot = heap_profiler->TakeHeapSnapshot(); |
| 1006 CHECK(ValidateSnapshot(snapshot)); | 1005 CHECK(ValidateSnapshot(snapshot)); |
| (...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2114 LocalContext env; | 2113 LocalContext env; |
| 2115 v8::HandleScope scope(env->GetIsolate()); | 2114 v8::HandleScope scope(env->GetIsolate()); |
| 2116 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); | 2115 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); |
| 2117 | 2116 |
| 2118 CHECK(CcTest::i_isolate()->debug()->Load()); | 2117 CHECK(CcTest::i_isolate()->debug()->Load()); |
| 2119 CompileRun("foo = {};"); | 2118 CompileRun("foo = {};"); |
| 2120 const v8::HeapSnapshot* snapshot = heap_profiler->TakeHeapSnapshot(); | 2119 const v8::HeapSnapshot* snapshot = heap_profiler->TakeHeapSnapshot(); |
| 2121 CHECK(ValidateSnapshot(snapshot)); | 2120 CHECK(ValidateSnapshot(snapshot)); |
| 2122 const v8::HeapGraphNode* root = snapshot->GetRoot(); | 2121 const v8::HeapGraphNode* root = snapshot->GetRoot(); |
| 2123 int globals_count = 0; | 2122 int globals_count = 0; |
| 2124 bool found = false; | |
| 2125 for (int i = 0; i < root->GetChildrenCount(); ++i) { | 2123 for (int i = 0; i < root->GetChildrenCount(); ++i) { |
| 2126 const v8::HeapGraphEdge* edge = root->GetChild(i); | 2124 const v8::HeapGraphEdge* edge = root->GetChild(i); |
| 2127 if (edge->GetType() == v8::HeapGraphEdge::kShortcut) { | 2125 if (edge->GetType() == v8::HeapGraphEdge::kShortcut) { |
| 2128 ++globals_count; | 2126 ++globals_count; |
| 2129 const v8::HeapGraphNode* global = edge->GetToNode(); | 2127 const v8::HeapGraphNode* global = edge->GetToNode(); |
| 2130 const v8::HeapGraphNode* foo = | 2128 const v8::HeapGraphNode* foo = |
| 2131 GetProperty(global, v8::HeapGraphEdge::kProperty, "foo"); | 2129 GetProperty(global, v8::HeapGraphEdge::kProperty, "foo"); |
| 2132 if (foo != nullptr) { | 2130 CHECK(foo); |
| 2133 found = true; | |
| 2134 } | |
| 2135 } | 2131 } |
| 2136 } | 2132 } |
| 2137 CHECK_EQ(2, globals_count); | 2133 CHECK_EQ(1, globals_count); |
| 2138 CHECK(found); | |
| 2139 } | 2134 } |
| 2140 | 2135 |
| 2141 | 2136 |
| 2142 TEST(AllStrongGcRootsHaveNames) { | 2137 TEST(AllStrongGcRootsHaveNames) { |
| 2143 LocalContext env; | 2138 LocalContext env; |
| 2144 v8::HandleScope scope(env->GetIsolate()); | 2139 v8::HandleScope scope(env->GetIsolate()); |
| 2145 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); | 2140 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); |
| 2146 | 2141 |
| 2147 CompileRun("foo = {};"); | 2142 CompileRun("foo = {};"); |
| 2148 const v8::HeapSnapshot* snapshot = heap_profiler->TakeHeapSnapshot(); | 2143 const v8::HeapSnapshot* snapshot = heap_profiler->TakeHeapSnapshot(); |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2800 map.AddRange(ToAddress(0x180), 0x80, 6U); | 2795 map.AddRange(ToAddress(0x180), 0x80, 6U); |
| 2801 map.AddRange(ToAddress(0x180), 0x80, 7U); | 2796 map.AddRange(ToAddress(0x180), 0x80, 7U); |
| 2802 CHECK_EQ(7u, map.GetTraceNodeId(ToAddress(0x180))); | 2797 CHECK_EQ(7u, map.GetTraceNodeId(ToAddress(0x180))); |
| 2803 CHECK_EQ(5u, map.GetTraceNodeId(ToAddress(0x200))); | 2798 CHECK_EQ(5u, map.GetTraceNodeId(ToAddress(0x200))); |
| 2804 CHECK_EQ(3u, map.size()); | 2799 CHECK_EQ(3u, map.size()); |
| 2805 | 2800 |
| 2806 map.Clear(); | 2801 map.Clear(); |
| 2807 CHECK_EQ(0u, map.size()); | 2802 CHECK_EQ(0u, map.size()); |
| 2808 CHECK_EQ(0u, map.GetTraceNodeId(ToAddress(0x400))); | 2803 CHECK_EQ(0u, map.GetTraceNodeId(ToAddress(0x400))); |
| 2809 } | 2804 } |
| OLD | NEW |