Index: src/runtime-profiler.cc |
diff --git a/src/runtime-profiler.cc b/src/runtime-profiler.cc |
index 33481d45b9ab607f59fde6dd4c3e078de7cec507..568e48e412c03f4151f6fb9ae30323efd0a0182b 100644 |
--- a/src/runtime-profiler.cc |
+++ b/src/runtime-profiler.cc |
@@ -65,17 +65,11 @@ static const int kSizeLimit = 1500; |
// Number of times a function has to be seen on the stack before it is |
// optimized. |
static const int kProfilerTicksBeforeOptimization = 2; |
-// If the function optimization was disabled due to high deoptimization count, |
-// but the function is hot and has been seen on the stack this number of times, |
-// then we try to reenable optimization for this function. |
-static const int kProfilerTicksBeforeReenablingOptimization = 250; |
// If a function does not have enough type info (according to |
// FLAG_type_info_threshold), but has seen a huge number of ticks, |
// optimize it as it is. |
static const int kTicksWhenNotEnoughTypeInfo = 100; |
// We only have one byte to store the number of ticks. |
-STATIC_ASSERT(kProfilerTicksBeforeOptimization < 256); |
-STATIC_ASSERT(kProfilerTicksBeforeReenablingOptimization < 256); |
STATIC_ASSERT(kTicksWhenNotEnoughTypeInfo < 256); |
// Maximum size in bytes of generated code for a function to be optimized |
@@ -269,8 +263,7 @@ void RuntimeProfiler::OptimizeNow() { |
} |
} |
- SharedFunctionInfo* shared = function->shared(); |
- Code* shared_code = shared->code(); |
+ Code* shared_code = function->shared()->code(); |
if (shared_code->kind() != Code::FUNCTION) continue; |
if (function->IsMarkedForLazyRecompilation()) { |
@@ -280,31 +273,19 @@ void RuntimeProfiler::OptimizeNow() { |
shared_code->set_allow_osr_at_loop_nesting_level(new_nesting); |
} |
+ // Do not record non-optimizable functions. |
+ if (!function->IsOptimizable()) continue; |
+ if (function->shared()->optimization_disabled()) continue; |
+ |
// Only record top-level code on top of the execution stack and |
// avoid optimizing excessively large scripts since top-level code |
// will be executed only once. |
const int kMaxToplevelSourceSize = 10 * 1024; |
- if (shared->is_toplevel() && |
- (frame_count > 1 || shared->SourceSize() > kMaxToplevelSourceSize)) { |
- continue; |
- } |
- |
- // Do not record non-optimizable functions. |
- if (shared->optimization_disabled()) { |
- if (shared->opt_count() >= Compiler::kDefaultMaxOptCount) { |
- // If optimization was disabled due to many deoptimizations, |
- // then check if the function is hot and try to reenable optimization. |
- int ticks = shared_code->profiler_ticks(); |
- if (ticks >= kProfilerTicksBeforeReenablingOptimization) { |
- shared_code->set_profiler_ticks(0); |
- shared->TryReenableOptimization(); |
- } else { |
- shared_code->set_profiler_ticks(ticks + 1); |
- } |
- } |
+ if (function->shared()->is_toplevel() |
+ && (frame_count > 1 |
+ || function->shared()->SourceSize() > kMaxToplevelSourceSize)) { |
continue; |
} |
- if (!function->IsOptimizable()) continue; |
if (FLAG_watch_ic_patching) { |
int ticks = shared_code->profiler_ticks(); |
@@ -328,7 +309,7 @@ void RuntimeProfiler::OptimizeNow() { |
} |
} |
} else if (!any_ic_changed_ && |
- shared_code->instruction_size() < kMaxSizeEarlyOpt) { |
+ shared_code->instruction_size() < kMaxSizeEarlyOpt) { |
// If no IC was patched since the last tick and this function is very |
// small, optimistically optimize it now. |
Optimize(function, "small function"); |
@@ -338,7 +319,7 @@ void RuntimeProfiler::OptimizeNow() { |
} else { // !FLAG_watch_ic_patching |
samples[sample_count++] = function; |
- int function_size = shared->SourceSize(); |
+ int function_size = function->shared()->SourceSize(); |
int threshold_size_factor = (function_size > kSizeLimit) |
? sampler_threshold_size_factor_ |
: 1; |