| 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);
|
| + }
|
| }
|
| }
|
| }
|
|
|