| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 MarkCompactCollector::MarkCompactCollector() : // NOLINT | 59 MarkCompactCollector::MarkCompactCollector() : // NOLINT |
| 60 #ifdef DEBUG | 60 #ifdef DEBUG |
| 61 state_(IDLE), | 61 state_(IDLE), |
| 62 #endif | 62 #endif |
| 63 sweep_precisely_(false), | 63 sweep_precisely_(false), |
| 64 reduce_memory_footprint_(false), | 64 reduce_memory_footprint_(false), |
| 65 abort_incremental_marking_(false), | 65 abort_incremental_marking_(false), |
| 66 marking_parity_(ODD_MARKING_PARITY), | 66 marking_parity_(ODD_MARKING_PARITY), |
| 67 compacting_(false), | 67 compacting_(false), |
| 68 was_marked_incrementally_(false), | 68 was_marked_incrementally_(false), |
| 69 sweeping_pending_(false), |
| 69 tracer_(NULL), | 70 tracer_(NULL), |
| 70 migration_slots_buffer_(NULL), | 71 migration_slots_buffer_(NULL), |
| 71 heap_(NULL), | 72 heap_(NULL), |
| 72 code_flusher_(NULL), | 73 code_flusher_(NULL), |
| 73 encountered_weak_maps_(NULL) { } | 74 encountered_weak_maps_(NULL) { } |
| 74 | 75 |
| 75 | 76 |
| 76 #ifdef VERIFY_HEAP | 77 #ifdef VERIFY_HEAP |
| 77 class VerifyMarkingVisitor: public ObjectVisitor { | 78 class VerifyMarkingVisitor: public ObjectVisitor { |
| 78 public: | 79 public: |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 MarkBit mark_bit = Marking::MarkBitFrom(obj); | 521 MarkBit mark_bit = Marking::MarkBitFrom(obj); |
| 521 mark_bit.Clear(); | 522 mark_bit.Clear(); |
| 522 mark_bit.Next().Clear(); | 523 mark_bit.Next().Clear(); |
| 523 Page::FromAddress(obj->address())->ResetProgressBar(); | 524 Page::FromAddress(obj->address())->ResetProgressBar(); |
| 524 Page::FromAddress(obj->address())->ResetLiveBytes(); | 525 Page::FromAddress(obj->address())->ResetLiveBytes(); |
| 525 } | 526 } |
| 526 } | 527 } |
| 527 | 528 |
| 528 | 529 |
| 529 void MarkCompactCollector::StartSweeperThreads() { | 530 void MarkCompactCollector::StartSweeperThreads() { |
| 530 SweeperThread::set_sweeping_pending(true); | 531 sweeping_pending_ = true; |
| 531 for (int i = 0; i < FLAG_sweeper_threads; i++) { | 532 for (int i = 0; i < FLAG_sweeper_threads; i++) { |
| 532 heap()->isolate()->sweeper_threads()[i]->StartSweeping(); | 533 heap()->isolate()->sweeper_threads()[i]->StartSweeping(); |
| 533 } | 534 } |
| 534 } | 535 } |
| 535 | 536 |
| 536 | 537 |
| 537 void MarkCompactCollector::WaitUntilSweepingCompleted() { | 538 void MarkCompactCollector::WaitUntilSweepingCompleted() { |
| 538 if (SweeperThread::sweeping_pending()) { | 539 if (sweeping_pending_) { |
| 539 for (int i = 0; i < FLAG_sweeper_threads; i++) { | 540 for (int i = 0; i < FLAG_sweeper_threads; i++) { |
| 540 heap()->isolate()->sweeper_threads()[i]->WaitForSweeperThread(); | 541 heap()->isolate()->sweeper_threads()[i]->WaitForSweeperThread(); |
| 541 } | 542 } |
| 542 SweeperThread::set_sweeping_pending(false); | 543 sweeping_pending_ = false; |
| 543 StealMemoryFromSweeperThreads(heap()->paged_space(OLD_DATA_SPACE)); | 544 StealMemoryFromSweeperThreads(heap()->paged_space(OLD_DATA_SPACE)); |
| 544 StealMemoryFromSweeperThreads(heap()->paged_space(OLD_POINTER_SPACE)); | 545 StealMemoryFromSweeperThreads(heap()->paged_space(OLD_POINTER_SPACE)); |
| 545 heap()->FreeQueuedChunks(); | 546 heap()->FreeQueuedChunks(); |
| 546 } | 547 } |
| 547 } | 548 } |
| 548 | 549 |
| 549 | 550 |
| 550 intptr_t MarkCompactCollector:: | 551 intptr_t MarkCompactCollector:: |
| 551 StealMemoryFromSweeperThreads(PagedSpace* space) { | 552 StealMemoryFromSweeperThreads(PagedSpace* space) { |
| 552 intptr_t freed_bytes = 0; | 553 intptr_t freed_bytes = 0; |
| 553 for (int i = 0; i < FLAG_sweeper_threads; i++) { | 554 for (int i = 0; i < FLAG_sweeper_threads; i++) { |
| 554 freed_bytes += heap()->isolate()->sweeper_threads()[i]->StealMemory(space); | 555 freed_bytes += heap()->isolate()->sweeper_threads()[i]->StealMemory(space); |
| 555 } | 556 } |
| 556 return freed_bytes; | 557 return freed_bytes; |
| 557 } | 558 } |
| 558 | 559 |
| 559 | 560 |
| 560 bool MarkCompactCollector::AreSweeperThreadsActivated() { | 561 bool MarkCompactCollector::AreSweeperThreadsActivated() { |
| 561 return heap()->isolate()->sweeper_threads() != NULL; | 562 return heap()->isolate()->sweeper_threads() != NULL; |
| 562 } | 563 } |
| 563 | 564 |
| 564 | 565 |
| 565 bool MarkCompactCollector::IsConcurrentSweepingInProgress() { | 566 bool MarkCompactCollector::IsConcurrentSweepingInProgress() { |
| 566 return SweeperThread::sweeping_pending(); | 567 return sweeping_pending_; |
| 567 } | 568 } |
| 568 | 569 |
| 569 | 570 |
| 570 void MarkCompactCollector::MarkInParallel() { | 571 void MarkCompactCollector::MarkInParallel() { |
| 571 for (int i = 0; i < FLAG_marking_threads; i++) { | 572 for (int i = 0; i < FLAG_marking_threads; i++) { |
| 572 heap()->isolate()->marking_threads()[i]->StartMarking(); | 573 heap()->isolate()->marking_threads()[i]->StartMarking(); |
| 573 } | 574 } |
| 574 } | 575 } |
| 575 | 576 |
| 576 | 577 |
| (...skipping 3492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4069 while (buffer != NULL) { | 4070 while (buffer != NULL) { |
| 4070 SlotsBuffer* next_buffer = buffer->next(); | 4071 SlotsBuffer* next_buffer = buffer->next(); |
| 4071 DeallocateBuffer(buffer); | 4072 DeallocateBuffer(buffer); |
| 4072 buffer = next_buffer; | 4073 buffer = next_buffer; |
| 4073 } | 4074 } |
| 4074 *buffer_address = NULL; | 4075 *buffer_address = NULL; |
| 4075 } | 4076 } |
| 4076 | 4077 |
| 4077 | 4078 |
| 4078 } } // namespace v8::internal | 4079 } } // namespace v8::internal |
| OLD | NEW |