| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 258390c4d5cb2b62ff079e31d90de3e5595b6fcb..6e68c365bb5aaa33ee6975aa39b825221dd300b3 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -9204,12 +9204,27 @@ void JSFunction::MarkForOptimization() {
|
| }
|
|
|
|
|
| -void JSFunction::MarkForConcurrentOptimization() {
|
| - DCHECK(is_compiled() || GetIsolate()->DebuggerHasBreakPoints());
|
| +void JSFunction::AttemptConcurrentOptimization() {
|
| + Isolate* isolate = GetIsolate();
|
| + if (!isolate->concurrent_recompilation_enabled() ||
|
| + isolate->bootstrapper()->IsActive()) {
|
| + MarkForOptimization();
|
| + return;
|
| + }
|
| + if (isolate->concurrent_osr_enabled() &&
|
| + isolate->optimizing_compiler_thread()->IsQueuedForOSR(this)) {
|
| + // Do not attempt regular recompilation if we already queued this for OSR.
|
| + // TODO(yangguo): This is necessary so that we don't install optimized
|
| + // code on a function that is already optimized, since OSR and regular
|
| + // recompilation race. This goes away as soon as OSR becomes one-shot.
|
| + return;
|
| + }
|
| + DCHECK(!IsInOptimizationQueue());
|
| + DCHECK(is_compiled() || isolate->DebuggerHasBreakPoints());
|
| DCHECK(!IsOptimized());
|
| DCHECK(shared()->allows_lazy_compilation() || code()->optimizable());
|
| DCHECK(!shared()->is_generator());
|
| - DCHECK(GetIsolate()->concurrent_recompilation_enabled());
|
| + DCHECK(isolate->concurrent_recompilation_enabled());
|
| if (FLAG_trace_concurrent_recompilation) {
|
| PrintF(" ** Marking ");
|
| ShortPrint();
|
|
|