Index: src/spaces.cc |
=================================================================== |
--- src/spaces.cc (revision 2034) |
+++ src/spaces.cc (working copy) |
@@ -2422,6 +2422,13 @@ |
void LargeObjectSpace::IterateRSet(ObjectSlotCallback copy_object_func) { |
ASSERT(Page::is_rset_in_use()); |
+ static void* lo_rset_histogram = StatsTable::CreateHistogram( |
+ "V8.RSet_LO", |
+ 0, |
+ // Keeping this histogram's buckets the same as the paged space histogram. |
+ Page::kObjectAreaSize / kPointerSize, |
+ 30); |
+ |
LargeObjectIterator it(this); |
while (it.has_next()) { |
// We only have code, sequential strings, or fixed arrays in large |
@@ -2432,16 +2439,19 @@ |
// Iterate the normal page remembered set range. |
Page* page = Page::FromAddress(object->address()); |
Address object_end = object->address() + object->Size(); |
- Heap::IterateRSetRange(page->ObjectAreaStart(), |
- Min(page->ObjectAreaEnd(), object_end), |
- page->RSetStart(), |
- copy_object_func); |
+ int count = Heap::IterateRSetRange(page->ObjectAreaStart(), |
+ Min(page->ObjectAreaEnd(), object_end), |
+ page->RSetStart(), |
+ copy_object_func); |
// Iterate the extra array elements. |
if (object_end > page->ObjectAreaEnd()) { |
- Heap::IterateRSetRange(page->ObjectAreaEnd(), object_end, |
- object_end, copy_object_func); |
+ count += Heap::IterateRSetRange(page->ObjectAreaEnd(), object_end, |
+ object_end, copy_object_func); |
} |
+ if (lo_rset_histogram != NULL) { |
+ StatsTable::AddHistogramSample(lo_rset_histogram, count); |
+ } |
} |
} |
} |