v8/src/runtime-profiler.h
klaasb 3200fafa5f [interpreter] Compute and use type info percentage
Previously we would not have a total count of ICs when interpreting and
thus the check for sufficient type info would always succeed.
Also use the optimization checks for OSR while waiting for baseline
compilation and refactor the check.

BUG=v8:4280
BUG=chromium:634884

Review-Url: https://codereview.chromium.org/2360913003
Cr-Commit-Position: refs/heads/master@{#39677}
2016-09-23 15:30:31 +00:00

50 lines
1.5 KiB
C++

// Copyright 2012 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_RUNTIME_PROFILER_H_
#define V8_RUNTIME_PROFILER_H_
#include "src/allocation.h"
namespace v8 {
namespace internal {
class Isolate;
class JavaScriptFrame;
class JSFunction;
enum class OptimizationReason : uint8_t;
class RuntimeProfiler {
public:
explicit RuntimeProfiler(Isolate* isolate);
void MarkCandidatesForOptimization();
void NotifyICChanged() { any_ic_changed_ = true; }
void AttemptOnStackReplacement(JavaScriptFrame* frame,
int nesting_levels = 1);
private:
void MaybeOptimizeFullCodegen(JSFunction* function, JavaScriptFrame* frame,
int frame_count);
void MaybeBaselineIgnition(JSFunction* function, JavaScriptFrame* frame);
void MaybeOptimizeIgnition(JSFunction* function, JavaScriptFrame* frame);
// Potentially attempts OSR from ignition and returns whether no other
// optimization attempts should be made.
bool MaybeOSRIgnition(JSFunction* function, JavaScriptFrame* frame);
OptimizationReason ShouldOptimizeIgnition(JSFunction* function,
JavaScriptFrame* frame);
void Optimize(JSFunction* function, OptimizationReason reason);
void Baseline(JSFunction* function, OptimizationReason reason);
Isolate* isolate_;
bool any_ic_changed_;
};
} // namespace internal
} // namespace v8
#endif // V8_RUNTIME_PROFILER_H_