| 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/runtime-profiler.h" | 5 #include "src/runtime-profiler.h" |
| 6 | 6 |
| 7 #include "src/assembler.h" | 7 #include "src/assembler.h" |
| 8 #include "src/base/platform/platform.h" | 8 #include "src/base/platform/platform.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 int ticks = shared_code->profiler_ticks(); | 259 int ticks = shared_code->profiler_ticks(); |
| 260 if (ticks >= kProfilerTicksBeforeReenablingOptimization) { | 260 if (ticks >= kProfilerTicksBeforeReenablingOptimization) { |
| 261 shared_code->set_profiler_ticks(0); | 261 shared_code->set_profiler_ticks(0); |
| 262 shared->TryReenableOptimization(); | 262 shared->TryReenableOptimization(); |
| 263 } else { | 263 } else { |
| 264 shared_code->set_profiler_ticks(ticks + 1); | 264 shared_code->set_profiler_ticks(ticks + 1); |
| 265 } | 265 } |
| 266 } | 266 } |
| 267 return; | 267 return; |
| 268 } | 268 } |
| 269 if (function->IsOptimized()) return; | 269 if (frame->is_optimized()) return; |
| 270 | 270 |
| 271 int ticks = shared_code->profiler_ticks(); | 271 int ticks = shared_code->profiler_ticks(); |
| 272 | 272 |
| 273 if (ticks >= kProfilerTicksBeforeOptimization) { | 273 if (ticks >= kProfilerTicksBeforeOptimization) { |
| 274 int typeinfo, generic, total, type_percentage, generic_percentage; | 274 int typeinfo, generic, total, type_percentage, generic_percentage; |
| 275 GetICCounts(function, &typeinfo, &generic, &total, &type_percentage, | 275 GetICCounts(function, &typeinfo, &generic, &total, &type_percentage, |
| 276 &generic_percentage); | 276 &generic_percentage); |
| 277 if (type_percentage >= FLAG_type_info_threshold && | 277 if (type_percentage >= FLAG_type_info_threshold && |
| 278 generic_percentage <= FLAG_generic_ic_threshold) { | 278 generic_percentage <= FLAG_generic_ic_threshold) { |
| 279 // If this particular function hasn't had any ICs patched for enough | 279 // If this particular function hasn't had any ICs patched for enough |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 // If optimization was disabled due to many deoptimizations, | 353 // If optimization was disabled due to many deoptimizations, |
| 354 // then check if the function is hot and try to reenable optimization. | 354 // then check if the function is hot and try to reenable optimization. |
| 355 if (ticks >= kProfilerTicksBeforeReenablingOptimization) { | 355 if (ticks >= kProfilerTicksBeforeReenablingOptimization) { |
| 356 shared->set_profiler_ticks(0); | 356 shared->set_profiler_ticks(0); |
| 357 shared->TryReenableOptimization(); | 357 shared->TryReenableOptimization(); |
| 358 } | 358 } |
| 359 } | 359 } |
| 360 return; | 360 return; |
| 361 } | 361 } |
| 362 | 362 |
| 363 if (function->IsOptimized()) return; | 363 if (frame->is_optimized()) return; |
| 364 | 364 |
| 365 OptimizationReason reason = ShouldOptimizeIgnition(function, frame); | 365 OptimizationReason reason = ShouldOptimizeIgnition(function, frame); |
| 366 | 366 |
| 367 if (reason != OptimizationReason::kDoNotOptimize) { | 367 if (reason != OptimizationReason::kDoNotOptimize) { |
| 368 Optimize(function, reason); | 368 Optimize(function, reason); |
| 369 } | 369 } |
| 370 } | 370 } |
| 371 | 371 |
| 372 bool RuntimeProfiler::MaybeOSRIgnition(JSFunction* function, | 372 bool RuntimeProfiler::MaybeOSRIgnition(JSFunction* function, |
| 373 JavaScriptFrame* frame) { | 373 JavaScriptFrame* frame) { |
| 374 if (!FLAG_ignition_osr) return false; | |
| 375 | |
| 376 SharedFunctionInfo* shared = function->shared(); | 374 SharedFunctionInfo* shared = function->shared(); |
| 377 int ticks = shared->profiler_ticks(); | 375 int ticks = shared->profiler_ticks(); |
| 378 | 376 |
| 379 // TODO(rmcilroy): Also ensure we only OSR top-level code if it is smaller | 377 // TODO(rmcilroy): Also ensure we only OSR top-level code if it is smaller |
| 380 // than kMaxToplevelSourceSize. | 378 // than kMaxToplevelSourceSize. |
| 381 | 379 |
| 382 bool osr_before_baselined = function->IsMarkedForBaseline() && | 380 bool osr_before_baselined = function->IsMarkedForBaseline() && |
| 383 ShouldOptimizeIgnition(function, frame) != | 381 ShouldOptimizeIgnition(function, frame) != |
| 384 OptimizationReason::kDoNotOptimize; | 382 OptimizationReason::kDoNotOptimize; |
| 385 if (!frame->is_optimized() && | 383 if (!frame->is_optimized() && |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 } else { | 477 } else { |
| 480 DCHECK_EQ(next_tier, Compiler::OPTIMIZED); | 478 DCHECK_EQ(next_tier, Compiler::OPTIMIZED); |
| 481 MaybeOptimizeFullCodegen(function, frame, frame_count); | 479 MaybeOptimizeFullCodegen(function, frame, frame_count); |
| 482 } | 480 } |
| 483 } | 481 } |
| 484 any_ic_changed_ = false; | 482 any_ic_changed_ = false; |
| 485 } | 483 } |
| 486 | 484 |
| 487 } // namespace internal | 485 } // namespace internal |
| 488 } // namespace v8 | 486 } // namespace v8 |
| OLD | NEW |