Index: src/heap/spaces.h |
diff --git a/src/spaces.h b/src/heap/spaces.h |
similarity index 88% |
rename from src/spaces.h |
rename to src/heap/spaces.h |
index 2472bd3881952e31d2e18bc06f76517f814dbf65..60741a8b5c3d54478e996d44227a11d4d8fc1cf3 100644 |
--- a/src/spaces.h |
+++ b/src/heap/spaces.h |
@@ -2,8 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef V8_SPACES_H_ |
-#define V8_SPACES_H_ |
+#ifndef V8_HEAP_SPACES_H_ |
+#define V8_HEAP_SPACES_H_ |
#include "src/allocation.h" |
#include "src/base/atomicops.h" |
@@ -74,20 +74,19 @@ class Isolate; |
// Some assertion macros used in the debugging mode. |
-#define DCHECK_PAGE_ALIGNED(address) \ |
+#define DCHECK_PAGE_ALIGNED(address) \ |
DCHECK((OffsetFrom(address) & Page::kPageAlignmentMask) == 0) |
-#define DCHECK_OBJECT_ALIGNED(address) \ |
+#define DCHECK_OBJECT_ALIGNED(address) \ |
DCHECK((OffsetFrom(address) & kObjectAlignmentMask) == 0) |
-#define DCHECK_OBJECT_SIZE(size) \ |
+#define DCHECK_OBJECT_SIZE(size) \ |
DCHECK((0 < size) && (size <= Page::kMaxRegularHeapObjectSize)) |
-#define DCHECK_PAGE_OFFSET(offset) \ |
- DCHECK((Page::kObjectStartOffset <= offset) \ |
- && (offset <= Page::kPageSize)) |
+#define DCHECK_PAGE_OFFSET(offset) \ |
+ DCHECK((Page::kObjectStartOffset <= offset) && (offset <= Page::kPageSize)) |
-#define DCHECK_MAP_PAGE_INDEX(index) \ |
+#define DCHECK_MAP_PAGE_INDEX(index) \ |
DCHECK((0 <= index) && (index <= MapSpace::kMaxMapPageIndex)) |
@@ -103,7 +102,7 @@ class MarkBit { |
typedef uint32_t CellType; |
inline MarkBit(CellType* cell, CellType mask, bool data_only) |
- : cell_(cell), mask_(mask), data_only_(data_only) { } |
+ : cell_(cell), mask_(mask), data_only_(data_only) {} |
inline CellType* cell() { return cell_; } |
inline CellType mask() { return mask_; } |
@@ -149,20 +148,17 @@ class Bitmap { |
static const uint32_t kBytesPerCell = kBitsPerCell / kBitsPerByte; |
static const uint32_t kBytesPerCellLog2 = kBitsPerCellLog2 - kBitsPerByteLog2; |
- static const size_t kLength = |
- (1 << kPageSizeBits) >> (kPointerSizeLog2); |
+ static const size_t kLength = (1 << kPageSizeBits) >> (kPointerSizeLog2); |
static const size_t kSize = |
- (1 << kPageSizeBits) >> (kPointerSizeLog2 + kBitsPerByteLog2); |
+ (1 << kPageSizeBits) >> (kPointerSizeLog2 + kBitsPerByteLog2); |
static int CellsForLength(int length) { |
return (length + kBitsPerCell - 1) >> kBitsPerCellLog2; |
} |
- int CellsCount() { |
- return CellsForLength(kLength); |
- } |
+ int CellsCount() { return CellsForLength(kLength); } |
static int SizeFor(int cells_count) { |
return sizeof(MarkBit::CellType) * cells_count; |
@@ -184,9 +180,7 @@ class Bitmap { |
return reinterpret_cast<MarkBit::CellType*>(this); |
} |
- INLINE(Address address()) { |
- return reinterpret_cast<Address>(this); |
- } |
+ INLINE(Address address()) { return reinterpret_cast<Address>(this); } |
INLINE(static Bitmap* FromAddress(Address addr)) { |
return reinterpret_cast<Bitmap*>(addr); |
@@ -210,7 +204,7 @@ class Bitmap { |
class CellPrinter { |
public: |
- CellPrinter() : seq_start(0), seq_type(0), seq_length(0) { } |
+ CellPrinter() : seq_start(0), seq_type(0), seq_length(0) {} |
void Print(uint32_t pos, uint32_t cell) { |
if (cell == seq_type) { |
@@ -234,9 +228,7 @@ class Bitmap { |
void Flush() { |
if (seq_length > 0) { |
- PrintF("%d: %dx%d\n", |
- seq_start, |
- seq_type == 0 ? 0 : 1, |
+ PrintF("%d: %dx%d\n", seq_start, seq_type == 0 ? 0 : 1, |
seq_length * kBitsPerCell); |
seq_length = 0; |
} |
@@ -284,8 +276,8 @@ class MemoryChunk { |
return reinterpret_cast<MemoryChunk*>(OffsetFrom(a) & ~kAlignmentMask); |
} |
static const MemoryChunk* FromAddress(const byte* a) { |
- return reinterpret_cast<const MemoryChunk*>( |
- OffsetFrom(a) & ~kAlignmentMask); |
+ return reinterpret_cast<const MemoryChunk*>(OffsetFrom(a) & |
+ ~kAlignmentMask); |
} |
// Only works for addresses in pointer spaces, not data or code spaces. |
@@ -328,13 +320,9 @@ class MemoryChunk { |
kPageHeaderTag); |
} |
- base::VirtualMemory* reserved_memory() { |
- return &reservation_; |
- } |
+ base::VirtualMemory* reserved_memory() { return &reservation_; } |
- void InitializeReservedMemory() { |
- reservation_.Reset(); |
- } |
+ void InitializeReservedMemory() { reservation_.Reset(); } |
void set_reserved_memory(base::VirtualMemory* reservation) { |
DCHECK_NOT_NULL(reservation); |
@@ -409,23 +397,16 @@ class MemoryChunk { |
static const int kPointersFromHereAreInterestingMask = |
1 << POINTERS_FROM_HERE_ARE_INTERESTING; |
- static const int kEvacuationCandidateMask = |
- 1 << EVACUATION_CANDIDATE; |
+ static const int kEvacuationCandidateMask = 1 << EVACUATION_CANDIDATE; |
static const int kSkipEvacuationSlotsRecordingMask = |
- (1 << EVACUATION_CANDIDATE) | |
- (1 << RESCAN_ON_EVACUATION) | |
- (1 << IN_FROM_SPACE) | |
- (1 << IN_TO_SPACE); |
+ (1 << EVACUATION_CANDIDATE) | (1 << RESCAN_ON_EVACUATION) | |
+ (1 << IN_FROM_SPACE) | (1 << IN_TO_SPACE); |
- void SetFlag(int flag) { |
- flags_ |= static_cast<uintptr_t>(1) << flag; |
- } |
+ void SetFlag(int flag) { flags_ |= static_cast<uintptr_t>(1) << flag; } |
- void ClearFlag(int flag) { |
- flags_ &= ~(static_cast<uintptr_t>(1) << flag); |
- } |
+ void ClearFlag(int flag) { flags_ &= ~(static_cast<uintptr_t>(1) << flag); } |
void SetFlagTo(int flag, bool value) { |
if (value) { |
@@ -473,9 +454,9 @@ class MemoryChunk { |
} |
bool TryParallelSweeping() { |
- return base::Acquire_CompareAndSwap( |
- ¶llel_sweeping_, SWEEPING_PENDING, SWEEPING_IN_PROGRESS) == |
- SWEEPING_PENDING; |
+ return base::Acquire_CompareAndSwap(¶llel_sweeping_, SWEEPING_PENDING, |
+ SWEEPING_IN_PROGRESS) == |
+ SWEEPING_PENDING; |
} |
bool SweepingCompleted() { return parallel_sweeping() <= SWEEPING_FINALIZE; } |
@@ -484,16 +465,15 @@ class MemoryChunk { |
// because they are marked black). |
void ResetLiveBytes() { |
if (FLAG_gc_verbose) { |
- PrintF("ResetLiveBytes:%p:%x->0\n", |
- static_cast<void*>(this), live_byte_count_); |
+ PrintF("ResetLiveBytes:%p:%x->0\n", static_cast<void*>(this), |
+ live_byte_count_); |
} |
live_byte_count_ = 0; |
} |
void IncrementLiveBytes(int by) { |
if (FLAG_gc_verbose) { |
- printf("UpdateLiveBytes:%p:%x%c=%x->%x\n", |
- static_cast<void*>(this), live_byte_count_, |
- ((by < 0) ? '-' : '+'), ((by < 0) ? -by : by), |
+ printf("UpdateLiveBytes:%p:%x%c=%x->%x\n", static_cast<void*>(this), |
+ live_byte_count_, ((by < 0) ? '-' : '+'), ((by < 0) ? -by : by), |
live_byte_count_ + by); |
} |
live_byte_count_ += by; |
@@ -550,19 +530,17 @@ class MemoryChunk { |
static const intptr_t kSizeOffset = 0; |
static const intptr_t kLiveBytesOffset = |
- kSizeOffset + kPointerSize + kPointerSize + kPointerSize + |
- kPointerSize + kPointerSize + |
- kPointerSize + kPointerSize + kPointerSize + kIntSize; |
+ kSizeOffset + kPointerSize + kPointerSize + kPointerSize + kPointerSize + |
+ kPointerSize + kPointerSize + kPointerSize + kPointerSize + kIntSize; |
static const size_t kSlotsBufferOffset = kLiveBytesOffset + kIntSize; |
static const size_t kWriteBarrierCounterOffset = |
kSlotsBufferOffset + kPointerSize + kPointerSize; |
- static const size_t kHeaderSize = kWriteBarrierCounterOffset + kPointerSize + |
- kIntSize + kIntSize + kPointerSize + |
- 5 * kPointerSize + |
- kPointerSize + kPointerSize; |
+ static const size_t kHeaderSize = |
+ kWriteBarrierCounterOffset + kPointerSize + kIntSize + kIntSize + |
+ kPointerSize + 5 * kPointerSize + kPointerSize + kPointerSize; |
static const int kBodyOffset = |
CODE_POINTER_ALIGN(kHeaderSize + Bitmap::kSize); |
@@ -571,14 +549,13 @@ class MemoryChunk { |
// code alignment to be suitable for both. Also aligned to 32 words because |
// the marking bitmap is arranged in 32 bit chunks. |
static const int kObjectStartAlignment = 32 * kPointerSize; |
- static const int kObjectStartOffset = kBodyOffset - 1 + |
+ static const int kObjectStartOffset = |
+ kBodyOffset - 1 + |
(kObjectStartAlignment - (kBodyOffset - 1) % kObjectStartAlignment); |
size_t size() const { return size_; } |
- void set_size(size_t size) { |
- size_ = size; |
- } |
+ void set_size(size_t size) { size_ = size; } |
void SetArea(Address area_start, Address area_end) { |
area_start_ = area_start; |
@@ -589,21 +566,15 @@ class MemoryChunk { |
return IsFlagSet(IS_EXECUTABLE) ? EXECUTABLE : NOT_EXECUTABLE; |
} |
- bool ContainsOnlyData() { |
- return IsFlagSet(CONTAINS_ONLY_DATA); |
- } |
+ bool ContainsOnlyData() { return IsFlagSet(CONTAINS_ONLY_DATA); } |
bool InNewSpace() { |
return (flags_ & ((1 << IN_FROM_SPACE) | (1 << IN_TO_SPACE))) != 0; |
} |
- bool InToSpace() { |
- return IsFlagSet(IN_TO_SPACE); |
- } |
+ bool InToSpace() { return IsFlagSet(IN_TO_SPACE); } |
- bool InFromSpace() { |
- return IsFlagSet(IN_FROM_SPACE); |
- } |
+ bool InFromSpace() { return IsFlagSet(IN_FROM_SPACE); } |
// --------------------------------------------------------------------- |
// Markbits support |
@@ -619,8 +590,7 @@ class MemoryChunk { |
} |
inline static uint32_t FastAddressToMarkbitIndex(Address addr) { |
- const intptr_t offset = |
- reinterpret_cast<intptr_t>(addr) & kAlignmentMask; |
+ const intptr_t offset = reinterpret_cast<intptr_t>(addr) & kAlignmentMask; |
return static_cast<uint32_t>(offset) >> kPointerSizeLog2; |
} |
@@ -642,21 +612,13 @@ class MemoryChunk { |
return (flags_ & kSkipEvacuationSlotsRecordingMask) != 0; |
} |
- inline SkipList* skip_list() { |
- return skip_list_; |
- } |
+ inline SkipList* skip_list() { return skip_list_; } |
- inline void set_skip_list(SkipList* skip_list) { |
- skip_list_ = skip_list; |
- } |
+ inline void set_skip_list(SkipList* skip_list) { skip_list_ = skip_list; } |
- inline SlotsBuffer* slots_buffer() { |
- return slots_buffer_; |
- } |
+ inline SlotsBuffer* slots_buffer() { return slots_buffer_; } |
- inline SlotsBuffer** slots_buffer_address() { |
- return &slots_buffer_; |
- } |
+ inline SlotsBuffer** slots_buffer_address() { return &slots_buffer_; } |
void MarkEvacuationCandidate() { |
DCHECK(slots_buffer_ == NULL); |
@@ -670,15 +632,11 @@ class MemoryChunk { |
Address area_start() { return area_start_; } |
Address area_end() { return area_end_; } |
- int area_size() { |
- return static_cast<int>(area_end() - area_start()); |
- } |
+ int area_size() { return static_cast<int>(area_end() - area_start()); } |
bool CommitArea(size_t requested); |
// Approximate amount of physical memory committed for this chunk. |
- size_t CommittedPhysicalMemory() { |
- return high_water_mark_; |
- } |
+ size_t CommittedPhysicalMemory() { return high_water_mark_; } |
static inline void UpdateHighWaterMark(Address mark); |
@@ -721,13 +679,9 @@ class MemoryChunk { |
intptr_t available_in_huge_free_list_; |
intptr_t non_available_small_blocks_; |
- static MemoryChunk* Initialize(Heap* heap, |
- Address base, |
- size_t size, |
- Address area_start, |
- Address area_end, |
- Executability executable, |
- Space* owner); |
+ static MemoryChunk* Initialize(Heap* heap, Address base, size_t size, |
+ Address area_start, Address area_end, |
+ Executability executable, Space* owner); |
private: |
// next_chunk_ holds a pointer of type MemoryChunk |
@@ -806,10 +760,8 @@ class Page : public MemoryChunk { |
inline void ClearGCFields(); |
- static inline Page* Initialize(Heap* heap, |
- MemoryChunk* chunk, |
- Executability executable, |
- PagedSpace* owner); |
+ static inline Page* Initialize(Heap* heap, MemoryChunk* chunk, |
+ Executability executable, PagedSpace* owner); |
void InitializeAsAnchor(PagedSpace* owner); |
@@ -851,17 +803,14 @@ STATIC_ASSERT(sizeof(Page) <= MemoryChunk::kHeaderSize); |
class LargePage : public MemoryChunk { |
public: |
- HeapObject* GetObject() { |
- return HeapObject::FromAddress(area_start()); |
- } |
+ HeapObject* GetObject() { return HeapObject::FromAddress(area_start()); } |
inline LargePage* next_page() const { |
return static_cast<LargePage*>(next_chunk()); |
} |
- inline void set_next_page(LargePage* page) { |
- set_next_chunk(page); |
- } |
+ inline void set_next_page(LargePage* page) { set_next_chunk(page); } |
+ |
private: |
static inline LargePage* Initialize(Heap* heap, MemoryChunk* chunk); |
@@ -1002,9 +951,7 @@ class CodeRange { |
class SkipList { |
public: |
- SkipList() { |
- Clear(); |
- } |
+ SkipList() { Clear(); } |
void Clear() { |
for (int idx = 0; idx < kSize; idx++) { |
@@ -1012,9 +959,7 @@ class SkipList { |
} |
} |
- Address StartFor(Address addr) { |
- return starts_[RegionNumber(addr)]; |
- } |
+ Address StartFor(Address addr) { return starts_[RegionNumber(addr)]; } |
void AddObject(Address addr, int size) { |
int start_region = RegionNumber(addr); |
@@ -1067,11 +1012,11 @@ class MemoryAllocator { |
void TearDown(); |
- Page* AllocatePage( |
- intptr_t size, PagedSpace* owner, Executability executable); |
+ Page* AllocatePage(intptr_t size, PagedSpace* owner, |
+ Executability executable); |
- LargePage* AllocateLargePage( |
- intptr_t object_size, Space* owner, Executability executable); |
+ LargePage* AllocateLargePage(intptr_t object_size, Space* owner, |
+ Executability executable); |
void Free(MemoryChunk* chunk); |
@@ -1099,7 +1044,7 @@ class MemoryAllocator { |
// been allocated by this MemoryAllocator. |
V8_INLINE bool IsOutsideAllocatedSpace(const void* address) const { |
return address < lowest_ever_allocated_ || |
- address >= highest_ever_allocated_; |
+ address >= highest_ever_allocated_; |
} |
#ifdef DEBUG |
@@ -1112,16 +1057,12 @@ class MemoryAllocator { |
// could be committed later by calling MemoryChunk::CommitArea. |
MemoryChunk* AllocateChunk(intptr_t reserve_area_size, |
intptr_t commit_area_size, |
- Executability executable, |
- Space* space); |
+ Executability executable, Space* space); |
- Address ReserveAlignedMemory(size_t requested, |
- size_t alignment, |
+ Address ReserveAlignedMemory(size_t requested, size_t alignment, |
base::VirtualMemory* controller); |
- Address AllocateAlignedMemory(size_t reserve_size, |
- size_t commit_size, |
- size_t alignment, |
- Executability executable, |
+ Address AllocateAlignedMemory(size_t reserve_size, size_t commit_size, |
+ size_t alignment, Executability executable, |
base::VirtualMemory* controller); |
bool CommitMemory(Address addr, size_t size, Executability executable); |
@@ -1145,19 +1086,15 @@ class MemoryAllocator { |
// filling it up with a recognizable non-NULL bit pattern. |
void ZapBlock(Address start, size_t size); |
- void PerformAllocationCallback(ObjectSpace space, |
- AllocationAction action, |
+ void PerformAllocationCallback(ObjectSpace space, AllocationAction action, |
size_t size); |
void AddMemoryAllocationCallback(MemoryAllocationCallback callback, |
- ObjectSpace space, |
- AllocationAction action); |
+ ObjectSpace space, AllocationAction action); |
- void RemoveMemoryAllocationCallback( |
- MemoryAllocationCallback callback); |
+ void RemoveMemoryAllocationCallback(MemoryAllocationCallback callback); |
- bool MemoryAllocationCallbackRegistered( |
- MemoryAllocationCallback callback); |
+ bool MemoryAllocationCallbackRegistered(MemoryAllocationCallback callback); |
static int CodePageGuardStartOffset(); |
@@ -1172,8 +1109,7 @@ class MemoryAllocator { |
} |
MUST_USE_RESULT bool CommitExecutableMemory(base::VirtualMemory* vm, |
- Address start, |
- size_t commit_size, |
+ Address start, size_t commit_size, |
size_t reserved_size); |
private: |
@@ -1201,16 +1137,14 @@ class MemoryAllocator { |
MemoryAllocationCallbackRegistration(MemoryAllocationCallback callback, |
ObjectSpace space, |
AllocationAction action) |
- : callback(callback), space(space), action(action) { |
- } |
+ : callback(callback), space(space), action(action) {} |
MemoryAllocationCallback callback; |
ObjectSpace space; |
AllocationAction action; |
}; |
// A List of callback that are triggered when memory is allocated or free'd |
- List<MemoryAllocationCallbackRegistration> |
- memory_allocation_callbacks_; |
+ List<MemoryAllocationCallbackRegistration> memory_allocation_callbacks_; |
// Initializes pages in a chunk. Returns the first page address. |
// This function and GetChunkId() are provided for the mark-compact |
@@ -1238,7 +1172,7 @@ class MemoryAllocator { |
class ObjectIterator : public Malloced { |
public: |
- virtual ~ObjectIterator() { } |
+ virtual ~ObjectIterator() {} |
virtual HeapObject* next_object() = 0; |
}; |
@@ -1253,7 +1187,7 @@ class ObjectIterator : public Malloced { |
// If objects are allocated in the page during iteration the iterator may |
// or may not iterate over those objects. The caller must create a new |
// iterator in order to be sure to visit these new objects. |
-class HeapObjectIterator: public ObjectIterator { |
+class HeapObjectIterator : public ObjectIterator { |
public: |
// Creates a new object iterator in a given space. |
// If the size function is not given, the iterator calls the default |
@@ -1273,15 +1207,13 @@ class HeapObjectIterator: public ObjectIterator { |
return NULL; |
} |
- virtual HeapObject* next_object() { |
- return Next(); |
- } |
+ virtual HeapObject* next_object() { return Next(); } |
private: |
enum PageMode { kOnePageOnly, kAllPagesInSpace }; |
- Address cur_addr_; // Current iteration point. |
- Address cur_end_; // End iteration point. |
+ Address cur_addr_; // Current iteration point. |
+ Address cur_end_; // End iteration point. |
HeapObjectCallback size_func_; // Size function or NULL. |
PagedSpace* space_; |
PageMode page_mode_; |
@@ -1294,11 +1226,8 @@ class HeapObjectIterator: public ObjectIterator { |
bool AdvanceToNextPage(); |
// Initializes fields. |
- inline void Initialize(PagedSpace* owner, |
- Address start, |
- Address end, |
- PageMode mode, |
- HeapObjectCallback size_func); |
+ inline void Initialize(PagedSpace* owner, Address start, Address end, |
+ PageMode mode, HeapObjectCallback size_func); |
}; |
@@ -1329,45 +1258,41 @@ class PageIterator BASE_EMBEDDED { |
// space. |
class AllocationInfo { |
public: |
- AllocationInfo() : top_(NULL), limit_(NULL) { |
- } |
+ AllocationInfo() : top_(NULL), limit_(NULL) {} |
INLINE(void set_top(Address top)) { |
SLOW_DCHECK(top == NULL || |
- (reinterpret_cast<intptr_t>(top) & HeapObjectTagMask()) == 0); |
+ (reinterpret_cast<intptr_t>(top) & HeapObjectTagMask()) == 0); |
top_ = top; |
} |
INLINE(Address top()) const { |
SLOW_DCHECK(top_ == NULL || |
- (reinterpret_cast<intptr_t>(top_) & HeapObjectTagMask()) == 0); |
+ (reinterpret_cast<intptr_t>(top_) & HeapObjectTagMask()) == 0); |
return top_; |
} |
- Address* top_address() { |
- return &top_; |
- } |
+ Address* top_address() { return &top_; } |
INLINE(void set_limit(Address limit)) { |
SLOW_DCHECK(limit == NULL || |
- (reinterpret_cast<intptr_t>(limit) & HeapObjectTagMask()) == 0); |
+ (reinterpret_cast<intptr_t>(limit) & HeapObjectTagMask()) == 0); |
limit_ = limit; |
} |
INLINE(Address limit()) const { |
SLOW_DCHECK(limit_ == NULL || |
- (reinterpret_cast<intptr_t>(limit_) & HeapObjectTagMask()) == 0); |
+ (reinterpret_cast<intptr_t>(limit_) & HeapObjectTagMask()) == |
+ 0); |
return limit_; |
} |
- Address* limit_address() { |
- return &limit_; |
- } |
+ Address* limit_address() { return &limit_; } |
#ifdef DEBUG |
bool VerifyPagedAllocation() { |
- return (Page::FromAllocationTop(top_) == Page::FromAllocationTop(limit_)) |
- && (top_ <= limit_); |
+ return (Page::FromAllocationTop(top_) == Page::FromAllocationTop(limit_)) && |
+ (top_ <= limit_); |
} |
#endif |
@@ -1477,7 +1402,7 @@ class AllocationStats BASE_EMBEDDED { |
// (free-list node pointers have the heap object tag, and they have a map like |
// a heap object). They have a size and a next pointer. The next pointer is |
// the raw address of the next free list node (or NULL). |
-class FreeListNode: public HeapObject { |
+class FreeListNode : public HeapObject { |
public: |
// Obtain a free-list node from a raw address. This is not a cast because |
// it does not check nor require that the first word at the address is a map |
@@ -1516,10 +1441,7 @@ class FreeListNode: public HeapObject { |
// the end element of the linked list of free memory blocks. |
class FreeListCategory { |
public: |
- FreeListCategory() : |
- top_(0), |
- end_(NULL), |
- available_(0) {} |
+ FreeListCategory() : top_(0), end_(NULL), available_(0) {} |
intptr_t Concatenate(FreeListCategory* category); |
@@ -1527,8 +1449,8 @@ class FreeListCategory { |
void Free(FreeListNode* node, int size_in_bytes); |
- FreeListNode* PickNodeFromList(int *node_size); |
- FreeListNode* PickNodeFromList(int size_in_bytes, int *node_size); |
+ FreeListNode* PickNodeFromList(int* node_size); |
+ FreeListNode* PickNodeFromList(int size_in_bytes, int* node_size); |
intptr_t EvictFreeListItemsInList(Page* p); |
bool ContainsPageFreeListItemsInList(Page* p); |
@@ -1553,9 +1475,7 @@ class FreeListCategory { |
base::Mutex* mutex() { return &mutex_; } |
- bool IsEmpty() { |
- return top() == 0; |
- } |
+ bool IsEmpty() { return top() == 0; } |
#ifdef DEBUG |
intptr_t SumFreeList(); |
@@ -1691,11 +1611,11 @@ class FreeList { |
class AllocationResult { |
public: |
// Implicit constructor from Object*. |
- AllocationResult(Object* object) : object_(object), // NOLINT |
- retry_space_(INVALID_SPACE) { } |
+ explicit AllocationResult(Object* object) |
+ : object_(object), // NOLINT |
+ retry_space_(INVALID_SPACE) {} |
- AllocationResult() : object_(NULL), |
- retry_space_(INVALID_SPACE) { } |
+ AllocationResult() : object_(NULL), retry_space_(INVALID_SPACE) {} |
static inline AllocationResult Retry(AllocationSpace space = NEW_SPACE) { |
return AllocationResult(space); |
@@ -1721,8 +1641,8 @@ class AllocationResult { |
} |
private: |
- explicit AllocationResult(AllocationSpace space) : object_(NULL), |
- retry_space_(space) { } |
+ explicit AllocationResult(AllocationSpace space) |
+ : object_(NULL), retry_space_(space) {} |
Object* object_; |
AllocationSpace retry_space_; |
@@ -1732,9 +1652,7 @@ class AllocationResult { |
class PagedSpace : public Space { |
public: |
// Creates a space with a maximum capacity, and an id. |
- PagedSpace(Heap* heap, |
- intptr_t max_capacity, |
- AllocationSpace id, |
+ PagedSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id, |
Executability executable); |
virtual ~PagedSpace() {} |
@@ -1838,9 +1756,7 @@ class PagedSpace : public Space { |
Address limit() { return allocation_info_.limit(); } |
// The allocation top address. |
- Address* allocation_top_address() { |
- return allocation_info_.top_address(); |
- } |
+ Address* allocation_top_address() { return allocation_info_.top_address(); } |
// The allocation limit address. |
Address* allocation_limit_address() { |
@@ -1862,9 +1778,7 @@ class PagedSpace : public Space { |
return size_in_bytes - wasted; |
} |
- void ResetFreeList() { |
- free_list_.Reset(); |
- } |
+ void ResetFreeList() { free_list_.Reset(); } |
// Set space allocation info. |
void SetTopAndLimit(Address top, Address limit) { |
@@ -1884,9 +1798,7 @@ class PagedSpace : public Space { |
SetTopAndLimit(NULL, NULL); |
} |
- void Allocate(int bytes) { |
- accounting_stats_.AllocateBytes(bytes); |
- } |
+ void Allocate(int bytes) { accounting_stats_.AllocateBytes(bytes); } |
void IncreaseCapacity(int size); |
@@ -1925,31 +1837,24 @@ class PagedSpace : public Space { |
// result before _and_ after evacuation has finished. |
static bool ShouldBeSweptBySweeperThreads(Page* p) { |
return !p->IsEvacuationCandidate() && |
- !p->IsFlagSet(Page::RESCAN_ON_EVACUATION) && |
- !p->WasSweptPrecisely(); |
+ !p->IsFlagSet(Page::RESCAN_ON_EVACUATION) && !p->WasSweptPrecisely(); |
} |
- void IncrementUnsweptFreeBytes(intptr_t by) { |
- unswept_free_bytes_ += by; |
- } |
+ void IncrementUnsweptFreeBytes(intptr_t by) { unswept_free_bytes_ += by; } |
void IncreaseUnsweptFreeBytes(Page* p) { |
DCHECK(ShouldBeSweptBySweeperThreads(p)); |
unswept_free_bytes_ += (p->area_size() - p->LiveBytes()); |
} |
- void DecrementUnsweptFreeBytes(intptr_t by) { |
- unswept_free_bytes_ -= by; |
- } |
+ void DecrementUnsweptFreeBytes(intptr_t by) { unswept_free_bytes_ -= by; } |
void DecreaseUnsweptFreeBytes(Page* p) { |
DCHECK(ShouldBeSweptBySweeperThreads(p)); |
unswept_free_bytes_ -= (p->area_size() - p->LiveBytes()); |
} |
- void ResetUnsweptFreeBytes() { |
- unswept_free_bytes_ = 0; |
- } |
+ void ResetUnsweptFreeBytes() { unswept_free_bytes_ = 0; } |
// This function tries to steal size_in_bytes memory from the sweeper threads |
// free-lists. If it does not succeed stealing enough memory, it will wait |
@@ -1957,13 +1862,9 @@ class PagedSpace : public Space { |
// It returns true when sweeping is completed and false otherwise. |
bool EnsureSweeperProgress(intptr_t size_in_bytes); |
- void set_end_of_unswept_pages(Page* page) { |
- end_of_unswept_pages_ = page; |
- } |
+ void set_end_of_unswept_pages(Page* page) { end_of_unswept_pages_ = page; } |
- Page* end_of_unswept_pages() { |
- return end_of_unswept_pages_; |
- } |
+ Page* end_of_unswept_pages() { return end_of_unswept_pages_; } |
Page* FirstPage() { return anchor_.next_page(); } |
Page* LastPage() { return anchor_.prev_page(); } |
@@ -1976,9 +1877,7 @@ class PagedSpace : public Space { |
int CountTotalPages(); |
// Return size of allocatable area on a page in this space. |
- inline int AreaSize() { |
- return area_size_; |
- } |
+ inline int AreaSize() { return area_size_; } |
void CreateEmergencyMemory(); |
void FreeEmergencyMemory(); |
@@ -2073,7 +1972,7 @@ class NumberAndSizeInfo BASE_EMBEDDED { |
// HistogramInfo class for recording a single "bar" of a histogram. This |
// class is used for collecting statistics to print to the log file. |
-class HistogramInfo: public NumberAndSizeInfo { |
+class HistogramInfo : public NumberAndSizeInfo { |
public: |
HistogramInfo() : NumberAndSizeInfo() {} |
@@ -2085,10 +1984,7 @@ class HistogramInfo: public NumberAndSizeInfo { |
}; |
-enum SemiSpaceId { |
- kFromSpace = 0, |
- kToSpace = 1 |
-}; |
+enum SemiSpaceId { kFromSpace = 0, kToSpace = 1 }; |
class SemiSpace; |
@@ -2099,9 +1995,9 @@ class NewSpacePage : public MemoryChunk { |
// GC related flags copied from from-space to to-space when |
// flipping semispaces. |
static const intptr_t kCopyOnFlipFlagsMask = |
- (1 << MemoryChunk::POINTERS_TO_HERE_ARE_INTERESTING) | |
- (1 << MemoryChunk::POINTERS_FROM_HERE_ARE_INTERESTING) | |
- (1 << MemoryChunk::SCAN_ON_SCAVENGE); |
+ (1 << MemoryChunk::POINTERS_TO_HERE_ARE_INTERESTING) | |
+ (1 << MemoryChunk::POINTERS_FROM_HERE_ARE_INTERESTING) | |
+ (1 << MemoryChunk::SCAN_ON_SCAVENGE); |
static const int kAreaSize = Page::kMaxRegularHeapObjectSize; |
@@ -2109,36 +2005,28 @@ class NewSpacePage : public MemoryChunk { |
return static_cast<NewSpacePage*>(next_chunk()); |
} |
- inline void set_next_page(NewSpacePage* page) { |
- set_next_chunk(page); |
- } |
+ inline void set_next_page(NewSpacePage* page) { set_next_chunk(page); } |
inline NewSpacePage* prev_page() const { |
return static_cast<NewSpacePage*>(prev_chunk()); |
} |
- inline void set_prev_page(NewSpacePage* page) { |
- set_prev_chunk(page); |
- } |
+ inline void set_prev_page(NewSpacePage* page) { set_prev_chunk(page); } |
- SemiSpace* semi_space() { |
- return reinterpret_cast<SemiSpace*>(owner()); |
- } |
+ SemiSpace* semi_space() { return reinterpret_cast<SemiSpace*>(owner()); } |
bool is_anchor() { return !this->InNewSpace(); } |
static bool IsAtStart(Address addr) { |
- return (reinterpret_cast<intptr_t>(addr) & Page::kPageAlignmentMask) |
- == kObjectStartOffset; |
+ return (reinterpret_cast<intptr_t>(addr) & Page::kPageAlignmentMask) == |
+ kObjectStartOffset; |
} |
static bool IsAtEnd(Address addr) { |
return (reinterpret_cast<intptr_t>(addr) & Page::kPageAlignmentMask) == 0; |
} |
- Address address() { |
- return reinterpret_cast<Address>(this); |
- } |
+ Address address() { return reinterpret_cast<Address>(this); } |
// Finds the NewSpacePage containg the given address. |
static inline NewSpacePage* FromAddress(Address address_in_page) { |
@@ -2164,12 +2052,9 @@ class NewSpacePage : public MemoryChunk { |
private: |
// Create a NewSpacePage object that is only used as anchor |
// for the doubly-linked list of real pages. |
- explicit NewSpacePage(SemiSpace* owner) { |
- InitializeAsAnchor(owner); |
- } |
+ explicit NewSpacePage(SemiSpace* owner) { InitializeAsAnchor(owner); } |
- static NewSpacePage* Initialize(Heap* heap, |
- Address start, |
+ static NewSpacePage* Initialize(Heap* heap, Address start, |
SemiSpace* semi_space); |
// Intialize a fake NewSpacePage used as sentinel at the ends |
@@ -2193,12 +2078,12 @@ class SemiSpace : public Space { |
public: |
// Constructor. |
SemiSpace(Heap* heap, SemiSpaceId semispace) |
- : Space(heap, NEW_SPACE, NOT_EXECUTABLE), |
- start_(NULL), |
- age_mark_(NULL), |
- id_(semispace), |
- anchor_(this), |
- current_page_(NULL) { } |
+ : Space(heap, NEW_SPACE, NOT_EXECUTABLE), |
+ start_(NULL), |
+ age_mark_(NULL), |
+ id_(semispace), |
+ anchor_(this), |
+ current_page_(NULL) {} |
// Sets up the semispace using the given chunk. |
void SetUp(Address start, int initial_capacity, int maximum_capacity); |
@@ -2227,19 +2112,13 @@ class SemiSpace : public Space { |
} |
// Returns the start address of the current page of the space. |
- Address page_low() { |
- return current_page_->area_start(); |
- } |
+ Address page_low() { return current_page_->area_start(); } |
// Returns one past the end address of the space. |
- Address space_end() { |
- return anchor_.prev_page()->area_end(); |
- } |
+ Address space_end() { return anchor_.prev_page()->area_end(); } |
// Returns one past the end address of the current page of the space. |
- Address page_high() { |
- return current_page_->area_end(); |
- } |
+ Address page_high() { return current_page_->area_end(); } |
bool AdvancePage() { |
NewSpacePage* next_page = current_page_->next_page(); |
@@ -2258,8 +2137,8 @@ class SemiSpace : public Space { |
// True if the address is in the address range of this semispace (not |
// necessarily below the allocation pointer). |
bool Contains(Address a) { |
- return (reinterpret_cast<uintptr_t>(a) & address_mask_) |
- == reinterpret_cast<uintptr_t>(start_); |
+ return (reinterpret_cast<uintptr_t>(a) & address_mask_) == |
+ reinterpret_cast<uintptr_t>(start_); |
} |
// True if the object is a heap object in the address range of this |
@@ -2351,6 +2230,7 @@ class SemiSpace : public Space { |
friend class SemiSpaceIterator; |
friend class NewSpacePageIterator; |
+ |
public: |
TRACK_MEMORY("SemiSpace") |
}; |
@@ -2398,9 +2278,7 @@ class SemiSpaceIterator : public ObjectIterator { |
virtual HeapObject* next_object() { return Next(); } |
private: |
- void Initialize(Address start, |
- Address end, |
- HeapObjectCallback size_func); |
+ void Initialize(Address start, Address end, HeapObjectCallback size_func); |
// The current iteration point. |
Address current_; |
@@ -2449,11 +2327,11 @@ class NewSpace : public Space { |
public: |
// Constructor. |
explicit NewSpace(Heap* heap) |
- : Space(heap, NEW_SPACE, NOT_EXECUTABLE), |
- to_space_(heap, kToSpace), |
- from_space_(heap, kFromSpace), |
- reservation_(), |
- inline_allocation_limit_step_(0) {} |
+ : Space(heap, NEW_SPACE, NOT_EXECUTABLE), |
+ to_space_(heap, kToSpace), |
+ from_space_(heap, kFromSpace), |
+ reservation_(), |
+ inline_allocation_limit_step_(0) {} |
// Sets up the new space using the given chunk. |
bool SetUp(int reserved_semispace_size_, int max_semi_space_size); |
@@ -2480,8 +2358,8 @@ class NewSpace : public Space { |
// True if the address or object lies in the address range of either |
// semispace (not necessarily below the allocation pointer). |
bool Contains(Address a) { |
- return (reinterpret_cast<uintptr_t>(a) & address_mask_) |
- == reinterpret_cast<uintptr_t>(start_); |
+ return (reinterpret_cast<uintptr_t>(a) & address_mask_) == |
+ reinterpret_cast<uintptr_t>(start_); |
} |
bool Contains(Object* o) { |
@@ -2492,7 +2370,7 @@ class NewSpace : public Space { |
// Return the allocated bytes in the active semispace. |
virtual intptr_t Size() { |
return pages_used_ * NewSpacePage::kAreaSize + |
- static_cast<int>(top() - to_space_.page_low()); |
+ static_cast<int>(top() - to_space_.page_low()); |
} |
// The same, but returning an int. We have to have the one that returns |
@@ -2521,16 +2399,14 @@ class NewSpace : public Space { |
// Return the total amount of memory committed for new space. |
intptr_t MaximumCommittedMemory() { |
return to_space_.MaximumCommittedMemory() + |
- from_space_.MaximumCommittedMemory(); |
+ from_space_.MaximumCommittedMemory(); |
} |
// Approximate amount of physical memory committed for this space. |
size_t CommittedPhysicalMemory(); |
// Return the available bytes without growing. |
- intptr_t Available() { |
- return Capacity() - Size(); |
- } |
+ intptr_t Available() { return Capacity() - Size(); } |
// Return the maximum capacity of a semispace. |
int MaximumCapacity() { |
@@ -2538,9 +2414,7 @@ class NewSpace : public Space { |
return to_space_.MaximumCapacity(); |
} |
- bool IsAtMaximumCapacity() { |
- return Capacity() == MaximumCapacity(); |
- } |
+ bool IsAtMaximumCapacity() { return Capacity() == MaximumCapacity(); } |
// Returns the initial capacity of a semispace. |
int InitialCapacity() { |
@@ -2590,9 +2464,7 @@ class NewSpace : public Space { |
} |
// The allocation top and limit address. |
- Address* allocation_top_address() { |
- return allocation_info_.top_address(); |
- } |
+ Address* allocation_top_address() { return allocation_info_.top_address(); } |
// The allocation limit address. |
Address* allocation_limit_address() { |
@@ -2732,12 +2604,9 @@ class OldSpace : public PagedSpace { |
public: |
// Creates an old space object with a given maximum capacity. |
// The constructor does not allocate pages from OS. |
- OldSpace(Heap* heap, |
- intptr_t max_capacity, |
- AllocationSpace id, |
+ OldSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id, |
Executability executable) |
- : PagedSpace(heap, max_capacity, id, executable) { |
- } |
+ : PagedSpace(heap, max_capacity, id, executable) {} |
public: |
TRACK_MEMORY("OldSpace") |
@@ -2747,9 +2616,9 @@ class OldSpace : public PagedSpace { |
// For contiguous spaces, top should be in the space (or at the end) and limit |
// should be the end of the space. |
#define DCHECK_SEMISPACE_ALLOCATION_INFO(info, space) \ |
- SLOW_DCHECK((space).page_low() <= (info).top() \ |
- && (info).top() <= (space).page_high() \ |
- && (info).limit() <= (space).page_high()) |
+ SLOW_DCHECK((space).page_low() <= (info).top() && \ |
+ (info).top() <= (space).page_high() && \ |
+ (info).limit() <= (space).page_high()) |
// ----------------------------------------------------------------------------- |
@@ -2760,8 +2629,7 @@ class MapSpace : public PagedSpace { |
// Creates a map space object with a maximum capacity. |
MapSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id) |
: PagedSpace(heap, max_capacity, id, NOT_EXECUTABLE), |
- max_map_space_pages_(kMaxMapPageIndex - 1) { |
- } |
+ max_map_space_pages_(kMaxMapPageIndex - 1) {} |
// Given an index, returns the page address. |
// TODO(1600): this limit is artifical just to keep code compilable |
@@ -2800,8 +2668,7 @@ class CellSpace : public PagedSpace { |
public: |
// Creates a property cell space object with a maximum capacity. |
CellSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id) |
- : PagedSpace(heap, max_capacity, id, NOT_EXECUTABLE) { |
- } |
+ : PagedSpace(heap, max_capacity, id, NOT_EXECUTABLE) {} |
virtual int RoundSizeDownToObjectAlignment(int size) { |
if (IsPowerOf2(Cell::kSize)) { |
@@ -2825,10 +2692,8 @@ class CellSpace : public PagedSpace { |
class PropertyCellSpace : public PagedSpace { |
public: |
// Creates a property cell space object with a maximum capacity. |
- PropertyCellSpace(Heap* heap, intptr_t max_capacity, |
- AllocationSpace id) |
- : PagedSpace(heap, max_capacity, id, NOT_EXECUTABLE) { |
- } |
+ PropertyCellSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id) |
+ : PagedSpace(heap, max_capacity, id, NOT_EXECUTABLE) {} |
virtual int RoundSizeDownToObjectAlignment(int size) { |
if (IsPowerOf2(PropertyCell::kSize)) { |
@@ -2871,34 +2736,24 @@ class LargeObjectSpace : public Space { |
// Shared implementation of AllocateRaw, AllocateRawCode and |
// AllocateRawFixedArray. |
- MUST_USE_RESULT AllocationResult AllocateRaw(int object_size, |
- Executability executable); |
+ MUST_USE_RESULT AllocationResult |
+ AllocateRaw(int object_size, Executability executable); |
// Available bytes for objects in this space. |
inline intptr_t Available(); |
- virtual intptr_t Size() { |
- return size_; |
- } |
+ virtual intptr_t Size() { return size_; } |
- virtual intptr_t SizeOfObjects() { |
- return objects_size_; |
- } |
+ virtual intptr_t SizeOfObjects() { return objects_size_; } |
- intptr_t MaximumCommittedMemory() { |
- return maximum_committed_; |
- } |
+ intptr_t MaximumCommittedMemory() { return maximum_committed_; } |
- intptr_t CommittedMemory() { |
- return Size(); |
- } |
+ intptr_t CommittedMemory() { return Size(); } |
// Approximate amount of physical memory committed for this space. |
size_t CommittedPhysicalMemory(); |
- int PageCount() { |
- return page_count_; |
- } |
+ int PageCount() { return page_count_; } |
// Finds an object for a given address, returns a Smi if it is not found. |
// The function iterates through all objects in this space, may be slow. |
@@ -2937,8 +2792,8 @@ class LargeObjectSpace : public Space { |
intptr_t maximum_committed_; |
// The head of the linked list of large object chunks. |
LargePage* first_page_; |
- intptr_t size_; // allocated bytes |
- int page_count_; // number of chunks |
+ intptr_t size_; // allocated bytes |
+ int page_count_; // number of chunks |
intptr_t objects_size_; // size of objects |
// Map MemoryChunk::kAlignment-aligned chunks to large pages covering them |
HashMap chunk_map_; |
@@ -2950,7 +2805,7 @@ class LargeObjectSpace : public Space { |
}; |
-class LargeObjectIterator: public ObjectIterator { |
+class LargeObjectIterator : public ObjectIterator { |
public: |
explicit LargeObjectIterator(LargeObjectSpace* space); |
LargeObjectIterator(LargeObjectSpace* space, HeapObjectCallback size_func); |
@@ -3014,12 +2869,7 @@ class PointerChunkIterator BASE_EMBEDDED { |
private: |
- enum State { |
- kOldPointerState, |
- kMapState, |
- kLargeObjectState, |
- kFinishedState |
- }; |
+ enum State { kOldPointerState, kMapState, kLargeObjectState, kFinishedState }; |
State state_; |
PageIterator old_pointer_iterator_; |
PageIterator map_iterator_; |
@@ -3041,8 +2891,7 @@ struct CommentStatistic { |
static const int kMaxComments = 64; |
}; |
#endif |
+} |
+} // namespace v8::internal |
- |
-} } // namespace v8::internal |
- |
-#endif // V8_SPACES_H_ |
+#endif // V8_HEAP_SPACES_H_ |