OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/profiler/heap-snapshot-generator.h" | 5 #include "src/profiler/heap-snapshot-generator.h" |
6 | 6 |
7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
8 #include "src/conversions.h" | 8 #include "src/conversions.h" |
9 #include "src/debug/debug.h" | 9 #include "src/debug/debug.h" |
10 #include "src/profiler/allocation-tracker.h" | 10 #include "src/profiler/allocation-tracker.h" |
(...skipping 1144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1155 SetInternalReference(js_fun, entry, | 1155 SetInternalReference(js_fun, entry, |
1156 "context", js_fun->context(), | 1156 "context", js_fun->context(), |
1157 JSFunction::kContextOffset); | 1157 JSFunction::kContextOffset); |
1158 SetWeakReference(js_fun, entry, | 1158 SetWeakReference(js_fun, entry, |
1159 "next_function_link", js_fun->next_function_link(), | 1159 "next_function_link", js_fun->next_function_link(), |
1160 JSFunction::kNextFunctionLinkOffset); | 1160 JSFunction::kNextFunctionLinkOffset); |
1161 STATIC_ASSERT(JSFunction::kNextFunctionLinkOffset | 1161 STATIC_ASSERT(JSFunction::kNextFunctionLinkOffset |
1162 == JSFunction::kNonWeakFieldsEndOffset); | 1162 == JSFunction::kNonWeakFieldsEndOffset); |
1163 STATIC_ASSERT(JSFunction::kNextFunctionLinkOffset + kPointerSize | 1163 STATIC_ASSERT(JSFunction::kNextFunctionLinkOffset + kPointerSize |
1164 == JSFunction::kSize); | 1164 == JSFunction::kSize); |
1165 } else if (obj->IsGlobalObject()) { | 1165 } else if (obj->IsJSGlobalObject()) { |
1166 GlobalObject* global_obj = GlobalObject::cast(obj); | 1166 JSGlobalObject* global_obj = JSGlobalObject::cast(obj); |
1167 SetInternalReference(global_obj, entry, | 1167 SetInternalReference(global_obj, entry, "native_context", |
1168 "native_context", global_obj->native_context(), | 1168 global_obj->native_context(), |
1169 GlobalObject::kNativeContextOffset); | 1169 JSGlobalObject::kNativeContextOffset); |
1170 SetInternalReference(global_obj, entry, | 1170 SetInternalReference(global_obj, entry, "global_proxy", |
1171 "global_proxy", global_obj->global_proxy(), | 1171 global_obj->global_proxy(), |
1172 GlobalObject::kGlobalProxyOffset); | 1172 JSGlobalObject::kGlobalProxyOffset); |
1173 STATIC_ASSERT(GlobalObject::kHeaderSize - JSObject::kHeaderSize == | 1173 STATIC_ASSERT(JSGlobalObject::kSize - JSObject::kHeaderSize == |
1174 2 * kPointerSize); | 1174 2 * kPointerSize); |
1175 } else if (obj->IsJSArrayBufferView()) { | 1175 } else if (obj->IsJSArrayBufferView()) { |
1176 JSArrayBufferView* view = JSArrayBufferView::cast(obj); | 1176 JSArrayBufferView* view = JSArrayBufferView::cast(obj); |
1177 SetInternalReference(view, entry, "buffer", view->buffer(), | 1177 SetInternalReference(view, entry, "buffer", view->buffer(), |
1178 JSArrayBufferView::kBufferOffset); | 1178 JSArrayBufferView::kBufferOffset); |
1179 } | 1179 } |
1180 TagObject(js_obj->properties(), "(object properties)"); | 1180 TagObject(js_obj->properties(), "(object properties)"); |
1181 SetInternalReference(obj, entry, | 1181 SetInternalReference(obj, entry, |
1182 "properties", js_obj->properties(), | 1182 "properties", js_obj->properties(), |
1183 JSObject::kPropertiesOffset); | 1183 JSObject::kPropertiesOffset); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1253 Context::index == Context::MAP_CACHE_INDEX) { \ | 1253 Context::index == Context::MAP_CACHE_INDEX) { \ |
1254 SetInternalReference(context, entry, #name, context->get(Context::index), \ | 1254 SetInternalReference(context, entry, #name, context->get(Context::index), \ |
1255 FixedArray::OffsetOfElementAt(Context::index)); \ | 1255 FixedArray::OffsetOfElementAt(Context::index)); \ |
1256 } else { \ | 1256 } else { \ |
1257 SetWeakReference(context, entry, #name, context->get(Context::index), \ | 1257 SetWeakReference(context, entry, #name, context->get(Context::index), \ |
1258 FixedArray::OffsetOfElementAt(Context::index)); \ | 1258 FixedArray::OffsetOfElementAt(Context::index)); \ |
1259 } | 1259 } |
1260 EXTRACT_CONTEXT_FIELD(CLOSURE_INDEX, JSFunction, closure); | 1260 EXTRACT_CONTEXT_FIELD(CLOSURE_INDEX, JSFunction, closure); |
1261 EXTRACT_CONTEXT_FIELD(PREVIOUS_INDEX, Context, previous); | 1261 EXTRACT_CONTEXT_FIELD(PREVIOUS_INDEX, Context, previous); |
1262 EXTRACT_CONTEXT_FIELD(EXTENSION_INDEX, Object, extension); | 1262 EXTRACT_CONTEXT_FIELD(EXTENSION_INDEX, Object, extension); |
1263 EXTRACT_CONTEXT_FIELD(GLOBAL_OBJECT_INDEX, GlobalObject, global); | 1263 EXTRACT_CONTEXT_FIELD(GLOBAL_OBJECT_INDEX, JSGlobalObject, global); |
1264 if (context->IsNativeContext()) { | 1264 if (context->IsNativeContext()) { |
1265 TagObject(context->normalized_map_cache(), "(context norm. map cache)"); | 1265 TagObject(context->normalized_map_cache(), "(context norm. map cache)"); |
1266 TagObject(context->runtime_context(), "(runtime context)"); | 1266 TagObject(context->runtime_context(), "(runtime context)"); |
1267 TagObject(context->embedder_data(), "(context data)"); | 1267 TagObject(context->embedder_data(), "(context data)"); |
1268 NATIVE_CONTEXT_FIELDS(EXTRACT_CONTEXT_FIELD) | 1268 NATIVE_CONTEXT_FIELDS(EXTRACT_CONTEXT_FIELD) |
1269 EXTRACT_CONTEXT_FIELD(OPTIMIZED_FUNCTIONS_LIST, unused, | 1269 EXTRACT_CONTEXT_FIELD(OPTIMIZED_FUNCTIONS_LIST, unused, |
1270 optimized_functions_list); | 1270 optimized_functions_list); |
1271 EXTRACT_CONTEXT_FIELD(OPTIMIZED_CODE_LIST, unused, optimized_code_list); | 1271 EXTRACT_CONTEXT_FIELD(OPTIMIZED_CODE_LIST, unused, optimized_code_list); |
1272 EXTRACT_CONTEXT_FIELD(DEOPTIMIZED_CODE_LIST, unused, deoptimized_code_list); | 1272 EXTRACT_CONTEXT_FIELD(DEOPTIMIZED_CODE_LIST, unused, deoptimized_code_list); |
1273 EXTRACT_CONTEXT_FIELD(NEXT_CONTEXT_LINK, unused, next_context_link); | 1273 EXTRACT_CONTEXT_FIELD(NEXT_CONTEXT_LINK, unused, next_context_link); |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1633 } | 1633 } |
1634 break; | 1634 break; |
1635 } | 1635 } |
1636 case kDescriptor: | 1636 case kDescriptor: |
1637 SetDataOrAccessorPropertyReference(details.kind(), js_obj, entry, | 1637 SetDataOrAccessorPropertyReference(details.kind(), js_obj, entry, |
1638 descs->GetKey(i), | 1638 descs->GetKey(i), |
1639 descs->GetValue(i)); | 1639 descs->GetValue(i)); |
1640 break; | 1640 break; |
1641 } | 1641 } |
1642 } | 1642 } |
1643 } else if (js_obj->IsGlobalObject()) { | 1643 } else if (js_obj->IsJSGlobalObject()) { |
1644 // We assume that global objects can only have slow properties. | 1644 // We assume that global objects can only have slow properties. |
1645 GlobalDictionary* dictionary = js_obj->global_dictionary(); | 1645 GlobalDictionary* dictionary = js_obj->global_dictionary(); |
1646 int length = dictionary->Capacity(); | 1646 int length = dictionary->Capacity(); |
1647 for (int i = 0; i < length; ++i) { | 1647 for (int i = 0; i < length; ++i) { |
1648 Object* k = dictionary->KeyAt(i); | 1648 Object* k = dictionary->KeyAt(i); |
1649 if (dictionary->IsKey(k)) { | 1649 if (dictionary->IsKey(k)) { |
1650 DCHECK(dictionary->ValueAt(i)->IsPropertyCell()); | 1650 DCHECK(dictionary->ValueAt(i)->IsPropertyCell()); |
1651 PropertyCell* cell = PropertyCell::cast(dictionary->ValueAt(i)); | 1651 PropertyCell* cell = PropertyCell::cast(dictionary->ValueAt(i)); |
1652 Object* value = cell->value(); | 1652 Object* value = cell->value(); |
1653 if (k == heap_->hidden_string()) { | 1653 if (k == heap_->hidden_string()) { |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2122 filler_->SetIndexedAutoIndexReference( | 2122 filler_->SetIndexedAutoIndexReference( |
2123 HeapGraphEdge::kElement, | 2123 HeapGraphEdge::kElement, |
2124 snapshot_->gc_subroot(tag)->index(), | 2124 snapshot_->gc_subroot(tag)->index(), |
2125 child_entry); | 2125 child_entry); |
2126 } | 2126 } |
2127 } | 2127 } |
2128 | 2128 |
2129 // Add a shortcut to JS global object reference at snapshot root. | 2129 // Add a shortcut to JS global object reference at snapshot root. |
2130 if (child_obj->IsNativeContext()) { | 2130 if (child_obj->IsNativeContext()) { |
2131 Context* context = Context::cast(child_obj); | 2131 Context* context = Context::cast(child_obj); |
2132 GlobalObject* global = context->global_object(); | 2132 JSGlobalObject* global = context->global_object(); |
2133 if (global->IsJSGlobalObject()) { | 2133 if (global->IsJSGlobalObject()) { |
2134 bool is_debug_object = false; | 2134 bool is_debug_object = false; |
2135 is_debug_object = heap_->isolate()->debug()->IsDebugGlobal(global); | 2135 is_debug_object = heap_->isolate()->debug()->IsDebugGlobal(global); |
2136 if (!is_debug_object && !user_roots_.Contains(global)) { | 2136 if (!is_debug_object && !user_roots_.Contains(global)) { |
2137 user_roots_.Insert(global); | 2137 user_roots_.Insert(global); |
2138 SetUserGlobalReference(global); | 2138 SetUserGlobalReference(global); |
2139 } | 2139 } |
2140 } | 2140 } |
2141 } | 2141 } |
2142 } | 2142 } |
(...skipping 1026 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3169 for (int i = 1; i < sorted_strings.length(); ++i) { | 3169 for (int i = 1; i < sorted_strings.length(); ++i) { |
3170 writer_->AddCharacter(','); | 3170 writer_->AddCharacter(','); |
3171 SerializeString(sorted_strings[i]); | 3171 SerializeString(sorted_strings[i]); |
3172 if (writer_->aborted()) return; | 3172 if (writer_->aborted()) return; |
3173 } | 3173 } |
3174 } | 3174 } |
3175 | 3175 |
3176 | 3176 |
3177 } // namespace internal | 3177 } // namespace internal |
3178 } // namespace v8 | 3178 } // namespace v8 |
OLD | NEW |