| OLD | NEW |
| 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 8326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8337 } | 8337 } |
| 8338 function->shared()->code()->set_profiler_ticks(0); | 8338 function->shared()->code()->set_profiler_ticks(0); |
| 8339 ASSERT(FLAG_concurrent_recompilation); | 8339 ASSERT(FLAG_concurrent_recompilation); |
| 8340 if (!Compiler::RecompileConcurrent(function)) { | 8340 if (!Compiler::RecompileConcurrent(function)) { |
| 8341 function->ReplaceCode(function->shared()->code()); | 8341 function->ReplaceCode(function->shared()->code()); |
| 8342 } | 8342 } |
| 8343 return isolate->heap()->undefined_value(); | 8343 return isolate->heap()->undefined_value(); |
| 8344 } | 8344 } |
| 8345 | 8345 |
| 8346 | 8346 |
| 8347 RUNTIME_FUNCTION(MaybeObject*, Runtime_InstallRecompiledCode) { | |
| 8348 HandleScope handle_scope(isolate); | |
| 8349 ASSERT(args.length() == 1); | |
| 8350 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | |
| 8351 ASSERT(isolate->use_crankshaft() && FLAG_concurrent_recompilation); | |
| 8352 isolate->optimizing_compiler_thread()->InstallOptimizedFunctions(); | |
| 8353 return function->code(); | |
| 8354 } | |
| 8355 | |
| 8356 | |
| 8357 class ActivationsFinder : public ThreadVisitor { | 8347 class ActivationsFinder : public ThreadVisitor { |
| 8358 public: | 8348 public: |
| 8359 Code* code_; | 8349 Code* code_; |
| 8360 bool has_code_activations_; | 8350 bool has_code_activations_; |
| 8361 | 8351 |
| 8362 explicit ActivationsFinder(Code* code) | 8352 explicit ActivationsFinder(Code* code) |
| 8363 : code_(code), | 8353 : code_(code), |
| 8364 has_code_activations_(false) { } | 8354 has_code_activations_(false) { } |
| 8365 | 8355 |
| 8366 void VisitThread(Isolate* isolate, ThreadLocalTop* top) { | 8356 void VisitThread(Isolate* isolate, ThreadLocalTop* top) { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8544 } | 8534 } |
| 8545 bool sync_with_compiler_thread = true; | 8535 bool sync_with_compiler_thread = true; |
| 8546 if (args.length() == 2) { | 8536 if (args.length() == 2) { |
| 8547 CONVERT_ARG_HANDLE_CHECKED(String, sync, 1); | 8537 CONVERT_ARG_HANDLE_CHECKED(String, sync, 1); |
| 8548 if (sync->IsOneByteEqualTo(STATIC_ASCII_VECTOR("no sync"))) { | 8538 if (sync->IsOneByteEqualTo(STATIC_ASCII_VECTOR("no sync"))) { |
| 8549 sync_with_compiler_thread = false; | 8539 sync_with_compiler_thread = false; |
| 8550 } | 8540 } |
| 8551 } | 8541 } |
| 8552 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | 8542 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
| 8553 if (FLAG_concurrent_recompilation && sync_with_compiler_thread) { | 8543 if (FLAG_concurrent_recompilation && sync_with_compiler_thread) { |
| 8554 while (function->IsInRecompileQueue() || | 8544 while (function->IsInRecompileQueue()) { |
| 8555 function->IsMarkedForInstallingRecompiledCode()) { | |
| 8556 isolate->optimizing_compiler_thread()->InstallOptimizedFunctions(); | 8545 isolate->optimizing_compiler_thread()->InstallOptimizedFunctions(); |
| 8557 OS::Sleep(50); | 8546 OS::Sleep(50); |
| 8558 } | 8547 } |
| 8559 } | 8548 } |
| 8560 if (FLAG_always_opt) { | 8549 if (FLAG_always_opt) { |
| 8561 // We may have always opt, but that is more best-effort than a real | 8550 // We may have always opt, but that is more best-effort than a real |
| 8562 // promise, so we still say "no" if it is not optimized. | 8551 // promise, so we still say "no" if it is not optimized. |
| 8563 return function->IsOptimized() ? Smi::FromInt(3) // 3 == "always". | 8552 return function->IsOptimized() ? Smi::FromInt(3) // 3 == "always". |
| 8564 : Smi::FromInt(2); // 2 == "no". | 8553 : Smi::FromInt(2); // 2 == "no". |
| 8565 } | 8554 } |
| (...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9373 } | 9362 } |
| 9374 | 9363 |
| 9375 | 9364 |
| 9376 | 9365 |
| 9377 RUNTIME_FUNCTION(MaybeObject*, Runtime_StackGuard) { | 9366 RUNTIME_FUNCTION(MaybeObject*, Runtime_StackGuard) { |
| 9378 SealHandleScope shs(isolate); | 9367 SealHandleScope shs(isolate); |
| 9379 ASSERT(args.length() == 0); | 9368 ASSERT(args.length() == 0); |
| 9380 | 9369 |
| 9381 // First check if this is a real stack overflow. | 9370 // First check if this is a real stack overflow. |
| 9382 if (isolate->stack_guard()->IsStackOverflow()) { | 9371 if (isolate->stack_guard()->IsStackOverflow()) { |
| 9383 SealHandleScope shs(isolate); | |
| 9384 return isolate->StackOverflow(); | 9372 return isolate->StackOverflow(); |
| 9385 } | 9373 } |
| 9386 | 9374 |
| 9387 return Execution::HandleStackGuardInterrupt(isolate); | 9375 return Execution::HandleStackGuardInterrupt(isolate); |
| 9388 } | 9376 } |
| 9389 | 9377 |
| 9390 | 9378 |
| 9379 RUNTIME_FUNCTION(MaybeObject*, Runtime_TryInstallRecompiledCode) { |
| 9380 HandleScope scope(isolate); |
| 9381 ASSERT(args.length() == 1); |
| 9382 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
| 9383 |
| 9384 // First check if this is a real stack overflow. |
| 9385 if (isolate->stack_guard()->IsStackOverflow()) { |
| 9386 SealHandleScope shs(isolate); |
| 9387 return isolate->StackOverflow(); |
| 9388 } |
| 9389 |
| 9390 isolate->optimizing_compiler_thread()->InstallOptimizedFunctions(); |
| 9391 return (function->IsOptimized()) ? function->code() |
| 9392 : function->shared()->code(); |
| 9393 } |
| 9394 |
| 9395 |
| 9391 RUNTIME_FUNCTION(MaybeObject*, Runtime_Interrupt) { | 9396 RUNTIME_FUNCTION(MaybeObject*, Runtime_Interrupt) { |
| 9392 SealHandleScope shs(isolate); | 9397 SealHandleScope shs(isolate); |
| 9393 ASSERT(args.length() == 0); | 9398 ASSERT(args.length() == 0); |
| 9394 return Execution::HandleStackGuardInterrupt(isolate); | 9399 return Execution::HandleStackGuardInterrupt(isolate); |
| 9395 } | 9400 } |
| 9396 | 9401 |
| 9397 | 9402 |
| 9398 static int StackSize(Isolate* isolate) { | 9403 static int StackSize(Isolate* isolate) { |
| 9399 int n = 0; | 9404 int n = 0; |
| 9400 for (JavaScriptFrameIterator it(isolate); !it.done(); it.Advance()) n++; | 9405 for (JavaScriptFrameIterator it(isolate); !it.done(); it.Advance()) n++; |
| (...skipping 5360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14761 // Handle last resort GC and make sure to allow future allocations | 14766 // Handle last resort GC and make sure to allow future allocations |
| 14762 // to grow the heap without causing GCs (if possible). | 14767 // to grow the heap without causing GCs (if possible). |
| 14763 isolate->counters()->gc_last_resort_from_js()->Increment(); | 14768 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 14764 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 14769 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
| 14765 "Runtime::PerformGC"); | 14770 "Runtime::PerformGC"); |
| 14766 } | 14771 } |
| 14767 } | 14772 } |
| 14768 | 14773 |
| 14769 | 14774 |
| 14770 } } // namespace v8::internal | 14775 } } // namespace v8::internal |
| OLD | NEW |