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

Side by Side Diff: src/heap/incremental-marking.cc

Issue 1352453004: Perform scavenge in idle tasks. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 5 years, 2 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/scavenge-job.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/incremental-marking.h" 5 #include "src/heap/incremental-marking.h"
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/compilation-cache.h" 8 #include "src/compilation-cache.h"
9 #include "src/conversions.h" 9 #include "src/conversions.h"
10 #include "src/heap/gc-tracer.h" 10 #include "src/heap/gc-tracer.h"
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 479
480 if (!heap_->mark_compact_collector()->sweeping_in_progress()) { 480 if (!heap_->mark_compact_collector()->sweeping_in_progress()) {
481 StartMarking(); 481 StartMarking();
482 } else { 482 } else {
483 if (FLAG_trace_incremental_marking) { 483 if (FLAG_trace_incremental_marking) {
484 PrintF("[IncrementalMarking] Start sweeping.\n"); 484 PrintF("[IncrementalMarking] Start sweeping.\n");
485 } 485 }
486 state_ = SWEEPING; 486 state_ = SWEEPING;
487 } 487 }
488 488
489 heap_->new_space()->LowerInlineAllocationLimit(kAllocatedThreshold); 489 heap_->LowerInlineAllocationLimit(kAllocatedThreshold);
490 incremental_marking_job()->Start(heap_); 490 incremental_marking_job()->Start(heap_);
491 } 491 }
492 492
493 493
494 void IncrementalMarking::StartMarking() { 494 void IncrementalMarking::StartMarking() {
495 if (FLAG_trace_incremental_marking) { 495 if (FLAG_trace_incremental_marking) {
496 PrintF("[IncrementalMarking] Start marking\n"); 496 PrintF("[IncrementalMarking] Start marking\n");
497 } 497 }
498 498
499 is_compacting_ = !FLAG_never_compact && 499 is_compacting_ = !FLAG_never_compact &&
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 context = Context::cast(context)->get(Context::NEXT_CONTEXT_LINK); 731 context = Context::cast(context)->get(Context::NEXT_CONTEXT_LINK);
732 } 732 }
733 } 733 }
734 734
735 735
736 void IncrementalMarking::Stop() { 736 void IncrementalMarking::Stop() {
737 if (IsStopped()) return; 737 if (IsStopped()) return;
738 if (FLAG_trace_incremental_marking) { 738 if (FLAG_trace_incremental_marking) {
739 PrintF("[IncrementalMarking] Stopping.\n"); 739 PrintF("[IncrementalMarking] Stopping.\n");
740 } 740 }
741 heap_->new_space()->LowerInlineAllocationLimit(0); 741 heap_->ResetInlineAllocationLimit();
742 IncrementalMarking::set_should_hurry(false); 742 IncrementalMarking::set_should_hurry(false);
743 ResetStepCounters(); 743 ResetStepCounters();
744 if (IsMarking()) { 744 if (IsMarking()) {
745 PatchIncrementalMarkingRecordWriteStubs(heap_, 745 PatchIncrementalMarkingRecordWriteStubs(heap_,
746 RecordWriteStub::STORE_BUFFER_ONLY); 746 RecordWriteStub::STORE_BUFFER_ONLY);
747 DeactivateIncrementalWriteBarrier(); 747 DeactivateIncrementalWriteBarrier();
748 748
749 if (is_compacting_) { 749 if (is_compacting_) {
750 LargeObjectIterator it(heap_->lo_space()); 750 LargeObjectIterator it(heap_->lo_space());
751 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { 751 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) {
752 Page* p = Page::FromAddress(obj->address()); 752 Page* p = Page::FromAddress(obj->address());
753 if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION)) { 753 if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION)) {
754 p->ClearFlag(Page::RESCAN_ON_EVACUATION); 754 p->ClearFlag(Page::RESCAN_ON_EVACUATION);
755 } 755 }
756 } 756 }
757 } 757 }
758 } 758 }
759 heap_->isolate()->stack_guard()->ClearGC(); 759 heap_->isolate()->stack_guard()->ClearGC();
760 state_ = STOPPED; 760 state_ = STOPPED;
761 is_compacting_ = false; 761 is_compacting_ = false;
762 } 762 }
763 763
764 764
765 void IncrementalMarking::Finalize() { 765 void IncrementalMarking::Finalize() {
766 Hurry(); 766 Hurry();
767 state_ = STOPPED; 767 state_ = STOPPED;
768 is_compacting_ = false; 768 is_compacting_ = false;
769 heap_->new_space()->LowerInlineAllocationLimit(0); 769 heap_->ResetInlineAllocationLimit();
770 IncrementalMarking::set_should_hurry(false); 770 IncrementalMarking::set_should_hurry(false);
771 ResetStepCounters(); 771 ResetStepCounters();
772 PatchIncrementalMarkingRecordWriteStubs(heap_, 772 PatchIncrementalMarkingRecordWriteStubs(heap_,
773 RecordWriteStub::STORE_BUFFER_ONLY); 773 RecordWriteStub::STORE_BUFFER_ONLY);
774 DeactivateIncrementalWriteBarrier(); 774 DeactivateIncrementalWriteBarrier();
775 DCHECK(heap_->mark_compact_collector()->marking_deque()->IsEmpty()); 775 DCHECK(heap_->mark_compact_collector()->marking_deque()->IsEmpty());
776 heap_->isolate()->stack_guard()->ClearGC(); 776 heap_->isolate()->stack_guard()->ClearGC();
777 } 777 }
778 778
779 779
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { 1016 void IncrementalMarking::IncrementIdleMarkingDelayCounter() {
1017 idle_marking_delay_counter_++; 1017 idle_marking_delay_counter_++;
1018 } 1018 }
1019 1019
1020 1020
1021 void IncrementalMarking::ClearIdleMarkingDelayCounter() { 1021 void IncrementalMarking::ClearIdleMarkingDelayCounter() {
1022 idle_marking_delay_counter_ = 0; 1022 idle_marking_delay_counter_ = 0;
1023 } 1023 }
1024 } // namespace internal 1024 } // namespace internal
1025 } // namespace v8 1025 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | src/heap/scavenge-job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698