| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 9933e9c61497c8d3307ea4643cc96b65bc0eca07..7e1d8b6b5a6d0066276c0870023973ab230c0622 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -9202,12 +9202,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();
|
|
|