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/heap.h" | 5 #include "src/heap/heap.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/assembler-inl.h" | 9 #include "src/assembler-inl.h" |
10 #include "src/ast/context-slot-cache.h" | 10 #include "src/ast/context-slot-cache.h" |
(...skipping 1338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1349 // GC. | 1349 // GC. |
1350 old_generation_allocation_counter_at_last_gc_ += | 1350 old_generation_allocation_counter_at_last_gc_ += |
1351 static_cast<size_t>(promoted_objects_size_); | 1351 static_cast<size_t>(promoted_objects_size_); |
1352 old_generation_size_at_last_gc_ = PromotedSpaceSizeOfObjects(); | 1352 old_generation_size_at_last_gc_ = PromotedSpaceSizeOfObjects(); |
1353 break; | 1353 break; |
1354 case MINOR_MARK_COMPACTOR: | 1354 case MINOR_MARK_COMPACTOR: |
1355 MinorMarkCompact(); | 1355 MinorMarkCompact(); |
1356 break; | 1356 break; |
1357 case SCAVENGER: | 1357 case SCAVENGER: |
1358 if ((fast_promotion_mode_ && | 1358 if ((fast_promotion_mode_ && |
1359 CanExpandOldGeneration(new_space()->Size())) || | 1359 CanExpandOldGeneration(new_space()->Size()))) { |
1360 concurrent_marking_->IsTaskPending()) { | |
1361 tracer()->NotifyYoungGenerationHandling( | 1360 tracer()->NotifyYoungGenerationHandling( |
1362 YoungGenerationHandling::kFastPromotionDuringScavenge); | 1361 YoungGenerationHandling::kFastPromotionDuringScavenge); |
1363 EvacuateYoungGeneration(); | 1362 EvacuateYoungGeneration(); |
1364 } else { | 1363 } else { |
1365 tracer()->NotifyYoungGenerationHandling( | 1364 tracer()->NotifyYoungGenerationHandling( |
1366 YoungGenerationHandling::kRegularScavenge); | 1365 YoungGenerationHandling::kRegularScavenge); |
1367 | 1366 |
1368 Scavenge(); | 1367 Scavenge(); |
1369 } | 1368 } |
1370 break; | 1369 break; |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1626 } | 1625 } |
1627 return NULL; | 1626 return NULL; |
1628 } | 1627 } |
1629 | 1628 |
1630 private: | 1629 private: |
1631 Heap* heap_; | 1630 Heap* heap_; |
1632 }; | 1631 }; |
1633 | 1632 |
1634 void Heap::EvacuateYoungGeneration() { | 1633 void Heap::EvacuateYoungGeneration() { |
1635 TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_EVACUATE); | 1634 TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_EVACUATE); |
| 1635 base::LockGuard<base::Mutex> guard(relocation_mutex()); |
1636 if (!FLAG_concurrent_marking) { | 1636 if (!FLAG_concurrent_marking) { |
1637 DCHECK(fast_promotion_mode_); | 1637 DCHECK(fast_promotion_mode_); |
1638 DCHECK(CanExpandOldGeneration(new_space()->Size())); | 1638 DCHECK(CanExpandOldGeneration(new_space()->Size())); |
1639 } | 1639 } |
1640 | 1640 |
1641 mark_compact_collector()->sweeper().EnsureNewSpaceCompleted(); | 1641 mark_compact_collector()->sweeper().EnsureNewSpaceCompleted(); |
1642 | 1642 |
1643 SetGCState(SCAVENGE); | 1643 SetGCState(SCAVENGE); |
1644 LOG(isolate_, ResourceEvent("scavenge", "begin")); | 1644 LOG(isolate_, ResourceEvent("scavenge", "begin")); |
1645 | 1645 |
(...skipping 21 matching lines...) Expand all Loading... |
1667 IncrementYoungSurvivorsCounter(new_space()->Size()); | 1667 IncrementYoungSurvivorsCounter(new_space()->Size()); |
1668 IncrementPromotedObjectsSize(new_space()->Size()); | 1668 IncrementPromotedObjectsSize(new_space()->Size()); |
1669 IncrementSemiSpaceCopiedObjectSize(0); | 1669 IncrementSemiSpaceCopiedObjectSize(0); |
1670 | 1670 |
1671 LOG(isolate_, ResourceEvent("scavenge", "end")); | 1671 LOG(isolate_, ResourceEvent("scavenge", "end")); |
1672 SetGCState(NOT_IN_GC); | 1672 SetGCState(NOT_IN_GC); |
1673 } | 1673 } |
1674 | 1674 |
1675 void Heap::Scavenge() { | 1675 void Heap::Scavenge() { |
1676 TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_SCAVENGE); | 1676 TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_SCAVENGE); |
1677 RelocationLock relocation_lock(this); | 1677 base::LockGuard<base::Mutex> guard(relocation_mutex()); |
1678 // There are soft limits in the allocation code, designed to trigger a mark | 1678 // There are soft limits in the allocation code, designed to trigger a mark |
1679 // sweep collection by failing allocations. There is no sense in trying to | 1679 // sweep collection by failing allocations. There is no sense in trying to |
1680 // trigger one during scavenge: scavenges allocation should always succeed. | 1680 // trigger one during scavenge: scavenges allocation should always succeed. |
1681 AlwaysAllocateScope scope(isolate()); | 1681 AlwaysAllocateScope scope(isolate()); |
1682 | 1682 |
1683 // Bump-pointer allocations done during scavenge are not real allocations. | 1683 // Bump-pointer allocations done during scavenge are not real allocations. |
1684 // Pause the inline allocation steps. | 1684 // Pause the inline allocation steps. |
1685 PauseAllocationObserversScope pause_observers(this); | 1685 PauseAllocationObserversScope pause_observers(this); |
1686 | 1686 |
1687 IncrementalMarking::PauseBlackAllocationScope pause_black_allocation( | 1687 IncrementalMarking::PauseBlackAllocationScope pause_black_allocation( |
(...skipping 4702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6390 case LO_SPACE: | 6390 case LO_SPACE: |
6391 return "LO_SPACE"; | 6391 return "LO_SPACE"; |
6392 default: | 6392 default: |
6393 UNREACHABLE(); | 6393 UNREACHABLE(); |
6394 } | 6394 } |
6395 return NULL; | 6395 return NULL; |
6396 } | 6396 } |
6397 | 6397 |
6398 } // namespace internal | 6398 } // namespace internal |
6399 } // namespace v8 | 6399 } // namespace v8 |
OLD | NEW |