| Index: src/spaces.h
|
| diff --git a/src/spaces.h b/src/spaces.h
|
| index bb7adf7133866eefe6e38b1631da5f0693ce860c..fb5ae6e1f1547d6bb83277b4ea9f77130137ee0e 100644
|
| --- a/src/spaces.h
|
| +++ b/src/spaces.h
|
| @@ -454,6 +454,18 @@ class MemoryChunk {
|
| // Return all current flags.
|
| intptr_t GetFlags() { return flags_; }
|
|
|
| + intptr_t parallel_sweeping() const {
|
| + return parallel_sweeping_;
|
| + }
|
| +
|
| + void set_parallel_sweeping(intptr_t state) {
|
| + parallel_sweeping_ = state;
|
| + }
|
| +
|
| + bool TryParallelSweeping() {
|
| + return NoBarrier_CompareAndSwap(¶llel_sweeping_, 0, 1) == 0;
|
| + }
|
| +
|
| // Manage live byte count (count of bytes known to be live,
|
| // because they are marked black).
|
| void ResetLiveBytes() {
|
| @@ -533,8 +545,8 @@ class MemoryChunk {
|
| static const size_t kWriteBarrierCounterOffset =
|
| kSlotsBufferOffset + kPointerSize + kPointerSize;
|
|
|
| - static const size_t kHeaderSize =
|
| - kWriteBarrierCounterOffset + kPointerSize + kIntSize + kIntSize;
|
| + static const size_t kHeaderSize = kWriteBarrierCounterOffset + kPointerSize +
|
| + kIntSize + kIntSize + kPointerSize;
|
|
|
| static const int kBodyOffset =
|
| CODE_POINTER_ALIGN(kHeaderSize + Bitmap::kSize);
|
| @@ -685,6 +697,8 @@ class MemoryChunk {
|
| // count highest number of bytes ever allocated on the page.
|
| int high_water_mark_;
|
|
|
| + intptr_t parallel_sweeping_;
|
| +
|
| static MemoryChunk* Initialize(Heap* heap,
|
| Address base,
|
| size_t size,
|
| @@ -1385,7 +1399,17 @@ class FreeListNode: public HeapObject {
|
| // the end element of the linked list of free memory blocks.
|
| class FreeListCategory {
|
| public:
|
| - FreeListCategory() : top_(NULL), end_(NULL), available_(0) {}
|
| + FreeListCategory() :
|
| + top_(NULL),
|
| + end_(NULL),
|
| + mutex_(OS::CreateMutex()),
|
| + available_(0) {}
|
| +
|
| + ~FreeListCategory() {
|
| + delete mutex_;
|
| + }
|
| +
|
| + intptr_t Concatenate(FreeListCategory* category);
|
|
|
| void Reset();
|
|
|
| @@ -1411,6 +1435,7 @@ class FreeListCategory {
|
| int available() const { return available_; }
|
| void set_available(int available) { available_ = available; }
|
|
|
| + Mutex* mutex() { return mutex_; }
|
| #ifdef DEBUG
|
| intptr_t SumFreeList();
|
| int FreeListLength();
|
| @@ -1419,6 +1444,7 @@ class FreeListCategory {
|
| private:
|
| FreeListNode* top_;
|
| FreeListNode* end_;
|
| + Mutex* mutex_;
|
|
|
| // Total available bytes in all blocks of this free list category.
|
| int available_;
|
| @@ -1452,6 +1478,8 @@ class FreeList BASE_EMBEDDED {
|
| public:
|
| explicit FreeList(PagedSpace* owner);
|
|
|
| + intptr_t Concatenate(FreeList* free_list);
|
| +
|
| // Clear the free list.
|
| void Reset();
|
|
|
| @@ -1499,6 +1527,11 @@ class FreeList BASE_EMBEDDED {
|
|
|
| intptr_t EvictFreeListItems(Page* p);
|
|
|
| + FreeListCategory* small_list() { return &small_list_; }
|
| + FreeListCategory* medium_list() { return &medium_list_; }
|
| + FreeListCategory* large_list() { return &large_list_; }
|
| + FreeListCategory* huge_list() { return &huge_list_; }
|
| +
|
| private:
|
| // The size range of blocks, in bytes.
|
| static const int kMinBlockSize = 3 * kPointerSize;
|
| @@ -1632,6 +1665,8 @@ class PagedSpace : public Space {
|
| free_list_.Reset();
|
| }
|
|
|
| + FreeList* free_list() { return &free_list_; }
|
| +
|
| // Set space allocation info.
|
| void SetTop(Address top, Address limit) {
|
| ASSERT(top == limit ||
|
| @@ -1736,6 +1771,10 @@ class PagedSpace : public Space {
|
| return area_size_;
|
| }
|
|
|
| + void AddToAccountingStats(intptr_t bytes) {
|
| + accounting_stats_.DeallocateBytes(bytes);
|
| + }
|
| +
|
| protected:
|
| int area_size_;
|
|
|
|
|