| Index: src/spaces.cc
|
| diff --git a/src/spaces.cc b/src/spaces.cc
|
| index 2f3e41aea49686ff2522d7682000ce0009bfd196..239c9cd6c9a95b479981df24069f4cbd38ee3811 100644
|
| --- a/src/spaces.cc
|
| +++ b/src/spaces.cc
|
| @@ -1898,6 +1898,18 @@ MaybeObject* OldSpaceFreeList::Allocate(int size_in_bytes, int* wasted_bytes) {
|
| }
|
|
|
|
|
| +void OldSpaceFreeList::MarkNodes() {
|
| + for (int i = 0; i < kFreeListsLength; i++) {
|
| + Address cur_addr = free_[i].head_node_;
|
| + while (cur_addr != NULL) {
|
| + FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr);
|
| + cur_addr = cur_node->next();
|
| + cur_node->SetMark();
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| #ifdef DEBUG
|
| bool OldSpaceFreeList::Contains(FreeListNode* node) {
|
| for (int i = 0; i < kFreeListsLength; i++) {
|
| @@ -1957,6 +1969,16 @@ MaybeObject* FixedSizeFreeList::Allocate() {
|
| }
|
|
|
|
|
| +void FixedSizeFreeList::MarkNodes() {
|
| + Address cur_addr = head_;
|
| + while (cur_addr != NULL && cur_addr != tail_) {
|
| + FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr);
|
| + cur_addr = cur_node->next();
|
| + cur_node->SetMark();
|
| + }
|
| +}
|
| +
|
| +
|
| // -----------------------------------------------------------------------------
|
| // OldSpace implementation
|
|
|
| @@ -2711,13 +2733,15 @@ LargeObjectSpace::LargeObjectSpace(AllocationSpace id)
|
| : Space(id, NOT_EXECUTABLE), // Managed on a per-allocation basis
|
| first_chunk_(NULL),
|
| size_(0),
|
| - page_count_(0) {}
|
| + page_count_(0),
|
| + objects_size_(0) {}
|
|
|
|
|
| bool LargeObjectSpace::Setup() {
|
| first_chunk_ = NULL;
|
| size_ = 0;
|
| page_count_ = 0;
|
| + objects_size_ = 0;
|
| return true;
|
| }
|
|
|
| @@ -2740,6 +2764,7 @@ void LargeObjectSpace::TearDown() {
|
|
|
| size_ = 0;
|
| page_count_ = 0;
|
| + objects_size_ = 0;
|
| }
|
|
|
|
|
| @@ -2786,6 +2811,7 @@ MaybeObject* LargeObjectSpace::AllocateRawInternal(int requested_size,
|
| }
|
|
|
| size_ += static_cast<int>(chunk_size);
|
| + objects_size_ += requested_size;
|
| page_count_++;
|
| chunk->set_next(first_chunk_);
|
| chunk->set_size(chunk_size);
|
| @@ -2948,6 +2974,7 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
|
| // Free the chunk.
|
| MarkCompactCollector::ReportDeleteIfNeeded(object);
|
| size_ -= static_cast<int>(chunk_size);
|
| + objects_size_ -= object->Size();
|
| page_count_--;
|
| ObjectSpace space = kObjectSpaceLoSpace;
|
| if (executable == EXECUTABLE) space = kObjectSpaceCodeSpace;
|
| @@ -3052,7 +3079,8 @@ void LargeObjectSpace::ReportStatistics() {
|
| CollectHistogramInfo(obj);
|
| }
|
|
|
| - PrintF(" number of objects %d\n", num_objects);
|
| + PrintF(" number of objects %d, "
|
| + "size of objects %" V8_PTR_PREFIX "d\n", num_objects, objects_size_);
|
| if (num_objects > 0) ReportHistogram(false);
|
| }
|
|
|
|
|