Chromium Code Reviews| Index: src/mark-compact.cc |
| diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
| index 2e276d1a474ac313986d1da029aa658c9bf8b479..595d6ee3ce09ddf35ae26cd6a7f7444e78c48802 100644 |
| --- a/src/mark-compact.cc |
| +++ b/src/mark-compact.cc |
| @@ -3267,12 +3267,6 @@ static int SweepPrecisely(PagedSpace* space, |
| start_time = base::OS::TimeCurrentMillis(); |
| } |
| - if (parallelism == MarkCompactCollector::SWEEP_IN_PARALLEL) { |
| - p->set_parallel_sweeping(MemoryChunk::SWEEPING_FINALIZE); |
| - } else { |
| - p->MarkSweptPrecisely(); |
| - } |
| - |
| Address free_start = p->area_start(); |
| ASSERT(reinterpret_cast<intptr_t>(free_start) % (32 * kPointerSize) == 0); |
| int offsets[16]; |
| @@ -3346,6 +3340,14 @@ static int SweepPrecisely(PagedSpace* space, |
| if (FLAG_print_cumulative_gc_stat) { |
| space->heap()->AddSweepingTime(base::OS::TimeCurrentMillis() - start_time); |
| } |
| + |
| + if (parallelism == MarkCompactCollector::SWEEP_IN_PARALLEL) { |
| + // When concurrent sweeping is active, the page will be marked after |
| + // sweeping by the main thread. |
| + p->set_parallel_sweeping(MemoryChunk::SWEEPING_FINALIZE); |
| + } else { |
| + p->MarkSweptPrecisely(); |
| + } |
| return FreeList::GuaranteedAllocatable(static_cast<int>(max_freed_bytes)); |
| } |
| @@ -3999,14 +4001,6 @@ int MarkCompactCollector::SweepConservatively(PagedSpace* space, |
| (mode == MarkCompactCollector::SWEEP_ON_MAIN_THREAD && |
| free_list == NULL)); |
| - // When parallel sweeping is active, the page will be marked after |
| - // sweeping by the main thread. |
| - if (mode == MarkCompactCollector::SWEEP_IN_PARALLEL) { |
| - p->set_parallel_sweeping(MemoryChunk::SWEEPING_FINALIZE); |
| - } else { |
| - p->MarkSweptConservatively(); |
| - } |
| - |
| intptr_t freed_bytes = 0; |
| intptr_t max_freed_bytes = 0; |
| size_t size = 0; |
| @@ -4027,6 +4021,13 @@ int MarkCompactCollector::SweepConservatively(PagedSpace* space, |
| static_cast<int>(size)); |
| max_freed_bytes = Max(freed_bytes, max_freed_bytes); |
| ASSERT_EQ(0, p->LiveBytes()); |
| + if (mode == MarkCompactCollector::SWEEP_IN_PARALLEL) { |
| + // When concurrent sweeping is active, the page will be marked after |
| + // sweeping by the main thread. |
| + p->set_parallel_sweeping(MemoryChunk::SWEEPING_FINALIZE); |
| + } else { |
| + p->MarkSweptConservatively(); |
| + } |
| return FreeList::GuaranteedAllocatable(static_cast<int>(max_freed_bytes)); |
| } |
| @@ -4084,6 +4085,13 @@ int MarkCompactCollector::SweepConservatively(PagedSpace* space, |
| } |
| p->ResetLiveBytes(); |
| + if (mode == MarkCompactCollector::SWEEP_IN_PARALLEL) { |
|
titzer
2014/07/21 19:19:48
How about we have a subroutine :)
Hannes Payer (out of office)
2014/07/21 19:22:13
The mode will be gone soon, working on it.
|
| + // When concurrent sweeping is active, the page will be marked after |
| + // sweeping by the main thread. |
| + p->set_parallel_sweeping(MemoryChunk::SWEEPING_FINALIZE); |
| + } else { |
| + p->MarkSweptConservatively(); |
| + } |
| return FreeList::GuaranteedAllocatable(static_cast<int>(max_freed_bytes)); |
| } |