| 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 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1108     if (reached_limit == IncrementalMarkingLimit::kSoftLimit) { |  1108     if (reached_limit == IncrementalMarkingLimit::kSoftLimit) { | 
|  1109       incremental_marking()->incremental_marking_job()->ScheduleTask(this); |  1109       incremental_marking()->incremental_marking_job()->ScheduleTask(this); | 
|  1110     } else if (reached_limit == IncrementalMarkingLimit::kHardLimit) { |  1110     } else if (reached_limit == IncrementalMarkingLimit::kHardLimit) { | 
|  1111       StartIncrementalMarking(gc_flags, |  1111       StartIncrementalMarking(gc_flags, | 
|  1112                               GarbageCollectionReason::kAllocationLimit, |  1112                               GarbageCollectionReason::kAllocationLimit, | 
|  1113                               gc_callback_flags); |  1113                               gc_callback_flags); | 
|  1114     } |  1114     } | 
|  1115   } |  1115   } | 
|  1116 } |  1116 } | 
|  1117  |  1117  | 
|  1118 void Heap::StartIdleIncrementalMarking(GarbageCollectionReason gc_reason) { |  1118 void Heap::StartIdleIncrementalMarking( | 
 |  1119     GarbageCollectionReason gc_reason, | 
 |  1120     const GCCallbackFlags gc_callback_flags) { | 
|  1119   gc_idle_time_handler_->ResetNoProgressCounter(); |  1121   gc_idle_time_handler_->ResetNoProgressCounter(); | 
|  1120   StartIncrementalMarking(kReduceMemoryFootprintMask, gc_reason, |  1122   StartIncrementalMarking(kReduceMemoryFootprintMask, gc_reason, | 
|  1121                           kNoGCCallbackFlags); |  1123                           gc_callback_flags); | 
|  1122 } |  1124 } | 
|  1123  |  1125  | 
|  1124  |  1126  | 
|  1125 void Heap::MoveElements(FixedArray* array, int dst_index, int src_index, |  1127 void Heap::MoveElements(FixedArray* array, int dst_index, int src_index, | 
|  1126                         int len) { |  1128                         int len) { | 
|  1127   if (len == 0) return; |  1129   if (len == 0) return; | 
|  1128  |  1130  | 
|  1129   DCHECK(array->map() != fixed_cow_array_map()); |  1131   DCHECK(array->map() != fixed_cow_array_map()); | 
|  1130   Object** dst_objects = array->data_start() + dst_index; |  1132   Object** dst_objects = array->data_start() + dst_index; | 
|  1131   MemMove(dst_objects, array->data_start() + src_index, len * kPointerSize); |  1133   MemMove(dst_objects, array->data_start() + src_index, len * kPointerSize); | 
| (...skipping 3093 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4225   if (incremental_marking()->IsMarking() && |  4227   if (incremental_marking()->IsMarking() && | 
|  4226       (incremental_marking()->IsReadyToOverApproximateWeakClosure() || |  4228       (incremental_marking()->IsReadyToOverApproximateWeakClosure() || | 
|  4227        (!incremental_marking()->finalize_marking_completed() && |  4229        (!incremental_marking()->finalize_marking_completed() && | 
|  4228         mark_compact_collector()->marking_deque()->IsEmpty() && |  4230         mark_compact_collector()->marking_deque()->IsEmpty() && | 
|  4229         local_embedder_heap_tracer()->ShouldFinalizeIncrementalMarking()))) { |  4231         local_embedder_heap_tracer()->ShouldFinalizeIncrementalMarking()))) { | 
|  4230     FinalizeIncrementalMarking(gc_reason); |  4232     FinalizeIncrementalMarking(gc_reason); | 
|  4231   } else if (incremental_marking()->IsComplete() || |  4233   } else if (incremental_marking()->IsComplete() || | 
|  4232              (mark_compact_collector()->marking_deque()->IsEmpty() && |  4234              (mark_compact_collector()->marking_deque()->IsEmpty() && | 
|  4233               local_embedder_heap_tracer() |  4235               local_embedder_heap_tracer() | 
|  4234                   ->ShouldFinalizeIncrementalMarking())) { |  4236                   ->ShouldFinalizeIncrementalMarking())) { | 
|  4235     CollectAllGarbage(current_gc_flags_, gc_reason); |  4237     CollectAllGarbage(current_gc_flags_, gc_reason, current_gc_callback_flags_); | 
|  4236   } |  4238   } | 
|  4237 } |  4239 } | 
|  4238  |  4240  | 
|  4239 void Heap::RegisterReservationsForBlackAllocation(Reservation* reservations) { |  4241 void Heap::RegisterReservationsForBlackAllocation(Reservation* reservations) { | 
|  4240   // TODO(hpayer): We do not have to iterate reservations on black objects |  4242   // TODO(hpayer): We do not have to iterate reservations on black objects | 
|  4241   // for marking. We just have to execute the special visiting side effect |  4243   // for marking. We just have to execute the special visiting side effect | 
|  4242   // code that adds objects to global data structures, e.g. for array buffers. |  4244   // code that adds objects to global data structures, e.g. for array buffers. | 
|  4243  |  4245  | 
|  4244   if (incremental_marking()->black_allocation()) { |  4246   if (incremental_marking()->black_allocation()) { | 
|  4245     // Iterate black objects in old space, code space, map space, and large |  4247     // Iterate black objects in old space, code space, map space, and large | 
| (...skipping 2143 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  6389     case LO_SPACE: |  6391     case LO_SPACE: | 
|  6390       return "LO_SPACE"; |  6392       return "LO_SPACE"; | 
|  6391     default: |  6393     default: | 
|  6392       UNREACHABLE(); |  6394       UNREACHABLE(); | 
|  6393   } |  6395   } | 
|  6394   return NULL; |  6396   return NULL; | 
|  6395 } |  6397 } | 
|  6396  |  6398  | 
|  6397 }  // namespace internal |  6399 }  // namespace internal | 
|  6398 }  // namespace v8 |  6400 }  // namespace v8 | 
| OLD | NEW |