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

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

Issue 7983045: Notify collector about lazily deoptimized code objects. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: clear lo from rescan flag, avoid ShouldSweepLazily predicate in preparation Created 9 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 446
447 heap_->CompletelyClearInstanceofCache(); 447 heap_->CompletelyClearInstanceofCache();
448 heap_->isolate()->compilation_cache()->MarkCompactPrologue(); 448 heap_->isolate()->compilation_cache()->MarkCompactPrologue();
449 449
450 if (FLAG_cleanup_code_caches_at_gc) { 450 if (FLAG_cleanup_code_caches_at_gc) {
451 // We will mark cache black with a separate pass 451 // We will mark cache black with a separate pass
452 // when we finish marking. 452 // when we finish marking.
453 MarkObjectGreyDoNotEnqueue(heap_->polymorphic_code_cache()); 453 MarkObjectGreyDoNotEnqueue(heap_->polymorphic_code_cache());
454 } 454 }
455 455
456 if (is_compacting_) {
457 // It's difficult to filter out slots recorded for large objects.
458 LargeObjectIterator it(heap_->lo_space());
459 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) {
460 if (obj->IsFixedArray() || obj->IsCode()) {
461 Page* p = Page::FromAddress(obj->address());
462 if (p->size() > static_cast<size_t>(Page::kPageSize)) {
463 p->SetFlag(Page::RESCAN_ON_EVACUATION);
464 }
465 }
466 }
467 }
468
456 // Mark strong roots grey. 469 // Mark strong roots grey.
457 IncrementalMarkingRootMarkingVisitor visitor(heap_, this); 470 IncrementalMarkingRootMarkingVisitor visitor(heap_, this);
458 heap_->IterateStrongRoots(&visitor, VISIT_ONLY_STRONG); 471 heap_->IterateStrongRoots(&visitor, VISIT_ONLY_STRONG);
459 472
460 // Ready to start incremental marking. 473 // Ready to start incremental marking.
461 if (FLAG_trace_incremental_marking) { 474 if (FLAG_trace_incremental_marking) {
462 PrintF("[IncrementalMarking] Running\n"); 475 PrintF("[IncrementalMarking] Running\n");
463 } 476 }
464 } 477 }
465 478
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 if (FLAG_trace_incremental_marking) { 611 if (FLAG_trace_incremental_marking) {
599 PrintF("[IncrementalMarking] Aborting.\n"); 612 PrintF("[IncrementalMarking] Aborting.\n");
600 } 613 }
601 heap_->new_space()->LowerInlineAllocationLimit(0); 614 heap_->new_space()->LowerInlineAllocationLimit(0);
602 IncrementalMarking::set_should_hurry(false); 615 IncrementalMarking::set_should_hurry(false);
603 ResetStepCounters(); 616 ResetStepCounters();
604 if (IsMarking()) { 617 if (IsMarking()) {
605 PatchIncrementalMarkingRecordWriteStubs(heap_, 618 PatchIncrementalMarkingRecordWriteStubs(heap_,
606 RecordWriteStub::STORE_BUFFER_ONLY); 619 RecordWriteStub::STORE_BUFFER_ONLY);
607 DeactivateIncrementalWriteBarrier(); 620 DeactivateIncrementalWriteBarrier();
621
622 if (is_compacting_) {
623 LargeObjectIterator it(heap_->lo_space());
624 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) {
625 Page* p = Page::FromAddress(obj->address());
626 if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION)) {
627 p->ClearFlag(Page::RESCAN_ON_EVACUATION);
628 }
629 }
630 }
608 } 631 }
609 heap_->isolate()->stack_guard()->Continue(GC_REQUEST); 632 heap_->isolate()->stack_guard()->Continue(GC_REQUEST);
610 state_ = STOPPED; 633 state_ = STOPPED;
611 is_compacting_ = false; 634 is_compacting_ = false;
612 } 635 }
613 636
614 637
615 void IncrementalMarking::Finalize() { 638 void IncrementalMarking::Finalize() {
616 Hurry(); 639 Hurry();
617 state_ = STOPPED; 640 state_ = STOPPED;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 bytes_rescanned_ = 0; 794 bytes_rescanned_ = 0;
772 allocation_marking_factor_ = kInitialAllocationMarkingFactor; 795 allocation_marking_factor_ = kInitialAllocationMarkingFactor;
773 } 796 }
774 797
775 798
776 int64_t IncrementalMarking::SpaceLeftInOldSpace() { 799 int64_t IncrementalMarking::SpaceLeftInOldSpace() {
777 return heap_->MaxOldGenerationSize() - heap_->PromotedSpaceSize(); 800 return heap_->MaxOldGenerationSize() - heap_->PromotedSpaceSize();
778 } 801 }
779 802
780 } } // namespace v8::internal 803 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ia32/deoptimizer-ia32.cc ('k') | src/mark-compact.h » ('j') | src/spaces.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698