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/mark-compact.h" | 5 #include "src/heap/mark-compact.h" |
6 | 6 |
7 #include "src/base/atomicops.h" | 7 #include "src/base/atomicops.h" |
8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
9 #include "src/base/sys-info.h" | 9 #include "src/base/sys-info.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 heap()->code_space()->EvictEvacuationCandidatesFromLinearAllocationArea(); | 290 heap()->code_space()->EvictEvacuationCandidatesFromLinearAllocationArea(); |
291 | 291 |
292 compacting_ = evacuation_candidates_.length() > 0; | 292 compacting_ = evacuation_candidates_.length() > 0; |
293 } | 293 } |
294 | 294 |
295 return compacting_; | 295 return compacting_; |
296 } | 296 } |
297 | 297 |
298 | 298 |
299 void MarkCompactCollector::ClearInvalidStoreAndSlotsBufferEntries() { | 299 void MarkCompactCollector::ClearInvalidStoreAndSlotsBufferEntries() { |
300 heap_->store_buffer()->ClearInvalidStoreBufferEntries(); | 300 { |
| 301 GCTracer::Scope gc_scope(heap()->tracer(), |
| 302 GCTracer::Scope::MC_STORE_BUFFER_CLEAR); |
| 303 heap_->store_buffer()->ClearInvalidStoreBufferEntries(); |
| 304 } |
301 | 305 |
302 int number_of_pages = evacuation_candidates_.length(); | 306 { |
303 for (int i = 0; i < number_of_pages; i++) { | 307 GCTracer::Scope gc_scope(heap()->tracer(), |
304 Page* p = evacuation_candidates_[i]; | 308 GCTracer::Scope::MC_SLOTS_BUFFER_CLEAR); |
305 SlotsBuffer::RemoveInvalidSlots(heap_, p->slots_buffer()); | 309 int number_of_pages = evacuation_candidates_.length(); |
| 310 for (int i = 0; i < number_of_pages; i++) { |
| 311 Page* p = evacuation_candidates_[i]; |
| 312 SlotsBuffer::RemoveInvalidSlots(heap_, p->slots_buffer()); |
| 313 } |
306 } | 314 } |
307 } | 315 } |
308 | 316 |
309 | 317 |
310 #ifdef VERIFY_HEAP | 318 #ifdef VERIFY_HEAP |
311 static void VerifyValidSlotsBufferEntries(Heap* heap, PagedSpace* space) { | 319 static void VerifyValidSlotsBufferEntries(Heap* heap, PagedSpace* space) { |
312 PageIterator it(space); | 320 PageIterator it(space); |
313 while (it.has_next()) { | 321 while (it.has_next()) { |
314 Page* p = it.next(); | 322 Page* p = it.next(); |
315 SlotsBuffer::VerifySlots(heap, p->slots_buffer()); | 323 SlotsBuffer::VerifySlots(heap, p->slots_buffer()); |
(...skipping 4296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4612 MarkBit mark_bit = Marking::MarkBitFrom(host); | 4620 MarkBit mark_bit = Marking::MarkBitFrom(host); |
4613 if (Marking::IsBlack(mark_bit)) { | 4621 if (Marking::IsBlack(mark_bit)) { |
4614 RelocInfo rinfo(pc, RelocInfo::CODE_TARGET, 0, host); | 4622 RelocInfo rinfo(pc, RelocInfo::CODE_TARGET, 0, host); |
4615 RecordRelocSlot(&rinfo, target); | 4623 RecordRelocSlot(&rinfo, target); |
4616 } | 4624 } |
4617 } | 4625 } |
4618 } | 4626 } |
4619 | 4627 |
4620 } // namespace internal | 4628 } // namespace internal |
4621 } // namespace v8 | 4629 } // namespace v8 |
OLD | NEW |