Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(568)

Side by Side Diff: src/frames.cc

Issue 1740753002: [Interpreter] Adds translation of optimized frame to bytecode offset in FrameSummary (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | test/mjsunit/mjsunit.status » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/frames.h" 5 #include "src/frames.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/ast/ast.h" 9 #include "src/ast/ast.h"
10 #include "src/ast/scopeinfo.h" 10 #include "src/ast/scopeinfo.h"
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 int jsframe_count = it.Next(); 934 int jsframe_count = it.Next();
935 935
936 // We create the summary in reverse order because the frames 936 // We create the summary in reverse order because the frames
937 // in the deoptimization translation are ordered bottom-to-top. 937 // in the deoptimization translation are ordered bottom-to-top.
938 bool is_constructor = IsConstructor(); 938 bool is_constructor = IsConstructor();
939 while (jsframe_count != 0) { 939 while (jsframe_count != 0) {
940 frame_opcode = static_cast<Translation::Opcode>(it.Next()); 940 frame_opcode = static_cast<Translation::Opcode>(it.Next());
941 if (frame_opcode == Translation::JS_FRAME || 941 if (frame_opcode == Translation::JS_FRAME ||
942 frame_opcode == Translation::INTERPRETED_FRAME) { 942 frame_opcode == Translation::INTERPRETED_FRAME) {
943 jsframe_count--; 943 jsframe_count--;
944 BailoutId const ast_id = BailoutId(it.Next()); 944 BailoutId const bailout_id = BailoutId(it.Next());
945 SharedFunctionInfo* const shared_info = 945 SharedFunctionInfo* const shared_info =
946 SharedFunctionInfo::cast(literal_array->get(it.Next())); 946 SharedFunctionInfo::cast(literal_array->get(it.Next()));
947 it.Next(); // Skip height. 947 it.Next(); // Skip height.
948 948
949 // The translation commands are ordered and the function is always 949 // The translation commands are ordered and the function is always
950 // at the first position, and the receiver is next. 950 // at the first position, and the receiver is next.
951 Translation::Opcode opcode = static_cast<Translation::Opcode>(it.Next()); 951 Translation::Opcode opcode = static_cast<Translation::Opcode>(it.Next());
952 952
953 // Get the correct function in the optimized frame. 953 // Get the correct function in the optimized frame.
954 JSFunction* function; 954 JSFunction* function;
(...skipping 26 matching lines...) Expand all
981 } 981 }
982 982
983 AbstractCode* abstract_code; 983 AbstractCode* abstract_code;
984 984
985 unsigned code_offset; 985 unsigned code_offset;
986 if (frame_opcode == Translation::JS_FRAME) { 986 if (frame_opcode == Translation::JS_FRAME) {
987 Code* code = shared_info->code(); 987 Code* code = shared_info->code();
988 DeoptimizationOutputData* const output_data = 988 DeoptimizationOutputData* const output_data =
989 DeoptimizationOutputData::cast(code->deoptimization_data()); 989 DeoptimizationOutputData::cast(code->deoptimization_data());
990 unsigned const entry = 990 unsigned const entry =
991 Deoptimizer::GetOutputInfo(output_data, ast_id, shared_info); 991 Deoptimizer::GetOutputInfo(output_data, bailout_id, shared_info);
992 code_offset = FullCodeGenerator::PcField::decode(entry); 992 code_offset = FullCodeGenerator::PcField::decode(entry);
993 abstract_code = AbstractCode::cast(code); 993 abstract_code = AbstractCode::cast(code);
994 } else { 994 } else {
995 // TODO(rmcilroy): Modify FrameSummary to enable us to summarize 995 // TODO(rmcilroy): Modify FrameSummary to enable us to summarize
996 // based on the BytecodeArray and bytecode offset. 996 // based on the BytecodeArray and bytecode offset.
rmcilroy 2016/02/25 16:46:02 Remove this TODO please
mythria 2016/02/26 13:23:39 Done.
997 DCHECK_EQ(frame_opcode, Translation::INTERPRETED_FRAME); 997 DCHECK_EQ(frame_opcode, Translation::INTERPRETED_FRAME);
998 code_offset = 0; 998 code_offset = bailout_id.ToInt();
999 abstract_code = AbstractCode::cast(shared_info->bytecode_array()); 999 abstract_code = AbstractCode::cast(shared_info->bytecode_array());
1000 } 1000 }
1001 FrameSummary summary(receiver, function, abstract_code, code_offset, 1001 FrameSummary summary(receiver, function, abstract_code, code_offset,
1002 is_constructor); 1002 is_constructor);
1003 frames->Add(summary); 1003 frames->Add(summary);
1004 is_constructor = false; 1004 is_constructor = false;
1005 } else if (frame_opcode == Translation::CONSTRUCT_STUB_FRAME) { 1005 } else if (frame_opcode == Translation::CONSTRUCT_STUB_FRAME) {
1006 // The next encountered JS_FRAME will be marked as a constructor call. 1006 // The next encountered JS_FRAME will be marked as a constructor call.
1007 it.Skip(Translation::NumberOfOperandsFor(frame_opcode)); 1007 it.Skip(Translation::NumberOfOperandsFor(frame_opcode));
1008 DCHECK(!is_constructor); 1008 DCHECK(!is_constructor);
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { 1649 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) {
1650 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); 1650 StackFrame* frame = AllocateFrameCopy(it.frame(), zone);
1651 list.Add(frame, zone); 1651 list.Add(frame, zone);
1652 } 1652 }
1653 return list.ToVector(); 1653 return list.ToVector();
1654 } 1654 }
1655 1655
1656 1656
1657 } // namespace internal 1657 } // namespace internal
1658 } // namespace v8 1658 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | test/mjsunit/mjsunit.status » ('J')

Powered by Google App Engine
This is Rietveld 408576698