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 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 | 436 |
437 LargePage* lop = heap_->lo_space()->first_page(); | 437 LargePage* lop = heap_->lo_space()->first_page(); |
438 while (lop->is_valid()) { | 438 while (lop->is_valid()) { |
439 SetOldSpacePageFlags(lop, true, is_compacting_); | 439 SetOldSpacePageFlags(lop, true, is_compacting_); |
440 lop = lop->next_page(); | 440 lop = lop->next_page(); |
441 } | 441 } |
442 } | 442 } |
443 | 443 |
444 | 444 |
445 bool IncrementalMarking::ShouldActivateEvenWithoutIdleNotification() { | 445 bool IncrementalMarking::ShouldActivateEvenWithoutIdleNotification() { |
| 446 #ifndef DEBUG |
| 447 static const intptr_t kActivationThreshold = 8 * MB; |
| 448 #else |
| 449 // TODO(gc) consider setting this to some low level so that some |
| 450 // debug tests run with incremental marking and some without. |
| 451 static const intptr_t kActivationThreshold = 0; |
| 452 #endif |
| 453 // Don't switch on for very small heaps. |
446 return CanBeActivated() && | 454 return CanBeActivated() && |
| 455 heap_->PromotedSpaceSizeOfObjects() > kActivationThreshold && |
447 heap_->HeapIsFullEnoughToStartIncrementalMarking( | 456 heap_->HeapIsFullEnoughToStartIncrementalMarking( |
448 heap_->old_generation_allocation_limit()); | 457 heap_->old_generation_allocation_limit()); |
449 } | 458 } |
450 | 459 |
451 | 460 |
452 bool IncrementalMarking::WasActivated() { return was_activated_; } | 461 bool IncrementalMarking::WasActivated() { return was_activated_; } |
453 | 462 |
454 | 463 |
455 bool IncrementalMarking::CanBeActivated() { | 464 bool IncrementalMarking::CanBeActivated() { |
456 #ifndef DEBUG | |
457 static const intptr_t kActivationThreshold = 8 * MB; | |
458 #else | |
459 // TODO(gc) consider setting this to some low level so that some | |
460 // debug tests run with incremental marking and some without. | |
461 static const intptr_t kActivationThreshold = 0; | |
462 #endif | |
463 // Only start incremental marking in a safe state: 1) when incremental | 465 // Only start incremental marking in a safe state: 1) when incremental |
464 // marking is turned on, 2) when we are currently not in a GC, and | 466 // marking is turned on, 2) when we are currently not in a GC, and |
465 // 3) when we are currently not serializing or deserializing the heap. | 467 // 3) when we are currently not serializing or deserializing the heap. |
466 // Don't switch on for very small heaps. | |
467 return FLAG_incremental_marking && heap_->gc_state() == Heap::NOT_IN_GC && | 468 return FLAG_incremental_marking && heap_->gc_state() == Heap::NOT_IN_GC && |
468 heap_->deserialization_complete() && | 469 heap_->deserialization_complete() && |
469 !heap_->isolate()->serializer_enabled() && | 470 !heap_->isolate()->serializer_enabled(); |
470 heap_->PromotedSpaceSizeOfObjects() > kActivationThreshold; | |
471 } | 471 } |
472 | 472 |
473 | 473 |
474 void IncrementalMarking::ActivateGeneratedStub(Code* stub) { | 474 void IncrementalMarking::ActivateGeneratedStub(Code* stub) { |
475 DCHECK(RecordWriteStub::GetMode(stub) == RecordWriteStub::STORE_BUFFER_ONLY); | 475 DCHECK(RecordWriteStub::GetMode(stub) == RecordWriteStub::STORE_BUFFER_ONLY); |
476 | 476 |
477 if (!IsMarking()) { | 477 if (!IsMarking()) { |
478 // Initially stub is generated in STORE_BUFFER_ONLY mode thus | 478 // Initially stub is generated in STORE_BUFFER_ONLY mode thus |
479 // we don't need to do anything if incremental marking is | 479 // we don't need to do anything if incremental marking is |
480 // not active. | 480 // not active. |
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1238 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { | 1238 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { |
1239 idle_marking_delay_counter_++; | 1239 idle_marking_delay_counter_++; |
1240 } | 1240 } |
1241 | 1241 |
1242 | 1242 |
1243 void IncrementalMarking::ClearIdleMarkingDelayCounter() { | 1243 void IncrementalMarking::ClearIdleMarkingDelayCounter() { |
1244 idle_marking_delay_counter_ = 0; | 1244 idle_marking_delay_counter_ = 0; |
1245 } | 1245 } |
1246 } // namespace internal | 1246 } // namespace internal |
1247 } // namespace v8 | 1247 } // namespace v8 |
OLD | NEW |