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(); |
787 if (FLAG_log_timer_events && | 788 if (FLAG_log_timer_events && |
788 compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { | 789 compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { |
789 LOG(isolate(), CodeDeoptEvent(compiled_code_)); | 790 LOG(isolate(), CodeDeoptEvent(compiled_code_)); |
790 } | 791 } |
791 ElapsedTimer timer; | |
792 if (trace_) { | 792 if (trace_) { |
793 timer.Start(); | |
794 PrintF("[deoptimizing (DEOPT %s): begin 0x%08" V8PRIxPTR " ", | 793 PrintF("[deoptimizing (DEOPT %s): begin 0x%08" V8PRIxPTR " ", |
795 MessageFor(bailout_type_), | 794 MessageFor(bailout_type_), |
796 reinterpret_cast<intptr_t>(function_)); | 795 reinterpret_cast<intptr_t>(function_)); |
797 PrintFunctionName(); | 796 PrintFunctionName(); |
798 PrintF(" @%d, FP to SP delta: %d]\n", bailout_id_, fp_to_sp_delta_); | 797 PrintF(" @%d, FP to SP delta: %d]\n", bailout_id_, fp_to_sp_delta_); |
799 if (bailout_type_ == EAGER || bailout_type_ == SOFT) { | 798 if (bailout_type_ == EAGER || bailout_type_ == SOFT) { |
800 compiled_code_->PrintDeoptLocation(bailout_id_); | 799 compiled_code_->PrintDeoptLocation(bailout_id_); |
801 } | 800 } |
802 } | 801 } |
803 | 802 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 case Translation::LITERAL: | 863 case Translation::LITERAL: |
865 case Translation::ARGUMENTS_OBJECT: | 864 case Translation::ARGUMENTS_OBJECT: |
866 default: | 865 default: |
867 UNREACHABLE(); | 866 UNREACHABLE(); |
868 break; | 867 break; |
869 } | 868 } |
870 } | 869 } |
871 | 870 |
872 // Print some helpful diagnostic information. | 871 // Print some helpful diagnostic information. |
873 if (trace_) { | 872 if (trace_) { |
874 double ms = timer.Elapsed().InMillisecondsF(); | 873 double ms = static_cast<double>(OS::Ticks() - start) / 1000; |
875 int index = output_count_ - 1; // Index of the topmost frame. | 874 int index = output_count_ - 1; // Index of the topmost frame. |
876 JSFunction* function = output_[index]->GetFunction(); | 875 JSFunction* function = output_[index]->GetFunction(); |
877 PrintF("[deoptimizing (%s): end 0x%08" V8PRIxPTR " ", | 876 PrintF("[deoptimizing (%s): end 0x%08" V8PRIxPTR " ", |
878 MessageFor(bailout_type_), | 877 MessageFor(bailout_type_), |
879 reinterpret_cast<intptr_t>(function)); | 878 reinterpret_cast<intptr_t>(function)); |
880 PrintFunctionName(); | 879 PrintFunctionName(); |
881 PrintF(" @%d => node=%d, pc=0x%08" V8PRIxPTR ", state=%s, alignment=%s," | 880 PrintF(" @%d => node=%d, pc=0x%08" V8PRIxPTR ", state=%s, alignment=%s," |
882 " took %0.3f ms]\n", | 881 " took %0.3f ms]\n", |
883 bailout_id_, | 882 bailout_id_, |
884 node_id.ToInt(), | 883 node_id.ToInt(), |
(...skipping 2425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3310 | 3309 |
3311 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { | 3310 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { |
3312 v->VisitPointer(BitCast<Object**>(&function_)); | 3311 v->VisitPointer(BitCast<Object**>(&function_)); |
3313 v->VisitPointers(parameters_, parameters_ + parameters_count_); | 3312 v->VisitPointers(parameters_, parameters_ + parameters_count_); |
3314 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); | 3313 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); |
3315 } | 3314 } |
3316 | 3315 |
3317 #endif // ENABLE_DEBUGGER_SUPPORT | 3316 #endif // ENABLE_DEBUGGER_SUPPORT |
3318 | 3317 |
3319 } } // namespace v8::internal | 3318 } } // namespace v8::internal |
OLD | NEW |