| Index: src/execution.cc
|
| diff --git a/src/execution.cc b/src/execution.cc
|
| index 2613c20f0f4ed1b23e47e211fa8839ca7a22af58..512de4cb736aa53b524ee1ec2fd15a2c768013a1 100644
|
| --- a/src/execution.cc
|
| +++ b/src/execution.cc
|
| @@ -446,6 +446,25 @@ void StackGuard::RequestRuntimeProfilerTick() {
|
| }
|
|
|
|
|
| +void StackGuard::RequestCodeReadyEvent() {
|
| + ASSERT(FLAG_parallel_recompilation);
|
| + if (ExecutionAccess::TryLock(isolate_)) {
|
| + thread_local_.interrupt_flags_ |= CODE_READY;
|
| + if (thread_local_.postpone_interrupts_nesting_ == 0) {
|
| + thread_local_.jslimit_ = thread_local_.climit_ = kInterruptLimit;
|
| + isolate_->heap()->SetStackLimits();
|
| + }
|
| + ExecutionAccess::Unlock(isolate_);
|
| + }
|
| +}
|
| +
|
| +
|
| +bool StackGuard::IsCodeReadyEvent() {
|
| + ExecutionAccess access(isolate_);
|
| + return (thread_local_.interrupt_flags_ & CODE_READY) != 0;
|
| +}
|
| +
|
| +
|
| bool StackGuard::IsGCRequest() {
|
| ExecutionAccess access(isolate_);
|
| return (thread_local_.interrupt_flags_ & GC_REQUEST) != 0;
|
| @@ -911,6 +930,17 @@ MaybeObject* Execution::HandleStackGuardInterrupt(Isolate* isolate) {
|
| stack_guard->Continue(GC_REQUEST);
|
| }
|
|
|
| + if (stack_guard->IsCodeReadyEvent()) {
|
| + ASSERT(FLAG_parallel_recompilation);
|
| + if (FLAG_trace_parallel_recompilation) {
|
| + PrintF(" ** CODE_READY event received.\n");
|
| + }
|
| + stack_guard->Continue(CODE_READY);
|
| + }
|
| + if (!stack_guard->IsTerminateExecution()) {
|
| + isolate->optimizing_compiler_thread()->InstallOptimizedFunctions();
|
| + }
|
| +
|
| isolate->counters()->stack_interrupts()->Increment();
|
| // If FLAG_count_based_interrupts, every interrupt is a profiler interrupt.
|
| if (FLAG_count_based_interrupts ||
|
|
|