OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/base/atomicops.h" | 7 #include "src/base/atomicops.h" |
8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/compilation-cache.h" | 10 #include "src/compilation-cache.h" |
(...skipping 3041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3052 heap()->IncrementPromotedObjectsSize(object_size); | 3052 heap()->IncrementPromotedObjectsSize(object_size); |
3053 return true; | 3053 return true; |
3054 } | 3054 } |
3055 | 3055 |
3056 return false; | 3056 return false; |
3057 } | 3057 } |
3058 | 3058 |
3059 | 3059 |
3060 bool MarkCompactCollector::IsSlotInBlackObject(Page* p, Address slot) { | 3060 bool MarkCompactCollector::IsSlotInBlackObject(Page* p, Address slot) { |
3061 // This function does not support large objects right now. | 3061 // This function does not support large objects right now. |
3062 if (p->owner() == NULL) return true; | 3062 Space* owner = p->owner(); |
| 3063 if (owner == heap_->lo_space() || owner == NULL) return true; |
3063 | 3064 |
3064 uint32_t mark_bit_index = p->AddressToMarkbitIndex(slot); | 3065 uint32_t mark_bit_index = p->AddressToMarkbitIndex(slot); |
3065 unsigned int start_index = mark_bit_index >> Bitmap::kBitsPerCellLog2; | 3066 unsigned int start_index = mark_bit_index >> Bitmap::kBitsPerCellLog2; |
3066 MarkBit::CellType index_in_cell = 1U | 3067 MarkBit::CellType index_in_cell = 1U |
3067 << (mark_bit_index & Bitmap::kBitIndexMask); | 3068 << (mark_bit_index & Bitmap::kBitIndexMask); |
3068 MarkBit::CellType* cells = p->markbits()->cells(); | 3069 MarkBit::CellType* cells = p->markbits()->cells(); |
3069 Address cell_base = p->area_start(); | 3070 Address cell_base = p->area_start(); |
3070 unsigned int cell_base_start_index = Bitmap::IndexToCell( | 3071 unsigned int cell_base_start_index = Bitmap::IndexToCell( |
3071 Bitmap::CellAlignIndex(p->AddressToMarkbitIndex(cell_base))); | 3072 Bitmap::CellAlignIndex(p->AddressToMarkbitIndex(cell_base))); |
3072 | 3073 |
(...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4636 SlotsBuffer* buffer = *buffer_address; | 4637 SlotsBuffer* buffer = *buffer_address; |
4637 while (buffer != NULL) { | 4638 while (buffer != NULL) { |
4638 SlotsBuffer* next_buffer = buffer->next(); | 4639 SlotsBuffer* next_buffer = buffer->next(); |
4639 DeallocateBuffer(buffer); | 4640 DeallocateBuffer(buffer); |
4640 buffer = next_buffer; | 4641 buffer = next_buffer; |
4641 } | 4642 } |
4642 *buffer_address = NULL; | 4643 *buffer_address = NULL; |
4643 } | 4644 } |
4644 } | 4645 } |
4645 } // namespace v8::internal | 4646 } // namespace v8::internal |
OLD | NEW |