Index: src/spaces-inl.h |
=================================================================== |
--- src/spaces-inl.h (revision 7267) |
+++ src/spaces-inl.h (working copy) |
@@ -28,6 +28,7 @@ |
#ifndef V8_SPACES_INL_H_ |
#define V8_SPACES_INL_H_ |
+#include "isolate.h" |
#include "memory.h" |
#include "spaces.h" |
@@ -56,18 +57,18 @@ |
// Page |
Page* Page::next_page() { |
- return MemoryAllocator::GetNextPage(this); |
+ return heap_->isolate()->memory_allocator()->GetNextPage(this); |
} |
Address Page::AllocationTop() { |
- PagedSpace* owner = MemoryAllocator::PageOwner(this); |
+ PagedSpace* owner = heap_->isolate()->memory_allocator()->PageOwner(this); |
return owner->PageAllocationTop(this); |
} |
Address Page::AllocationWatermark() { |
- PagedSpace* owner = MemoryAllocator::PageOwner(this); |
+ PagedSpace* owner = heap_->isolate()->memory_allocator()->PageOwner(this); |
if (this == owner->AllocationTopPage()) { |
return owner->top(); |
} |
@@ -82,7 +83,7 @@ |
void Page::SetAllocationWatermark(Address allocation_watermark) { |
- if ((Heap::gc_state() == Heap::SCAVENGE) && IsWatermarkValid()) { |
+ if ((heap_->gc_state() == Heap::SCAVENGE) && IsWatermarkValid()) { |
// When iterating intergenerational references during scavenge |
// we might decide to promote an encountered young object. |
// We will allocate a space for such an object and put it |
@@ -219,23 +220,26 @@ |
} |
-void Page::FlipMeaningOfInvalidatedWatermarkFlag() { |
- watermark_invalidated_mark_ ^= 1 << WATERMARK_INVALIDATED; |
+void Page::FlipMeaningOfInvalidatedWatermarkFlag(Heap* heap) { |
+ heap->page_watermark_invalidated_mark_ ^= 1 << WATERMARK_INVALIDATED; |
} |
bool Page::IsWatermarkValid() { |
- return (flags_ & (1 << WATERMARK_INVALIDATED)) != watermark_invalidated_mark_; |
+ return (flags_ & (1 << WATERMARK_INVALIDATED)) != |
+ heap_->page_watermark_invalidated_mark_; |
} |
void Page::InvalidateWatermark(bool value) { |
if (value) { |
flags_ = (flags_ & ~(1 << WATERMARK_INVALIDATED)) | |
- watermark_invalidated_mark_; |
+ heap_->page_watermark_invalidated_mark_; |
} else { |
- flags_ = (flags_ & ~(1 << WATERMARK_INVALIDATED)) | |
- (watermark_invalidated_mark_ ^ (1 << WATERMARK_INVALIDATED)); |
+ flags_ = |
+ (flags_ & ~(1 << WATERMARK_INVALIDATED)) | |
+ (heap_->page_watermark_invalidated_mark_ ^ |
+ (1 << WATERMARK_INVALIDATED)); |
} |
ASSERT(IsWatermarkValid() == !value); |
@@ -264,7 +268,7 @@ |
void Page::ClearGCFields() { |
InvalidateWatermark(true); |
SetAllocationWatermark(ObjectAreaStart()); |
- if (Heap::gc_state() == Heap::SCAVENGE) { |
+ if (heap_->gc_state() == Heap::SCAVENGE) { |
SetCachedAllocationWatermark(ObjectAreaStart()); |
} |
SetRegionMarks(kAllRegionsCleanMarks); |
@@ -308,6 +312,7 @@ |
size_ = s; |
owner_ = o; |
executable_ = (o == NULL) ? NOT_EXECUTABLE : o->executable(); |
+ owner_identity_ = (o == NULL) ? FIRST_SPACE : o->identity(); |
} |
@@ -408,18 +413,10 @@ |
bool PagedSpace::Contains(Address addr) { |
Page* p = Page::FromAddress(addr); |
if (!p->is_valid()) return false; |
- return MemoryAllocator::IsPageInSpace(p, this); |
+ return heap()->isolate()->memory_allocator()->IsPageInSpace(p, this); |
} |
-bool PagedSpace::SafeContains(Address addr) { |
- if (!MemoryAllocator::SafeIsInAPageChunk(addr)) return false; |
- Page* p = Page::FromAddress(addr); |
- if (!p->is_valid()) return false; |
- return MemoryAllocator::IsPageInSpace(p, this); |
-} |
- |
- |
// Try linear allocation in the page of alloc_info's allocation top. Does |
// not contain slow case logic (eg, move to the next page or try free list |
// allocation) so it can be used by all the allocation functions and for all |
@@ -477,7 +474,9 @@ |
void LargeObjectChunk::Free(Executability executable) { |
- MemoryAllocator::FreeRawMemory(address(), size(), executable); |
+ Isolate* isolate = |
+ Page::FromAddress(RoundUp(address(), Page::kPageSize))->heap_->isolate(); |
+ isolate->memory_allocator()->FreeRawMemory(address(), size(), executable); |
} |
// ----------------------------------------------------------------------------- |
@@ -501,6 +500,12 @@ |
} |
+intptr_t LargeObjectSpace::Available() { |
+ return LargeObjectChunk::ObjectSizeFor( |
+ heap()->isolate()->memory_allocator()->Available()); |
+} |
+ |
+ |
template <typename StringType> |
void NewSpace::ShrinkStringAtAllocationBoundary(String* string, int length) { |
ASSERT(length <= string->length()); |
@@ -514,9 +519,9 @@ |
bool FreeListNode::IsFreeListNode(HeapObject* object) { |
- return object->map() == Heap::raw_unchecked_byte_array_map() |
- || object->map() == Heap::raw_unchecked_one_pointer_filler_map() |
- || object->map() == Heap::raw_unchecked_two_pointer_filler_map(); |
+ return object->map() == HEAP->raw_unchecked_byte_array_map() |
+ || object->map() == HEAP->raw_unchecked_one_pointer_filler_map() |
+ || object->map() == HEAP->raw_unchecked_two_pointer_filler_map(); |
} |
} } // namespace v8::internal |