| Index: src/mark-compact.cc
|
| diff --git a/src/mark-compact.cc b/src/mark-compact.cc
|
| index 641293399e6297d6824c2d07ee1d0ecf6cddd91b..24730c6c0a5db4a56d379772c0079989dbd0a729 100644
|
| --- a/src/mark-compact.cc
|
| +++ b/src/mark-compact.cc
|
| @@ -926,47 +926,6 @@ void CodeFlusher::ProcessSharedFunctionInfoCandidates() {
|
| }
|
|
|
|
|
| -void CodeFlusher::EvictCandidate(JSFunction* function) {
|
| - ASSERT(!function->next_function_link()->IsUndefined());
|
| - Object* undefined = isolate_->heap()->undefined_value();
|
| -
|
| - JSFunction* candidate = jsfunction_candidates_head_;
|
| - JSFunction* next_candidate;
|
| - if (candidate == function) {
|
| - next_candidate = GetNextCandidate(function);
|
| - jsfunction_candidates_head_ = next_candidate;
|
| - ClearNextCandidate(function, undefined);
|
| - } else {
|
| - while (candidate != NULL) {
|
| - next_candidate = GetNextCandidate(candidate);
|
| -
|
| - if (next_candidate == function) {
|
| - next_candidate = GetNextCandidate(function);
|
| - SetNextCandidate(candidate, next_candidate);
|
| - ClearNextCandidate(function, undefined);
|
| - }
|
| -
|
| - candidate = next_candidate;
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -void CodeFlusher::IteratePointersToFromSpace(ObjectVisitor* v) {
|
| - Heap* heap = isolate_->heap();
|
| -
|
| - JSFunction** slot = &jsfunction_candidates_head_;
|
| - JSFunction* candidate = jsfunction_candidates_head_;
|
| - while (candidate != NULL) {
|
| - if (heap->InFromSpace(candidate)) {
|
| - v->VisitPointer(reinterpret_cast<Object**>(slot));
|
| - }
|
| - candidate = GetNextCandidate(*slot);
|
| - slot = GetNextCandidateSlot(*slot);
|
| - }
|
| -}
|
| -
|
| -
|
| MarkCompactCollector::~MarkCompactCollector() {
|
| if (code_flusher_ != NULL) {
|
| delete code_flusher_;
|
| @@ -1471,8 +1430,21 @@ void MarkCompactCollector::PrepareThreadForCodeFlushing(Isolate* isolate,
|
| void MarkCompactCollector::PrepareForCodeFlushing() {
|
| ASSERT(heap() == Isolate::Current()->heap());
|
|
|
| - // If code flushing is disabled, there is no need to prepare for it.
|
| - if (!is_code_flushing_enabled()) return;
|
| + // TODO(1609) Currently incremental marker does not support code flushing.
|
| + if (!FLAG_flush_code || was_marked_incrementally_) {
|
| + EnableCodeFlushing(false);
|
| + return;
|
| + }
|
| +
|
| +#ifdef ENABLE_DEBUGGER_SUPPORT
|
| + if (heap()->isolate()->debug()->IsLoaded() ||
|
| + heap()->isolate()->debug()->has_break_points()) {
|
| + EnableCodeFlushing(false);
|
| + return;
|
| + }
|
| +#endif
|
| +
|
| + EnableCodeFlushing(true);
|
|
|
| // Ensure that empty descriptor array is marked. Method MarkDescriptorArray
|
| // relies on it being marked before any other descriptor array.
|
| @@ -2033,6 +2005,9 @@ void MarkCompactCollector::AfterMarking() {
|
| // Flush code from collected candidates.
|
| if (is_code_flushing_enabled()) {
|
| code_flusher_->ProcessCandidates();
|
| + // TODO(1609) Currently incremental marker does not support code flushing,
|
| + // we need to disable it before incremental marking steps for next cycle.
|
| + EnableCodeFlushing(false);
|
| }
|
|
|
| if (!FLAG_watch_ic_patching) {
|
|
|