| Index: src/heap.cc
|
| diff --git a/src/heap.cc b/src/heap.cc
|
| index 36d1a1e7b8fd525f63e1336e5d6831b82090f5de..41706e7fa3809887ccc2e38b9c7a232c36699bae 100644
|
| --- a/src/heap.cc
|
| +++ b/src/heap.cc
|
| @@ -709,6 +709,7 @@ int Heap::NotifyContextDisposed() {
|
| isolate()->optimizing_compiler_thread()->Flush();
|
| }
|
| flush_monomorphic_ics_ = true;
|
| + AgeInlineCaches();
|
| return ++contexts_disposed_;
|
| }
|
|
|
| @@ -1095,8 +1096,6 @@ void Heap::MarkCompact(GCTracer* tracer) {
|
|
|
| isolate_->counters()->objs_since_last_full()->Set(0);
|
|
|
| - contexts_disposed_ = 0;
|
| -
|
| flush_monomorphic_ics_ = false;
|
| }
|
|
|
| @@ -4000,13 +3999,12 @@ MaybeObject* Heap::LookupSingleCharacterStringFromCode(uint16_t code) {
|
| return result;
|
| }
|
|
|
| - Object* result;
|
| + SeqTwoByteString* result;
|
| { MaybeObject* maybe_result = AllocateRawTwoByteString(1);
|
| - if (!maybe_result->ToObject(&result)) return maybe_result;
|
| + if (!maybe_result->To<SeqTwoByteString>(&result)) return maybe_result;
|
| }
|
| - String* answer = String::cast(result);
|
| - answer->Set(0, code);
|
| - return answer;
|
| + result->SeqTwoByteStringSet(0, code);
|
| + return result;
|
| }
|
|
|
|
|
| @@ -5957,12 +5955,7 @@ bool Heap::IdleNotification(int hint) {
|
| size_factor * IncrementalMarking::kAllocatedThreshold;
|
|
|
| if (contexts_disposed_ > 0) {
|
| - if (hint >= kMaxHint) {
|
| - // The embedder is requesting a lot of GC work after context disposal,
|
| - // we age inline caches so that they don't keep objects from
|
| - // the old context alive.
|
| - AgeInlineCaches();
|
| - }
|
| + contexts_disposed_ = 0;
|
| int mark_sweep_time = Min(TimeMarkSweepWouldTakeInMs(), 1000);
|
| if (hint >= mark_sweep_time && !FLAG_expose_gc &&
|
| incremental_marking()->IsStopped()) {
|
| @@ -5971,8 +5964,8 @@ bool Heap::IdleNotification(int hint) {
|
| "idle notification: contexts disposed");
|
| } else {
|
| AdvanceIdleIncrementalMarking(step_size);
|
| - contexts_disposed_ = 0;
|
| }
|
| +
|
| // After context disposal there is likely a lot of garbage remaining, reset
|
| // the idle notification counters in order to trigger more incremental GCs
|
| // on subsequent idle notifications.
|
|
|