| OLD | NEW |
| 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-idle-time-handler.h" | 10 #include "src/heap/gc-idle-time-handler.h" |
| (...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 PrintF("[IncrementalMarking] Start marking\n"); | 550 PrintF("[IncrementalMarking] Start marking\n"); |
| 551 } | 551 } |
| 552 | 552 |
| 553 is_compacting_ = !FLAG_never_compact && | 553 is_compacting_ = !FLAG_never_compact && |
| 554 heap_->mark_compact_collector()->StartCompaction( | 554 heap_->mark_compact_collector()->StartCompaction( |
| 555 MarkCompactCollector::INCREMENTAL_COMPACTION); | 555 MarkCompactCollector::INCREMENTAL_COMPACTION); |
| 556 | 556 |
| 557 state_ = MARKING; | 557 state_ = MARKING; |
| 558 | 558 |
| 559 if (heap_->UsingEmbedderHeapTracer()) { | 559 if (heap_->UsingEmbedderHeapTracer()) { |
| 560 TRACE_GC(heap()->tracer(), |
| 561 GCTracer::Scope::MC_INCREMENTAL_WRAPPER_PROLOGUE); |
| 560 heap_->mark_compact_collector()->embedder_heap_tracer()->TracePrologue(); | 562 heap_->mark_compact_collector()->embedder_heap_tracer()->TracePrologue(); |
| 561 } | 563 } |
| 562 | 564 |
| 563 RecordWriteStub::Mode mode = is_compacting_ | 565 RecordWriteStub::Mode mode = is_compacting_ |
| 564 ? RecordWriteStub::INCREMENTAL_COMPACTION | 566 ? RecordWriteStub::INCREMENTAL_COMPACTION |
| 565 : RecordWriteStub::INCREMENTAL; | 567 : RecordWriteStub::INCREMENTAL; |
| 566 | 568 |
| 567 PatchIncrementalMarkingRecordWriteStubs(heap_, mode); | 569 PatchIncrementalMarkingRecordWriteStubs(heap_, mode); |
| 568 | 570 |
| 569 heap_->mark_compact_collector()->EnsureMarkingDequeIsCommittedAndInitialize( | 571 heap_->mark_compact_collector()->EnsureMarkingDequeIsCommittedAndInitialize( |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 void IncrementalMarking::MarkRoots() { | 617 void IncrementalMarking::MarkRoots() { |
| 616 DCHECK(!finalize_marking_completed_); | 618 DCHECK(!finalize_marking_completed_); |
| 617 DCHECK(IsMarking()); | 619 DCHECK(IsMarking()); |
| 618 | 620 |
| 619 IncrementalMarkingRootMarkingVisitor visitor(this); | 621 IncrementalMarkingRootMarkingVisitor visitor(this); |
| 620 heap_->IterateStrongRoots(&visitor, VISIT_ONLY_STRONG); | 622 heap_->IterateStrongRoots(&visitor, VISIT_ONLY_STRONG); |
| 621 } | 623 } |
| 622 | 624 |
| 623 | 625 |
| 624 void IncrementalMarking::MarkObjectGroups() { | 626 void IncrementalMarking::MarkObjectGroups() { |
| 627 TRACE_GC(heap_->tracer(), |
| 628 GCTracer::Scope::MC_INCREMENTAL_FINALIZE_OBJECT_GROUPING); |
| 629 |
| 625 DCHECK(!heap_->UsingEmbedderHeapTracer()); | 630 DCHECK(!heap_->UsingEmbedderHeapTracer()); |
| 626 DCHECK(!finalize_marking_completed_); | 631 DCHECK(!finalize_marking_completed_); |
| 627 DCHECK(IsMarking()); | 632 DCHECK(IsMarking()); |
| 628 | 633 |
| 629 IncrementalMarkingRootMarkingVisitor visitor(this); | 634 IncrementalMarkingRootMarkingVisitor visitor(this); |
| 630 heap_->mark_compact_collector()->MarkImplicitRefGroups(&MarkGrey); | 635 heap_->mark_compact_collector()->MarkImplicitRefGroups(&MarkGrey); |
| 631 heap_->isolate()->global_handles()->IterateObjectGroups( | 636 heap_->isolate()->global_handles()->IterateObjectGroups( |
| 632 &visitor, &MarkCompactCollector::IsUnmarkedHeapObjectWithHeap); | 637 &visitor, &MarkCompactCollector::IsUnmarkedHeapObjectWithHeap); |
| 633 heap_->isolate()->global_handles()->RemoveImplicitRefGroups(); | 638 heap_->isolate()->global_handles()->RemoveImplicitRefGroups(); |
| 634 heap_->isolate()->global_handles()->RemoveObjectGroups(); | 639 heap_->isolate()->global_handles()->RemoveObjectGroups(); |
| (...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1196 | 1201 |
| 1197 // TODO(hpayer): Do not account for sweeping finalization while marking. | 1202 // TODO(hpayer): Do not account for sweeping finalization while marking. |
| 1198 if (state_ == SWEEPING) { | 1203 if (state_ == SWEEPING) { |
| 1199 FinalizeSweeping(); | 1204 FinalizeSweeping(); |
| 1200 } | 1205 } |
| 1201 | 1206 |
| 1202 if (state_ == MARKING) { | 1207 if (state_ == MARKING) { |
| 1203 bytes_processed = ProcessMarkingDeque(bytes_to_process); | 1208 bytes_processed = ProcessMarkingDeque(bytes_to_process); |
| 1204 if (FLAG_incremental_marking_wrappers && | 1209 if (FLAG_incremental_marking_wrappers && |
| 1205 heap_->UsingEmbedderHeapTracer()) { | 1210 heap_->UsingEmbedderHeapTracer()) { |
| 1211 TRACE_GC(heap()->tracer(), |
| 1212 GCTracer::Scope::MC_INCREMENTAL_WRAPPER_TRACING); |
| 1206 // This currently marks through all registered wrappers and does not | 1213 // This currently marks through all registered wrappers and does not |
| 1207 // respect bytes_to_process. | 1214 // respect bytes_to_process. |
| 1208 // TODO(hpayer): Integrate incremental marking of wrappers into | 1215 // TODO(hpayer): Integrate incremental marking of wrappers into |
| 1209 // bytes_to_process logic. | 1216 // bytes_to_process logic. |
| 1210 heap_->mark_compact_collector() | 1217 heap_->mark_compact_collector() |
| 1211 ->RegisterWrappersWithEmbedderHeapTracer(); | 1218 ->RegisterWrappersWithEmbedderHeapTracer(); |
| 1212 heap_->mark_compact_collector()->embedder_heap_tracer()->AdvanceTracing( | 1219 heap_->mark_compact_collector()->embedder_heap_tracer()->AdvanceTracing( |
| 1213 0, | 1220 0, |
| 1214 EmbedderHeapTracer::AdvanceTracingActions( | 1221 EmbedderHeapTracer::AdvanceTracingActions( |
| 1215 EmbedderHeapTracer::ForceCompletionAction::FORCE_COMPLETION)); | 1222 EmbedderHeapTracer::ForceCompletionAction::FORCE_COMPLETION)); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1271 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { | 1278 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { |
| 1272 idle_marking_delay_counter_++; | 1279 idle_marking_delay_counter_++; |
| 1273 } | 1280 } |
| 1274 | 1281 |
| 1275 | 1282 |
| 1276 void IncrementalMarking::ClearIdleMarkingDelayCounter() { | 1283 void IncrementalMarking::ClearIdleMarkingDelayCounter() { |
| 1277 idle_marking_delay_counter_ = 0; | 1284 idle_marking_delay_counter_ = 0; |
| 1278 } | 1285 } |
| 1279 } // namespace internal | 1286 } // namespace internal |
| 1280 } // namespace v8 | 1287 } // namespace v8 |
| OLD | NEW |