| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/optimizing-compiler-thread.h" | 5 #include "src/optimizing-compiler-thread.h" |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #include "src/base/atomicops.h" | 9 #include "src/base/atomicops.h" |
| 10 #include "src/full-codegen.h" | 10 #include "src/full-codegen.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 | 46 |
| 47 virtual ~CompileTask() {} | 47 virtual ~CompileTask() {} |
| 48 | 48 |
| 49 private: | 49 private: |
| 50 // v8::Task overrides. | 50 // v8::Task overrides. |
| 51 void Run() OVERRIDE { | 51 void Run() OVERRIDE { |
| 52 DisallowHeapAllocation no_allocation; | 52 DisallowHeapAllocation no_allocation; |
| 53 DisallowHandleAllocation no_handles; | 53 DisallowHandleAllocation no_handles; |
| 54 DisallowHandleDereference no_deref; | 54 DisallowHandleDereference no_deref; |
| 55 | 55 |
| 56 TimerEventScope<TimerEventRecompileConcurrent> timer(isolate_); | |
| 57 | |
| 58 OptimizingCompilerThread* thread = isolate_->optimizing_compiler_thread(); | 56 OptimizingCompilerThread* thread = isolate_->optimizing_compiler_thread(); |
| 59 | 57 |
| 60 if (thread->recompilation_delay_ != 0) { | 58 { |
| 61 base::OS::Sleep(thread->recompilation_delay_); | 59 TimerEventScope<TimerEventRecompileConcurrent> timer(isolate_); |
| 60 |
| 61 if (thread->recompilation_delay_ != 0) { |
| 62 base::OS::Sleep(thread->recompilation_delay_); |
| 63 } |
| 64 |
| 65 StopFlag flag; |
| 66 OptimizedCompileJob* job = thread->NextInput(&flag); |
| 67 |
| 68 if (flag == CONTINUE) { |
| 69 thread->CompileNext(job); |
| 70 } else { |
| 71 AllowHandleDereference allow_handle_dereference; |
| 72 if (!job->info()->is_osr()) { |
| 73 DisposeOptimizedCompileJob(job, true); |
| 74 } |
| 75 } |
| 62 } | 76 } |
| 63 | 77 |
| 64 StopFlag flag; | |
| 65 OptimizedCompileJob* job = thread->NextInput(&flag); | |
| 66 | |
| 67 if (flag == CONTINUE) { | |
| 68 thread->CompileNext(job); | |
| 69 } else { | |
| 70 AllowHandleDereference allow_handle_dereference; | |
| 71 if (!job->info()->is_osr()) { | |
| 72 DisposeOptimizedCompileJob(job, true); | |
| 73 } | |
| 74 } | |
| 75 bool signal = false; | 78 bool signal = false; |
| 76 { | 79 { |
| 77 base::LockGuard<base::RecursiveMutex> lock(&thread->task_count_mutex_); | 80 base::LockGuard<base::RecursiveMutex> lock(&thread->task_count_mutex_); |
| 78 if (--thread->task_count_ == 0) { | 81 if (--thread->task_count_ == 0) { |
| 79 if (static_cast<StopFlag>(base::Acquire_Load(&thread->stop_thread_)) == | 82 if (static_cast<StopFlag>(base::Acquire_Load(&thread->stop_thread_)) == |
| 80 FLUSH) { | 83 FLUSH) { |
| 81 base::Release_Store(&thread->stop_thread_, | 84 base::Release_Store(&thread->stop_thread_, |
| 82 static_cast<base::AtomicWord>(CONTINUE)); | 85 static_cast<base::AtomicWord>(CONTINUE)); |
| 83 signal = true; | 86 signal = true; |
| 84 } | 87 } |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 | 477 |
| 475 | 478 |
| 476 bool OptimizingCompilerThread::IsOptimizerThread() { | 479 bool OptimizingCompilerThread::IsOptimizerThread() { |
| 477 base::LockGuard<base::Mutex> lock_guard(&thread_id_mutex_); | 480 base::LockGuard<base::Mutex> lock_guard(&thread_id_mutex_); |
| 478 return ThreadId::Current().ToInteger() == thread_id_; | 481 return ThreadId::Current().ToInteger() == thread_id_; |
| 479 } | 482 } |
| 480 #endif | 483 #endif |
| 481 | 484 |
| 482 | 485 |
| 483 } } // namespace v8::internal | 486 } } // namespace v8::internal |
| OLD | NEW |