Chromium Code Reviews| Index: src/spaces.cc |
| =================================================================== |
| --- src/spaces.cc (revision 6183) |
| +++ src/spaces.cc (working copy) |
| @@ -1582,6 +1582,41 @@ |
| } |
| return false; |
| } |
| + |
| + |
| +void OldSpaceFreeList::Zap() { |
| + 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); |
| + if (cur_node->IsByteArray()) { |
| + ByteArray* ba = ByteArray::cast(cur_node); |
| + Address payload_start = ba->GetDataStartAddress(); |
|
Vyacheslav Egorov (Chromium)
2011/01/21 18:18:18
This way you zap the next field of the cur_node!
Erik Corry
2011/01/24 13:56:00
Good catch. Done.
|
| + Address payload_end = ba->address() + ba->Size(); |
| + for (Address cur = payload_start; |
| + cur < payload_end; |
| + cur += kPointerSize) { |
| + *reinterpret_cast<Object**>(cur) = Smi::FromInt(0); |
| + } |
| + } |
| + cur_addr = cur_node->next(); |
| + } |
| + } |
| +} |
| + |
| + |
| +void FixedSizeFreeList::Zap() { |
| + Address cur_addr = head_; |
| + while (cur_addr != NULL && cur_addr != tail_) { |
| + FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr); |
|
Vyacheslav Egorov (Chromium)
2011/01/21 18:18:18
cur_node->Zap();
see above.
Erik Corry
2011/01/24 13:56:00
Done.
|
| + Address current = cur_addr + Map::kPointerFieldsBeginOffset; |
| + Address limit = cur_addr + Map::kPointerFieldsEndOffset; |
| + for (Address cur = current; cur < limit; cur += kPointerSize) { |
| + *reinterpret_cast<Object**>(cur) = Smi::FromInt(0); |
| + } |
| + cur_addr = cur_node->next(); |
| + } |
| +} |
| #endif |
| @@ -2307,13 +2342,8 @@ |
| // object space, and only fixed arrays can possibly contain pointers to |
| // the young generation. |
| if (object->IsFixedArray()) { |
| - Page* page = Page::FromAddress(object->address()); |
| - uint32_t marks = page->GetRegionMarks(); |
| - |
| // TODO(gc): we can no longer assume that LargePage is bigger than normal |
| // page. |
| - ASSERT(marks == Page::kAllRegionsDirtyMarks); |
|
Vyacheslav Egorov (Chromium)
2011/01/21 18:18:18
Kill all constants/fields related to cardmarking.
Erik Corry
2011/01/24 13:56:00
Soon.
Nice time stamp.
|
| - USE(marks); |
| Address start = object->address(); |
| Address object_end = start + object->Size(); |