OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 | 777 |
778 // We rely on this function not causing a GC. It is called from generated code | 778 // We rely on this function not causing a GC. It is called from generated code |
779 // without having a real stack frame in place. | 779 // without having a real stack frame in place. |
780 void Deoptimizer::DoComputeOutputFrames() { | 780 void Deoptimizer::DoComputeOutputFrames() { |
781 if (bailout_type_ == OSR) { | 781 if (bailout_type_ == OSR) { |
782 DoComputeOsrOutputFrame(); | 782 DoComputeOsrOutputFrame(); |
783 return; | 783 return; |
784 } | 784 } |
785 | 785 |
786 // Print some helpful diagnostic information. | 786 // Print some helpful diagnostic information. |
787 int64_t start = OS::Ticks(); | |
788 if (FLAG_log_timer_events && | 787 if (FLAG_log_timer_events && |
789 compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { | 788 compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { |
790 LOG(isolate(), CodeDeoptEvent(compiled_code_)); | 789 LOG(isolate(), CodeDeoptEvent(compiled_code_)); |
791 } | 790 } |
| 791 ElapsedTimer timer; |
792 if (trace_) { | 792 if (trace_) { |
| 793 timer.Start(); |
793 PrintF("[deoptimizing (DEOPT %s): begin 0x%08" V8PRIxPTR " ", | 794 PrintF("[deoptimizing (DEOPT %s): begin 0x%08" V8PRIxPTR " ", |
794 MessageFor(bailout_type_), | 795 MessageFor(bailout_type_), |
795 reinterpret_cast<intptr_t>(function_)); | 796 reinterpret_cast<intptr_t>(function_)); |
796 PrintFunctionName(); | 797 PrintFunctionName(); |
797 PrintF(" @%d, FP to SP delta: %d]\n", bailout_id_, fp_to_sp_delta_); | 798 PrintF(" @%d, FP to SP delta: %d]\n", bailout_id_, fp_to_sp_delta_); |
798 if (bailout_type_ == EAGER || bailout_type_ == SOFT) { | 799 if (bailout_type_ == EAGER || bailout_type_ == SOFT) { |
799 compiled_code_->PrintDeoptLocation(bailout_id_); | 800 compiled_code_->PrintDeoptLocation(bailout_id_); |
800 } | 801 } |
801 } | 802 } |
802 | 803 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 case Translation::LITERAL: | 864 case Translation::LITERAL: |
864 case Translation::ARGUMENTS_OBJECT: | 865 case Translation::ARGUMENTS_OBJECT: |
865 default: | 866 default: |
866 UNREACHABLE(); | 867 UNREACHABLE(); |
867 break; | 868 break; |
868 } | 869 } |
869 } | 870 } |
870 | 871 |
871 // Print some helpful diagnostic information. | 872 // Print some helpful diagnostic information. |
872 if (trace_) { | 873 if (trace_) { |
873 double ms = static_cast<double>(OS::Ticks() - start) / 1000; | 874 double ms = timer.Elapsed().InMillisecondsF(); |
874 int index = output_count_ - 1; // Index of the topmost frame. | 875 int index = output_count_ - 1; // Index of the topmost frame. |
875 JSFunction* function = output_[index]->GetFunction(); | 876 JSFunction* function = output_[index]->GetFunction(); |
876 PrintF("[deoptimizing (%s): end 0x%08" V8PRIxPTR " ", | 877 PrintF("[deoptimizing (%s): end 0x%08" V8PRIxPTR " ", |
877 MessageFor(bailout_type_), | 878 MessageFor(bailout_type_), |
878 reinterpret_cast<intptr_t>(function)); | 879 reinterpret_cast<intptr_t>(function)); |
879 PrintFunctionName(); | 880 PrintFunctionName(); |
880 PrintF(" @%d => node=%d, pc=0x%08" V8PRIxPTR ", state=%s, alignment=%s," | 881 PrintF(" @%d => node=%d, pc=0x%08" V8PRIxPTR ", state=%s, alignment=%s," |
881 " took %0.3f ms]\n", | 882 " took %0.3f ms]\n", |
882 bailout_id_, | 883 bailout_id_, |
883 node_id.ToInt(), | 884 node_id.ToInt(), |
(...skipping 2425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3309 | 3310 |
3310 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { | 3311 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { |
3311 v->VisitPointer(BitCast<Object**>(&function_)); | 3312 v->VisitPointer(BitCast<Object**>(&function_)); |
3312 v->VisitPointers(parameters_, parameters_ + parameters_count_); | 3313 v->VisitPointers(parameters_, parameters_ + parameters_count_); |
3313 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); | 3314 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); |
3314 } | 3315 } |
3315 | 3316 |
3316 #endif // ENABLE_DEBUGGER_SUPPORT | 3317 #endif // ENABLE_DEBUGGER_SUPPORT |
3317 | 3318 |
3318 } } // namespace v8::internal | 3319 } } // namespace v8::internal |
OLD | NEW |