Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(751)

Unified Diff: src/spaces.h

Issue 11782028: Parallel and concurrent sweeping. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/mark-compact.cc ('K') | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/spaces.h
diff --git a/src/spaces.h b/src/spaces.h
index bb7adf7133866eefe6e38b1631da5f0693ce860c..972fe3311b9500830c0b8f4a6c88c5053c0af541 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(&parallel_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_; }
Michael Starzinger 2013/01/28 16:30:18 Empty newline after the accessor.
Hannes Payer (out of office) 2013/01/30 10:11:27 Done.
#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_; }
Michael Starzinger 2013/01/28 16:30:18 Remove this accessor, it is dangerous. Since the S
Hannes Payer (out of office) 2013/01/30 10:11:27 Done.
+
// 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) {
Michael Starzinger 2013/01/28 16:30:18 Same comment as for free_list() apply to this func
Hannes Payer (out of office) 2013/01/30 10:11:27 Done.
+ accounting_stats_.DeallocateBytes(bytes);
+ }
+
protected:
int area_size_;
@@ -1785,6 +1824,9 @@ class PagedSpace : public Space {
// Slow path of AllocateRaw. This function is space-dependent.
MUST_USE_RESULT virtual HeapObject* SlowAllocateRaw(int size_in_bytes);
+
Michael Starzinger 2013/01/28 16:30:18 Drop the second empty new-lined. Needs a short com
Hannes Payer (out of office) 2013/01/30 10:11:27 Done.
+ bool EnsureSweeperProgress(intptr_t size_in_bytes);
+
friend class PageIterator;
};
« src/mark-compact.cc ('K') | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698