| Index: src/profile-generator.h
|
| diff --git a/src/profile-generator.h b/src/profile-generator.h
|
| index 7ea168bcdafbb3f1994dfc16e9d4eaf8f11698c7..ae5a7c27b3e9dc8b12f71680e7ba3b09151ba939 100644
|
| --- a/src/profile-generator.h
|
| +++ b/src/profile-generator.h
|
| @@ -36,6 +36,21 @@ class JITLineInfoTable : public Malloced {
|
| DISALLOW_COPY_AND_ASSIGN(JITLineInfoTable);
|
| };
|
|
|
| +
|
| +struct DeoptInfo {
|
| + const char* deopt_reason;
|
| + struct Frame {
|
| + int script_id;
|
| + int position;
|
| + };
|
| + std::vector<Frame> stack;
|
| + void AddInlineFrame(int script_id, int position) {
|
| + Frame frame = {script_id, position};
|
| + stack.push_back(frame);
|
| + }
|
| +};
|
| +
|
| +
|
| class CodeEntry {
|
| public:
|
| // CodeEntry doesn't own name strings, just references them.
|
| @@ -65,11 +80,14 @@ class CodeEntry {
|
| }
|
| const char* bailout_reason() const { return bailout_reason_; }
|
|
|
| - void set_deopt_info(const char* deopt_reason, SourcePosition position) {
|
| + void set_deopt_info(const char* deopt_reason, SourcePosition position,
|
| + int pc_offset) {
|
| DCHECK(deopt_position_.IsUnknown());
|
| deopt_reason_ = deopt_reason;
|
| deopt_position_ = position;
|
| + pc_offset_ = pc_offset;
|
| }
|
| + DeoptInfo GetDeoptInfo();
|
| const char* deopt_reason() const { return deopt_reason_; }
|
| SourcePosition deopt_position() const { return deopt_position_; }
|
| bool has_deopt_info() const { return !deopt_position_.IsUnknown(); }
|
| @@ -86,6 +104,15 @@ class CodeEntry {
|
| void set_no_frame_ranges(List<OffsetRange>* ranges) {
|
| no_frame_ranges_ = ranges;
|
| }
|
| + void set_inlined_function_infos(std::vector<InlinedFunctionInfo>* infos) {
|
| + DCHECK(!inlined_function_infos_);
|
| + inlined_function_infos_ = infos;
|
| + }
|
| + std::vector<InlinedFunctionInfo>* ReleaseInlinedFunctionInfos() {
|
| + std::vector<InlinedFunctionInfo>* tmp = inlined_function_infos_;
|
| + inlined_function_infos_ = NULL;
|
| + return tmp;
|
| + }
|
|
|
| void SetBuiltinId(Builtins::Name id);
|
| Builtins::Name builtin_id() const {
|
| @@ -121,9 +148,12 @@ class CodeEntry {
|
| const char* bailout_reason_;
|
| const char* deopt_reason_;
|
| SourcePosition deopt_position_;
|
| + int pc_offset_;
|
| JITLineInfoTable* line_info_;
|
| Address instruction_start_;
|
|
|
| + std::vector<InlinedFunctionInfo>* inlined_function_infos_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(CodeEntry);
|
| };
|
|
|
| @@ -131,17 +161,6 @@ class CodeEntry {
|
| class ProfileTree;
|
|
|
| class ProfileNode {
|
| - private:
|
| - struct DeoptInfo {
|
| - DeoptInfo(const char* deopt_reason, SourcePosition deopt_position)
|
| - : deopt_reason(deopt_reason), deopt_position(deopt_position) {}
|
| - DeoptInfo(const DeoptInfo& info)
|
| - : deopt_reason(info.deopt_reason),
|
| - deopt_position(info.deopt_position) {}
|
| - const char* deopt_reason;
|
| - SourcePosition deopt_position;
|
| - };
|
| -
|
| public:
|
| inline ProfileNode(ProfileTree* tree, CodeEntry* entry);
|
|
|
| @@ -160,7 +179,7 @@ class ProfileNode {
|
| bool GetLineTicks(v8::CpuProfileNode::LineTick* entries,
|
| unsigned int length) const;
|
| void CollectDeoptInfo(CodeEntry* entry);
|
| - const List<DeoptInfo>& deopt_infos() const { return deopt_infos_; }
|
| + const std::vector<DeoptInfo>& deopt_infos() const { return deopt_infos_; }
|
|
|
| void Print(int indent);
|
|
|
| @@ -183,7 +202,8 @@ class ProfileNode {
|
| unsigned id_;
|
| HashMap line_ticks_;
|
|
|
| - List<DeoptInfo> deopt_infos_;
|
| + std::vector<DeoptInfo> deopt_infos_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ProfileNode);
|
| };
|
|
|
|
|