| Index: src/heap.cc
|
| diff --git a/src/heap.cc b/src/heap.cc
|
| index a1cccf6f22ac4fa1bf9bdea95b7fc88facd99909..48e8b56762dfad7733eaa701597e59cb713202b6 100644
|
| --- a/src/heap.cc
|
| +++ b/src/heap.cc
|
| @@ -145,7 +145,6 @@ Heap::Heap()
|
| number_idle_notifications_(0),
|
| last_idle_notification_gc_count_(0),
|
| last_idle_notification_gc_count_init_(false),
|
| - idle_notification_will_schedule_next_gc_(false),
|
| mark_sweeps_since_idle_round_started_(0),
|
| ms_count_at_last_idle_notification_(0),
|
| gc_count_at_last_idle_gc_(0),
|
| @@ -504,11 +503,17 @@ bool Heap::CollectGarbage(AllocationSpace space,
|
| !incremental_marking()->IsStopped() &&
|
| !incremental_marking()->should_hurry() &&
|
| FLAG_incremental_marking_steps) {
|
| - if (FLAG_trace_incremental_marking) {
|
| - PrintF("[IncrementalMarking] Delaying MarkSweep.\n");
|
| + // Make progress in incremental marking.
|
| + const intptr_t kStepSizeWhenDelayedByScavenge = 1 * MB;
|
| + incremental_marking()->Step(kStepSizeWhenDelayedByScavenge,
|
| + IncrementalMarking::NO_GC_VIA_STACK_GUARD);
|
| + if (!incremental_marking()->IsComplete()) {
|
| + if (FLAG_trace_incremental_marking) {
|
| + PrintF("[IncrementalMarking] Delaying MarkSweep.\n");
|
| + }
|
| + collector = SCAVENGER;
|
| + collector_reason = "incremental marking delaying mark-sweep";
|
| }
|
| - collector = SCAVENGER;
|
| - collector_reason = "incremental marking delaying mark-sweep";
|
| }
|
|
|
| bool next_gc_likely_to_collect_more = false;
|
| @@ -1953,7 +1958,7 @@ MaybeObject* Heap::AllocateTypeFeedbackInfo() {
|
| if (!maybe_info->To(&info)) return maybe_info;
|
| }
|
| info->set_ic_total_count(0);
|
| - info->set_ic_with_typeinfo_count(0);
|
| + info->set_ic_with_type_info_count(0);
|
| info->set_type_feedback_cells(TypeFeedbackCells::cast(empty_fixed_array()),
|
| SKIP_WRITE_BARRIER);
|
| return info;
|
| @@ -2897,9 +2902,9 @@ MaybeObject* Heap::AllocateSharedFunctionInfo(Object* name) {
|
| share->set_inferred_name(empty_string(), SKIP_WRITE_BARRIER);
|
| share->set_initial_map(undefined_value(), SKIP_WRITE_BARRIER);
|
| share->set_this_property_assignments(undefined_value(), SKIP_WRITE_BARRIER);
|
| - share->set_deopt_counter(FLAG_deopt_every_n_times);
|
| - share->set_profiler_ticks(0);
|
| share->set_ast_node_count(0);
|
| + share->set_deopt_counter(FLAG_deopt_every_n_times);
|
| + share->set_ic_age(0);
|
|
|
| // Set integer fields (smi or int, depending on the architecture).
|
| share->set_length(0);
|
| @@ -4817,10 +4822,8 @@ void Heap::EnsureHeapIsIterable() {
|
|
|
|
|
| void Heap::AdvanceIdleIncrementalMarking(intptr_t step_size) {
|
| - // This flag prevents incremental marking from requesting GC via stack guard
|
| - idle_notification_will_schedule_next_gc_ = true;
|
| - incremental_marking()->Step(step_size);
|
| - idle_notification_will_schedule_next_gc_ = false;
|
| + incremental_marking()->Step(step_size,
|
| + IncrementalMarking::NO_GC_VIA_STACK_GUARD);
|
|
|
| if (incremental_marking()->IsComplete()) {
|
| bool uncommit = false;
|
|
|