Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: src/profile-generator.cc

Issue 10162005: Eliminate internal and hidden links to oddballs and other non-essential objects in heap snapshot. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressing comments. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/profile-generator.h ('k') | test/cctest/test-heap-profiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/profile-generator.cc
diff --git a/src/profile-generator.cc b/src/profile-generator.cc
index 256136d9f19923d08f145e5091d463714b6fd83c..797d2d0d00227ff36b36e66eccedf00d4181dc55 100644
--- a/src/profile-generator.cc
+++ b/src/profile-generator.cc
@@ -2461,6 +2461,20 @@ void V8HeapExplorer::SetObjectName(HeapObject* object) {
}
+bool V8HeapExplorer::IsEssentialObject(Object* object) {
+ // We have to use raw_unchecked_* versions because checked versions
+ // would fail during iteration over object properties.
+ return object->IsHeapObject()
+ && !object->IsOddball()
+ && object != heap_->raw_unchecked_empty_byte_array()
+ && object != heap_->raw_unchecked_empty_fixed_array()
+ && object != heap_->raw_unchecked_empty_descriptor_array()
+ && object != heap_->raw_unchecked_fixed_array_map()
+ && object != heap_->raw_unchecked_global_property_cell_map()
+ && object != heap_->raw_unchecked_shared_function_info_map();
+}
+
+
void V8HeapExplorer::SetClosureReference(HeapObject* parent_obj,
HeapEntry* parent_entry,
String* reference_name,
@@ -2516,10 +2530,7 @@ void V8HeapExplorer::SetInternalReference(HeapObject* parent_obj,
int field_offset) {
HeapEntry* child_entry = GetEntry(child_obj);
if (child_entry == NULL) return;
- // We have to use raw_unchecked_* version because when the
- // empty_fixed_array itself is being processed all its inline properties
- // are invalid and the check in empty_fixed_array() function fails.
- if (child_obj != heap_->raw_unchecked_empty_fixed_array()) {
+ if (IsEssentialObject(child_obj)) {
filler_->SetNamedReference(HeapGraphEdge::kInternal,
parent_obj, parent_entry,
reference_name,
@@ -2536,8 +2547,7 @@ void V8HeapExplorer::SetInternalReference(HeapObject* parent_obj,
int field_offset) {
HeapEntry* child_entry = GetEntry(child_obj);
if (child_entry == NULL) return;
- // See the comment regarding raw_unchecked_* above.
- if (child_obj != heap_->raw_unchecked_empty_fixed_array()) {
+ if (IsEssentialObject(child_obj)) {
filler_->SetNamedReference(HeapGraphEdge::kInternal,
parent_obj, parent_entry,
collection_->names()->GetName(index),
@@ -2552,7 +2562,7 @@ void V8HeapExplorer::SetHiddenReference(HeapObject* parent_obj,
int index,
Object* child_obj) {
HeapEntry* child_entry = GetEntry(child_obj);
- if (child_entry != NULL) {
+ if (child_entry != NULL && IsEssentialObject(child_obj)) {
filler_->SetIndexedReference(HeapGraphEdge::kHidden,
parent_obj,
parent_entry,
@@ -2692,11 +2702,7 @@ const char* V8HeapExplorer::GetStrongGcSubrootName(Object* object) {
void V8HeapExplorer::TagObject(Object* obj, const char* tag) {
- if (obj->IsHeapObject() &&
- !obj->IsOddball() &&
- obj != heap_->raw_unchecked_empty_byte_array() &&
- obj != heap_->raw_unchecked_empty_fixed_array() &&
- obj != heap_->raw_unchecked_empty_descriptor_array()) {
+ if (IsEssentialObject(obj)) {
objects_tags_.SetTag(obj, tag);
}
}
« no previous file with comments | « src/profile-generator.h ('k') | test/cctest/test-heap-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698