| 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/frames.h" | 5 #include "src/frames.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "src/v8.h" | 9 #include "src/v8.h" |
| 10 | 10 |
| (...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 return JSFunction::cast(literal_array->get(literal_id)); | 872 return JSFunction::cast(literal_array->get(literal_id)); |
| 873 } | 873 } |
| 874 | 874 |
| 875 | 875 |
| 876 void OptimizedFrame::Summarize(List<FrameSummary>* frames) { | 876 void OptimizedFrame::Summarize(List<FrameSummary>* frames) { |
| 877 DCHECK(frames->length() == 0); | 877 DCHECK(frames->length() == 0); |
| 878 DCHECK(is_optimized()); | 878 DCHECK(is_optimized()); |
| 879 | 879 |
| 880 // Delegate to JS frame in absence of turbofan deoptimization. | 880 // Delegate to JS frame in absence of turbofan deoptimization. |
| 881 // TODO(turbofan): Revisit once we support deoptimization across the board. | 881 // TODO(turbofan): Revisit once we support deoptimization across the board. |
| 882 if (LookupCode()->is_turbofanned() && !FLAG_turbo_deoptimization) { | 882 if (LookupCode()->is_turbofanned() && function()->shared()->asm_function() && |
| 883 !FLAG_turbo_asm_deoptimization) { |
| 883 return JavaScriptFrame::Summarize(frames); | 884 return JavaScriptFrame::Summarize(frames); |
| 884 } | 885 } |
| 885 | 886 |
| 886 int deopt_index = Safepoint::kNoDeoptimizationIndex; | 887 int deopt_index = Safepoint::kNoDeoptimizationIndex; |
| 887 DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); | 888 DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); |
| 888 FixedArray* literal_array = data->LiteralArray(); | 889 FixedArray* literal_array = data->LiteralArray(); |
| 889 | 890 |
| 890 // BUG(3243555): Since we don't have a lazy-deopt registered at | 891 // BUG(3243555): Since we don't have a lazy-deopt registered at |
| 891 // throw-statements, we can't use the translation at the call-site of | 892 // throw-statements, we can't use the translation at the call-site of |
| 892 // throw. An entry with no deoptimization index indicates a call-site | 893 // throw. An entry with no deoptimization index indicates a call-site |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 | 1010 |
| 1010 return DeoptimizationInputData::cast(code->deoptimization_data()); | 1011 return DeoptimizationInputData::cast(code->deoptimization_data()); |
| 1011 } | 1012 } |
| 1012 | 1013 |
| 1013 | 1014 |
| 1014 int OptimizedFrame::GetInlineCount() { | 1015 int OptimizedFrame::GetInlineCount() { |
| 1015 DCHECK(is_optimized()); | 1016 DCHECK(is_optimized()); |
| 1016 | 1017 |
| 1017 // Delegate to JS frame in absence of turbofan deoptimization. | 1018 // Delegate to JS frame in absence of turbofan deoptimization. |
| 1018 // TODO(turbofan): Revisit once we support deoptimization across the board. | 1019 // TODO(turbofan): Revisit once we support deoptimization across the board. |
| 1019 if (LookupCode()->is_turbofanned() && !FLAG_turbo_deoptimization) { | 1020 if (LookupCode()->is_turbofanned() && function()->shared()->asm_function() && |
| 1021 !FLAG_turbo_asm_deoptimization) { |
| 1020 return JavaScriptFrame::GetInlineCount(); | 1022 return JavaScriptFrame::GetInlineCount(); |
| 1021 } | 1023 } |
| 1022 | 1024 |
| 1023 int deopt_index = Safepoint::kNoDeoptimizationIndex; | 1025 int deopt_index = Safepoint::kNoDeoptimizationIndex; |
| 1024 DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); | 1026 DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); |
| 1025 | 1027 |
| 1026 TranslationIterator it(data->TranslationByteArray(), | 1028 TranslationIterator it(data->TranslationByteArray(), |
| 1027 data->TranslationIndex(deopt_index)->value()); | 1029 data->TranslationIndex(deopt_index)->value()); |
| 1028 Translation::Opcode opcode = static_cast<Translation::Opcode>(it.Next()); | 1030 Translation::Opcode opcode = static_cast<Translation::Opcode>(it.Next()); |
| 1029 DCHECK(opcode == Translation::BEGIN); | 1031 DCHECK(opcode == Translation::BEGIN); |
| 1030 USE(opcode); | 1032 USE(opcode); |
| 1031 it.Next(); // Drop frame count. | 1033 it.Next(); // Drop frame count. |
| 1032 int jsframe_count = it.Next(); | 1034 int jsframe_count = it.Next(); |
| 1033 return jsframe_count; | 1035 return jsframe_count; |
| 1034 } | 1036 } |
| 1035 | 1037 |
| 1036 | 1038 |
| 1037 void OptimizedFrame::GetFunctions(List<JSFunction*>* functions) { | 1039 void OptimizedFrame::GetFunctions(List<JSFunction*>* functions) { |
| 1038 DCHECK(functions->length() == 0); | 1040 DCHECK(functions->length() == 0); |
| 1039 DCHECK(is_optimized()); | 1041 DCHECK(is_optimized()); |
| 1040 | 1042 |
| 1041 // Delegate to JS frame in absence of turbofan deoptimization. | 1043 // Delegate to JS frame in absence of turbofan deoptimization. |
| 1042 // TODO(turbofan): Revisit once we support deoptimization across the board. | 1044 // TODO(turbofan): Revisit once we support deoptimization across the board. |
| 1043 if (LookupCode()->is_turbofanned() && !FLAG_turbo_deoptimization) { | 1045 if (LookupCode()->is_turbofanned() && function()->shared()->asm_function() && |
| 1046 !FLAG_turbo_asm_deoptimization) { |
| 1044 return JavaScriptFrame::GetFunctions(functions); | 1047 return JavaScriptFrame::GetFunctions(functions); |
| 1045 } | 1048 } |
| 1046 | 1049 |
| 1047 int deopt_index = Safepoint::kNoDeoptimizationIndex; | 1050 int deopt_index = Safepoint::kNoDeoptimizationIndex; |
| 1048 DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); | 1051 DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); |
| 1049 FixedArray* literal_array = data->LiteralArray(); | 1052 FixedArray* literal_array = data->LiteralArray(); |
| 1050 | 1053 |
| 1051 TranslationIterator it(data->TranslationByteArray(), | 1054 TranslationIterator it(data->TranslationByteArray(), |
| 1052 data->TranslationIndex(deopt_index)->value()); | 1055 data->TranslationIndex(deopt_index)->value()); |
| 1053 Translation::Opcode opcode = static_cast<Translation::Opcode>(it.Next()); | 1056 Translation::Opcode opcode = static_cast<Translation::Opcode>(it.Next()); |
| (...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1514 ZoneList<StackFrame*> list(10, zone); | 1517 ZoneList<StackFrame*> list(10, zone); |
| 1515 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { | 1518 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { |
| 1516 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); | 1519 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); |
| 1517 list.Add(frame, zone); | 1520 list.Add(frame, zone); |
| 1518 } | 1521 } |
| 1519 return list.ToVector(); | 1522 return list.ToVector(); |
| 1520 } | 1523 } |
| 1521 | 1524 |
| 1522 | 1525 |
| 1523 } } // namespace v8::internal | 1526 } } // namespace v8::internal |
| OLD | NEW |