Revision: 11389
Author:   [email protected]
Date:     Thu Apr 19 05:16:37 2012
Log: Hide internal references pointing to the empty array in heap profiler.

Review URL: https://chromiumcodereview.appspot.com/10021052
http://code.google.com/p/v8/source/detail?r=11389

Modified:
 /branches/bleeding_edge/src/profile-generator.cc

=======================================
--- /branches/bleeding_edge/src/profile-generator.cc Wed Apr 18 10:02:57 2012 +++ /branches/bleeding_edge/src/profile-generator.cc Thu Apr 19 05:16:37 2012
@@ -2515,15 +2515,17 @@
                                           Object* child_obj,
                                           int field_offset) {
   HeapEntry* child_entry = GetEntry(child_obj);
-  if (child_entry != NULL) {
+  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()) {
     filler_->SetNamedReference(HeapGraphEdge::kInternal,
-                               parent_obj,
-                               parent_entry,
+                               parent_obj, parent_entry,
                                reference_name,
-                               child_obj,
-                               child_entry);
-    IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
-  }
+                               child_obj, child_entry);
+  }
+  IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
 }


@@ -2533,15 +2535,15 @@
                                           Object* child_obj,
                                           int field_offset) {
   HeapEntry* child_entry = GetEntry(child_obj);
-  if (child_entry != NULL) {
+  if (child_entry == NULL) return;
+  // See the comment regarding raw_unchecked_* above.
+  if (child_obj != heap_->raw_unchecked_empty_fixed_array()) {
     filler_->SetNamedReference(HeapGraphEdge::kInternal,
-                               parent_obj,
-                               parent_entry,
+                               parent_obj, parent_entry,
                                collection_->names()->GetName(index),
-                               child_obj,
-                               child_entry);
-    IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
-  }
+                               child_obj, child_entry);
+  }
+  IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
 }


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to