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/profiler/profile-generator.h" | 5 #include "src/profiler/profile-generator.h" |
6 | 6 |
7 #include "src/ast/scopeinfo.h" | 7 #include "src/ast/scopeinfo.h" |
8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
9 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
10 #include "src/global-handles.h" | 10 #include "src/global-handles.h" |
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 if (pc_entry) { | 612 if (pc_entry) { |
613 int pc_offset = | 613 int pc_offset = |
614 static_cast<int>(sample.pc - pc_entry->instruction_start()); | 614 static_cast<int>(sample.pc - pc_entry->instruction_start()); |
615 src_line = pc_entry->GetSourceLine(pc_offset); | 615 src_line = pc_entry->GetSourceLine(pc_offset); |
616 if (src_line == v8::CpuProfileNode::kNoLineNumberInfo) { | 616 if (src_line == v8::CpuProfileNode::kNoLineNumberInfo) { |
617 src_line = pc_entry->line_number(); | 617 src_line = pc_entry->line_number(); |
618 } | 618 } |
619 src_line_not_found = false; | 619 src_line_not_found = false; |
620 *entry++ = pc_entry; | 620 *entry++ = pc_entry; |
621 | 621 |
622 if (pc_entry->builtin_id() == Builtins::kFunctionCall || | 622 if (pc_entry->builtin_id() == Builtins::kFunctionPrototypeApply || |
623 pc_entry->builtin_id() == Builtins::kFunctionApply) { | 623 pc_entry->builtin_id() == Builtins::kFunctionPrototypeCall) { |
624 // When current function is FunctionCall or FunctionApply builtin the | 624 // When current function is either the Function.prototype.apply or the |
625 // top frame is either frame of the calling JS function or internal | 625 // Function.prototype.call builtin the top frame is either frame of |
626 // frame. In the latter case we know the caller for sure but in the | 626 // the calling JS function or internal frame. |
| 627 // In the latter case we know the caller for sure but in the |
627 // former case we don't so we simply replace the frame with | 628 // former case we don't so we simply replace the frame with |
628 // 'unresolved' entry. | 629 // 'unresolved' entry. |
629 if (sample.top_frame_type == StackFrame::JAVA_SCRIPT) { | 630 if (sample.top_frame_type == StackFrame::JAVA_SCRIPT) { |
630 *entry++ = unresolved_entry_; | 631 *entry++ = unresolved_entry_; |
631 } | 632 } |
632 } | 633 } |
633 } | 634 } |
634 } | 635 } |
635 | 636 |
636 for (const Address* stack_pos = sample.stack, | 637 for (const Address* stack_pos = sample.stack, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 case EXTERNAL: | 687 case EXTERNAL: |
687 return program_entry_; | 688 return program_entry_; |
688 case IDLE: | 689 case IDLE: |
689 return idle_entry_; | 690 return idle_entry_; |
690 default: return NULL; | 691 default: return NULL; |
691 } | 692 } |
692 } | 693 } |
693 | 694 |
694 } // namespace internal | 695 } // namespace internal |
695 } // namespace v8 | 696 } // namespace v8 |
OLD | NEW |