Index: src/profiler/heap-snapshot-generator.cc |
diff --git a/src/profiler/heap-snapshot-generator.cc b/src/profiler/heap-snapshot-generator.cc |
index 7b76714d33eedddad4a71ce6f03577de45af0482..7d0e95889a74f5cd866929c91b3741e4a18d3b24 100644 |
--- a/src/profiler/heap-snapshot-generator.cc |
+++ b/src/profiler/heap-snapshot-generator.cc |
@@ -1132,9 +1132,6 @@ void V8HeapExplorer::ExtractJSObjectReferences( |
SetInternalReference(js_fun, entry, |
"context", js_fun->context(), |
JSFunction::kContextOffset); |
- SetWeakReference(js_fun, entry, |
- "next_function_link", js_fun->next_function_link(), |
- JSFunction::kNextFunctionLinkOffset); |
// Ensure no new weak references appeared in JSFunction. |
STATIC_ASSERT(JSFunction::kCodeEntryOffset == |
JSFunction::kNonWeakFieldsEndOffset); |
@@ -1249,7 +1246,6 @@ void V8HeapExplorer::ExtractContextReferences(int entry, Context* context) { |
optimized_functions_list); |
EXTRACT_CONTEXT_FIELD(OPTIMIZED_CODE_LIST, unused, optimized_code_list); |
EXTRACT_CONTEXT_FIELD(DEOPTIMIZED_CODE_LIST, unused, deoptimized_code_list); |
- EXTRACT_CONTEXT_FIELD(NEXT_CONTEXT_LINK, unused, next_context_link); |
#undef EXTRACT_CONTEXT_FIELD |
STATIC_ASSERT(Context::OPTIMIZED_FUNCTIONS_LIST == |
Context::FIRST_WEAK_SLOT); |
@@ -1455,18 +1451,12 @@ void V8HeapExplorer::ExtractCodeReferences(int entry, Code* code) { |
code->source_position_table(), |
Code::kSourcePositionTableOffset); |
if (code->kind() == Code::FUNCTION) { |
- SetInternalReference(code, entry, |
- "type_feedback_info", code->type_feedback_info(), |
+ SetInternalReference(code, entry, "type_feedback_info", |
+ code->type_feedback_info(), |
Code::kTypeFeedbackInfoOffset); |
} |
- SetInternalReference(code, entry, |
- "gc_metadata", code->gc_metadata(), |
+ SetInternalReference(code, entry, "gc_metadata", code->gc_metadata(), |
Code::kGCMetadataOffset); |
- if (code->kind() == Code::OPTIMIZED_FUNCTION) { |
- SetWeakReference(code, entry, |
- "next_code_link", code->next_code_link(), |
- Code::kNextCodeLinkOffset); |
- } |
} |
void V8HeapExplorer::ExtractBoxReferences(int entry, Box* box) { |
@@ -1841,11 +1831,16 @@ bool V8HeapExplorer::IsEssentialHiddenReference(Object* parent, |
if (parent->IsAllocationSite() && |
field_offset == AllocationSite::kWeakNextOffset) |
return false; |
+ if (parent->IsJSFunction() && |
+ field_offset == JSFunction::kNextFunctionLinkOffset) |
+ return false; |
+ if (parent->IsCode() && field_offset == Code::kNextCodeLinkOffset) |
+ return false; |
+ if (parent->IsContext() && |
+ field_offset == Context::OffsetOfElementAt(Context::NEXT_CONTEXT_LINK)) |
+ return false; |
if (parent->IsWeakCell() && field_offset == WeakCell::kNextOffset) |
return false; |
- // TODO(ulan): JSFunction, Code, and Context also have next weak link, which |
- // is non-essential. Currently they are handled as normal weak links. |
- // Move them here. |
return true; |
} |
@@ -1944,11 +1939,9 @@ void V8HeapExplorer::SetHiddenReference(HeapObject* parent_obj, |
Object* child_obj, int field_offset) { |
DCHECK(parent_entry == GetEntry(parent_obj)->index()); |
HeapEntry* child_entry = GetEntry(child_obj); |
- if (child_entry != NULL && IsEssentialObject(child_obj) && |
+ if (child_entry != nullptr && IsEssentialObject(child_obj) && |
IsEssentialHiddenReference(parent_obj, field_offset)) { |
- filler_->SetIndexedReference(HeapGraphEdge::kHidden, |
- parent_entry, |
- index, |
+ filler_->SetIndexedReference(HeapGraphEdge::kHidden, parent_entry, index, |
child_entry); |
} |
} |