Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: src/optimizing-compiler-thread.cc

Issue 25237003: Remove unnecessary mutex. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/optimizing-compiler-thread.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 Barrier_AtomicIncrement(&queue_length_, static_cast<Atomic32>(-1)); 101 Barrier_AtomicIncrement(&queue_length_, static_cast<Atomic32>(-1));
102 102
103 // The function may have already been optimized by OSR. Simply continue. 103 // The function may have already been optimized by OSR. Simply continue.
104 RecompileJob::Status status = job->OptimizeGraph(); 104 RecompileJob::Status status = job->OptimizeGraph();
105 USE(status); // Prevent an unused-variable error in release mode. 105 USE(status); // Prevent an unused-variable error in release mode.
106 ASSERT(status != RecompileJob::FAILED); 106 ASSERT(status != RecompileJob::FAILED);
107 107
108 // The function may have already been optimized by OSR. Simply continue. 108 // The function may have already been optimized by OSR. Simply continue.
109 // Use a mutex to make sure that functions marked for install 109 // Use a mutex to make sure that functions marked for install
110 // are always also queued. 110 // are always also queued.
111 LockGuard<Mutex> access_queue(&queue_mutex_);
112 output_queue_.Enqueue(job); 111 output_queue_.Enqueue(job);
113 isolate_->stack_guard()->RequestInstallCode(); 112 isolate_->stack_guard()->RequestInstallCode();
114 } 113 }
115 114
116 115
117 static void DisposeRecompileJob(RecompileJob* job, 116 static void DisposeRecompileJob(RecompileJob* job,
118 bool restore_function_code) { 117 bool restore_function_code) {
119 // The recompile job is allocated in the CompilationInfo's zone. 118 // The recompile job is allocated in the CompilationInfo's zone.
120 CompilationInfo* info = job->info(); 119 CompilationInfo* info = job->info();
121 if (restore_function_code) { 120 if (restore_function_code) {
(...skipping 18 matching lines...) Expand all
140 if (!job->info()->is_osr()) { 139 if (!job->info()->is_osr()) {
141 DisposeRecompileJob(job, restore_function_code); 140 DisposeRecompileJob(job, restore_function_code);
142 } 141 }
143 } 142 }
144 Release_Store(&queue_length_, static_cast<AtomicWord>(0)); 143 Release_Store(&queue_length_, static_cast<AtomicWord>(0));
145 } 144 }
146 145
147 146
148 void OptimizingCompilerThread::FlushOutputQueue(bool restore_function_code) { 147 void OptimizingCompilerThread::FlushOutputQueue(bool restore_function_code) {
149 RecompileJob* job; 148 RecompileJob* job;
150 while (true) { 149 while (output_queue_.Dequeue(&job)) {
151 { LockGuard<Mutex> access_queue(&queue_mutex_);
152 if (!output_queue_.Dequeue(&job)) break;
153 }
154 // OSR jobs are dealt with separately. 150 // OSR jobs are dealt with separately.
155 if (!job->info()->is_osr()) { 151 if (!job->info()->is_osr()) {
156 DisposeRecompileJob(job, restore_function_code); 152 DisposeRecompileJob(job, restore_function_code);
157 } 153 }
158 } 154 }
159 } 155 }
160 156
161 157
162 void OptimizingCompilerThread::FlushOsrBuffer(bool restore_function_code) { 158 void OptimizingCompilerThread::FlushOsrBuffer(bool restore_function_code) {
163 RecompileJob* job; 159 RecompileJob* job;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 209
214 Join(); 210 Join();
215 } 211 }
216 212
217 213
218 void OptimizingCompilerThread::InstallOptimizedFunctions() { 214 void OptimizingCompilerThread::InstallOptimizedFunctions() {
219 ASSERT(!IsOptimizerThread()); 215 ASSERT(!IsOptimizerThread());
220 HandleScope handle_scope(isolate_); 216 HandleScope handle_scope(isolate_);
221 217
222 RecompileJob* job; 218 RecompileJob* job;
223 while (true) { 219 while (output_queue_.Dequeue(&job)) {
224 { LockGuard<Mutex> access_queue(&queue_mutex_);
225 if (!output_queue_.Dequeue(&job)) break;
226 }
227 CompilationInfo* info = job->info(); 220 CompilationInfo* info = job->info();
228 if (info->is_osr()) { 221 if (info->is_osr()) {
229 if (FLAG_trace_osr) { 222 if (FLAG_trace_osr) {
230 PrintF("[COSR - "); 223 PrintF("[COSR - ");
231 info->closure()->PrintName(); 224 info->closure()->PrintName();
232 PrintF(" is ready for install and entry at AST id %d]\n", 225 PrintF(" is ready for install and entry at AST id %d]\n",
233 info->osr_ast_id().ToInt()); 226 info->osr_ast_id().ToInt());
234 } 227 }
235 job->WaitForInstall(); 228 job->WaitForInstall();
236 BackEdgeTable::RemoveStackCheck(info); 229 BackEdgeTable::RemoveStackCheck(info);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 #ifdef DEBUG 328 #ifdef DEBUG
336 bool OptimizingCompilerThread::IsOptimizerThread() { 329 bool OptimizingCompilerThread::IsOptimizerThread() {
337 if (!FLAG_concurrent_recompilation) return false; 330 if (!FLAG_concurrent_recompilation) return false;
338 LockGuard<Mutex> lock_guard(&thread_id_mutex_); 331 LockGuard<Mutex> lock_guard(&thread_id_mutex_);
339 return ThreadId::Current().ToInteger() == thread_id_; 332 return ThreadId::Current().ToInteger() == thread_id_;
340 } 333 }
341 #endif 334 #endif
342 335
343 336
344 } } // namespace v8::internal 337 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/optimizing-compiler-thread.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698