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

Side by Side Diff: src/heap/mark-compact.cc

Issue 1925563003: Revert of [heap] Uncommit pooled pages concurrently (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « src/heap/heap.cc ('k') | src/heap/spaces.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/heap/mark-compact.h" 5 #include "src/heap/mark-compact.h"
6 6
7 #include "src/base/atomicops.h" 7 #include "src/base/atomicops.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/base/sys-info.h" 9 #include "src/base/sys-info.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 841
842 DCHECK(!FLAG_never_compact || !FLAG_always_compact); 842 DCHECK(!FLAG_never_compact || !FLAG_always_compact);
843 843
844 if (sweeping_in_progress()) { 844 if (sweeping_in_progress()) {
845 // Instead of waiting we could also abort the sweeper threads here. 845 // Instead of waiting we could also abort the sweeper threads here.
846 EnsureSweepingCompleted(); 846 EnsureSweepingCompleted();
847 } 847 }
848 848
849 // If concurrent unmapping tasks are still running, we should wait for 849 // If concurrent unmapping tasks are still running, we should wait for
850 // them here. 850 // them here.
851 heap()->memory_allocator()->unmapper()->WaitUntilCompleted(); 851 heap()->WaitUntilUnmappingOfFreeChunksCompleted();
852 852
853 // Clear marking bits if incremental marking is aborted. 853 // Clear marking bits if incremental marking is aborted.
854 if (was_marked_incrementally_ && heap_->ShouldAbortIncrementalMarking()) { 854 if (was_marked_incrementally_ && heap_->ShouldAbortIncrementalMarking()) {
855 heap()->incremental_marking()->Stop(); 855 heap()->incremental_marking()->Stop();
856 ClearMarkbits(); 856 ClearMarkbits();
857 AbortWeakCollections(); 857 AbortWeakCollections();
858 AbortWeakCells(); 858 AbortWeakCells();
859 AbortTransitionArrays(); 859 AbortTransitionArrays();
860 AbortCompaction(); 860 AbortCompaction();
861 was_marked_incrementally_ = false; 861 was_marked_incrementally_ = false;
(...skipping 2672 matching lines...) Expand 10 before | Expand all | Expand 10 after
3534 EvacuateNewSpaceEpilogue(); 3534 EvacuateNewSpaceEpilogue();
3535 heap()->new_space()->set_age_mark(heap()->new_space()->top()); 3535 heap()->new_space()->set_age_mark(heap()->new_space()->top());
3536 } 3536 }
3537 3537
3538 UpdatePointersAfterEvacuation(); 3538 UpdatePointersAfterEvacuation();
3539 3539
3540 // Give pages that are queued to be freed back to the OS. Note that filtering 3540 // Give pages that are queued to be freed back to the OS. Note that filtering
3541 // slots only handles old space (for unboxed doubles), and thus map space can 3541 // slots only handles old space (for unboxed doubles), and thus map space can
3542 // still contain stale pointers. We only free the chunks after pointer updates 3542 // still contain stale pointers. We only free the chunks after pointer updates
3543 // to still have access to page headers. 3543 // to still have access to page headers.
3544 heap()->memory_allocator()->unmapper()->FreeQueuedChunks(); 3544 heap()->FreeQueuedChunks();
3545 3545
3546 { 3546 {
3547 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE_CLEAN_UP); 3547 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE_CLEAN_UP);
3548 3548
3549 for (Page* p : evacuation_candidates_) { 3549 for (Page* p : evacuation_candidates_) {
3550 // Important: skip list should be cleared only after roots were updated 3550 // Important: skip list should be cleared only after roots were updated
3551 // because root iteration traverses the stack and might have to find 3551 // because root iteration traverses the stack and might have to find
3552 // code objects from non-updated pc pointing into evacuation candidate. 3552 // code objects from non-updated pc pointing into evacuation candidate.
3553 SkipList* list = p->skip_list(); 3553 SkipList* list = p->skip_list();
3554 if (list != NULL) list->Clear(); 3554 if (list != NULL) list->Clear();
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
3722 void MarkCompactCollector::ReleaseEvacuationCandidates() { 3722 void MarkCompactCollector::ReleaseEvacuationCandidates() {
3723 for (Page* p : evacuation_candidates_) { 3723 for (Page* p : evacuation_candidates_) {
3724 if (!p->IsEvacuationCandidate()) continue; 3724 if (!p->IsEvacuationCandidate()) continue;
3725 PagedSpace* space = static_cast<PagedSpace*>(p->owner()); 3725 PagedSpace* space = static_cast<PagedSpace*>(p->owner());
3726 p->ResetLiveBytes(); 3726 p->ResetLiveBytes();
3727 CHECK(p->SweepingDone()); 3727 CHECK(p->SweepingDone());
3728 space->ReleasePage(p); 3728 space->ReleasePage(p);
3729 } 3729 }
3730 evacuation_candidates_.Rewind(0); 3730 evacuation_candidates_.Rewind(0);
3731 compacting_ = false; 3731 compacting_ = false;
3732 heap()->memory_allocator()->unmapper()->FreeQueuedChunks(); 3732 heap()->FreeQueuedChunks();
3733 } 3733 }
3734 3734
3735 int MarkCompactCollector::Sweeper::ParallelSweepSpace(AllocationSpace identity, 3735 int MarkCompactCollector::Sweeper::ParallelSweepSpace(AllocationSpace identity,
3736 int required_freed_bytes, 3736 int required_freed_bytes,
3737 int max_pages) { 3737 int max_pages) {
3738 int max_freed = 0; 3738 int max_freed = 0;
3739 int pages_freed = 0; 3739 int pages_freed = 0;
3740 Page* page = nullptr; 3740 Page* page = nullptr;
3741 while ((page = GetSweepingPageSafe(identity)) != nullptr) { 3741 while ((page = GetSweepingPageSafe(identity)) != nullptr) {
3742 int freed = ParallelSweepPage(page, heap_->paged_space(identity)); 3742 int freed = ParallelSweepPage(page, heap_->paged_space(identity));
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
3948 MarkBit mark_bit = Marking::MarkBitFrom(host); 3948 MarkBit mark_bit = Marking::MarkBitFrom(host);
3949 if (Marking::IsBlack(mark_bit)) { 3949 if (Marking::IsBlack(mark_bit)) {
3950 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host); 3950 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host);
3951 RecordRelocSlot(host, &rinfo, target); 3951 RecordRelocSlot(host, &rinfo, target);
3952 } 3952 }
3953 } 3953 }
3954 } 3954 }
3955 3955
3956 } // namespace internal 3956 } // namespace internal
3957 } // namespace v8 3957 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | src/heap/spaces.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698