Index: src/mark-compact.h |
diff --git a/src/mark-compact.h b/src/mark-compact.h |
index 9a0b014d633d6a069f288c9341cd9eac38531a66..1595c3bff0d260c4fc9ce909a18671e1d7cd5b7d 100644 |
--- a/src/mark-compact.h |
+++ b/src/mark-compact.h |
@@ -587,9 +587,15 @@ class MarkCompactCollector { |
enum SweeperType { |
CONSERVATIVE, |
LAZY_CONSERVATIVE, |
+ PARALLEL_CONSERVATIVE, |
PRECISE |
}; |
+ enum SweepingParallelism { |
+ SWEEP_SEQUENTIALLY, |
+ SWEEP_IN_PARALLEL |
+ }; |
+ |
#ifdef VERIFY_HEAP |
void VerifyMarkbitsAreClean(); |
static void VerifyMarkbitsAreClean(PagedSpace* space); |
@@ -598,7 +604,10 @@ class MarkCompactCollector { |
// Sweep a single page from the given space conservatively. |
// Return a number of reclaimed bytes. |
- static intptr_t SweepConservatively(PagedSpace* space, Page* p); |
+ template<SweepingParallelism type> |
+ static intptr_t SweepConservatively(PagedSpace* space, |
+ FreeList* free_list, |
+ Page* p); |
INLINE(static bool ShouldSkipEvacuationSlotRecording(Object** anchor)) { |
return Page::FromAddress(reinterpret_cast<Address>(anchor))-> |
@@ -664,6 +673,16 @@ class MarkCompactCollector { |
MarkingParity marking_parity() { return marking_parity_; } |
+ void SweepInParallel(PagedSpace* space, |
+ FreeList* private_free_list, |
+ FreeList* free_list); |
+ |
+ void WaitUntilSweepingCompleted(); |
+ |
+ intptr_t StealMemoryFromSweeperThreads(PagedSpace* space); |
+ |
+ bool AreSweeperThreadsActivated(); |
+ |
private: |
MarkCompactCollector(); |
~MarkCompactCollector(); |
@@ -672,6 +691,7 @@ class MarkCompactCollector { |
void RemoveDeadInvalidatedCode(); |
void ProcessInvalidatedCode(ObjectVisitor* visitor); |
+ void StartSweeperThreads(); |
#ifdef DEBUG |
enum CollectorState { |
@@ -836,6 +856,8 @@ class MarkCompactCollector { |
void SweepSpace(PagedSpace* space, SweeperType sweeper); |
+ void PrepareParallelSweeping(PagedSpace* space); |
Michael Starzinger
2013/01/30 11:01:19
The implementation of this method is gone, let's a
Hannes Payer (out of office)
2013/01/30 12:07:32
Done.
|
+ |
#ifdef DEBUG |
friend class MarkObjectVisitor; |
static void VisitObject(HeapObject* obj); |