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

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

Issue 23842004: Pass PC offset into runtime when compiling for OSR. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments. Created 7 years, 3 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
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 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 osr_attempts_++; 227 osr_attempts_++;
228 } 228 }
229 input_queue_.Enqueue(optimizing_compiler); 229 input_queue_.Enqueue(optimizing_compiler);
230 input_queue_semaphore_.Signal(); 230 input_queue_semaphore_.Signal();
231 } 231 }
232 232
233 233
234 OptimizingCompiler* OptimizingCompilerThread::FindReadyOSRCandidate( 234 OptimizingCompiler* OptimizingCompilerThread::FindReadyOSRCandidate(
235 Handle<JSFunction> function, uint32_t osr_pc_offset) { 235 Handle<JSFunction> function, uint32_t osr_pc_offset) {
236 ASSERT(!IsOptimizerThread()); 236 ASSERT(!IsOptimizerThread());
237 LockGuard<Mutex> access_osr_lists(&osr_list_mutex_); 237 OptimizingCompiler* result = NULL;
238 for (int i = 0; i < ready_for_osr_.length(); i++) { 238 { LockGuard<Mutex> access_osr_lists(&osr_list_mutex_);
239 if (ready_for_osr_[i]->info()->HasSameOsrEntry(function, osr_pc_offset)) { 239 for (int i = 0; i < ready_for_osr_.length(); i++) {
240 osr_hits_++; 240 if (ready_for_osr_[i]->info()->HasSameOsrEntry(function, osr_pc_offset)) {
241 return ready_for_osr_.Remove(i); 241 osr_hits_++;
242 result = ready_for_osr_.Remove(i);
243 break;
244 }
242 } 245 }
243 } 246 }
244 return NULL; 247 RemoveStaleOSRCandidates();
248 return result;
245 } 249 }
246 250
247 251
248 bool OptimizingCompilerThread::IsQueuedForOSR(Handle<JSFunction> function, 252 bool OptimizingCompilerThread::IsQueuedForOSR(Handle<JSFunction> function,
249 uint32_t osr_pc_offset) { 253 uint32_t osr_pc_offset) {
250 ASSERT(!IsOptimizerThread()); 254 ASSERT(!IsOptimizerThread());
251 LockGuard<Mutex> access_osr_lists(&osr_list_mutex_); 255 LockGuard<Mutex> access_osr_lists(&osr_list_mutex_);
252 for (int i = 0; i < osr_candidates_.length(); i++) { 256 for (int i = 0; i < osr_candidates_.length(); i++) {
253 if (osr_candidates_[i]->info()->HasSameOsrEntry(function, osr_pc_offset)) { 257 if (osr_candidates_[i]->info()->HasSameOsrEntry(function, osr_pc_offset)) {
254 return true; 258 return true;
255 } 259 }
256 } 260 }
257 return false; 261 return false;
258 } 262 }
259 263
260 264
265 bool OptimizingCompilerThread::IsQueuedForOSR(JSFunction* function) {
266 ASSERT(!IsOptimizerThread());
267 LockGuard<Mutex> access_osr_lists(&osr_list_mutex_);
268 for (int i = 0; i < osr_candidates_.length(); i++) {
269 if (*osr_candidates_[i]->info()->closure() == function) {
270 return true;
271 }
272 }
273 return false;
274 }
275
276
261 void OptimizingCompilerThread::RemoveStaleOSRCandidates(int limit) { 277 void OptimizingCompilerThread::RemoveStaleOSRCandidates(int limit) {
262 ASSERT(!IsOptimizerThread()); 278 ASSERT(!IsOptimizerThread());
263 LockGuard<Mutex> access_osr_lists(&osr_list_mutex_); 279 LockGuard<Mutex> access_osr_lists(&osr_list_mutex_);
264 while (ready_for_osr_.length() > limit) { 280 while (ready_for_osr_.length() > limit) {
265 OptimizingCompiler* compiler = ready_for_osr_.Remove(0); 281 OptimizingCompiler* compiler = ready_for_osr_.Remove(0);
266 CompilationInfo* throw_away = compiler->info(); 282 CompilationInfo* throw_away = compiler->info();
267 if (FLAG_trace_osr) { 283 if (FLAG_trace_osr) {
268 PrintF("[COSR - Discarded "); 284 PrintF("[COSR - Discarded ");
269 throw_away->closure()->PrintName(); 285 throw_away->closure()->PrintName();
270 PrintF(", AST id %d]\n", 286 PrintF(", AST id %d]\n",
271 throw_away->osr_ast_id().ToInt()); 287 throw_away->osr_ast_id().ToInt());
272 } 288 }
273 delete throw_away; 289 delete throw_away;
274 } 290 }
275 } 291 }
276 292
277 293
278 #ifdef DEBUG 294 #ifdef DEBUG
279 bool OptimizingCompilerThread::IsOptimizerThread() { 295 bool OptimizingCompilerThread::IsOptimizerThread() {
280 if (!FLAG_concurrent_recompilation) return false; 296 if (!FLAG_concurrent_recompilation) return false;
281 LockGuard<Mutex> lock_guard(&thread_id_mutex_); 297 LockGuard<Mutex> lock_guard(&thread_id_mutex_);
282 return ThreadId::Current().ToInteger() == thread_id_; 298 return ThreadId::Current().ToInteger() == thread_id_;
283 } 299 }
284 #endif 300 #endif
285 301
286 302
287 } } // namespace v8::internal 303 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/optimizing-compiler-thread.h ('k') | src/runtime.h » ('j') | src/runtime-profiler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698