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

Side by Side Diff: src/deoptimizer.cc

Issue 256653004: Always include debugger support. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Makefile Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « src/deoptimizer.h ('k') | src/execution.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 NOT_EXECUTABLE, 49 NOT_EXECUTABLE,
50 #else 50 #else
51 EXECUTABLE, 51 EXECUTABLE,
52 #endif 52 #endif
53 NULL); 53 NULL);
54 } 54 }
55 55
56 56
57 DeoptimizerData::DeoptimizerData(MemoryAllocator* allocator) 57 DeoptimizerData::DeoptimizerData(MemoryAllocator* allocator)
58 : allocator_(allocator), 58 : allocator_(allocator),
59 #ifdef ENABLE_DEBUGGER_SUPPORT
60 deoptimized_frame_info_(NULL), 59 deoptimized_frame_info_(NULL),
61 #endif
62 current_(NULL) { 60 current_(NULL) {
63 for (int i = 0; i < Deoptimizer::kBailoutTypesWithCodeEntry; ++i) { 61 for (int i = 0; i < Deoptimizer::kBailoutTypesWithCodeEntry; ++i) {
64 deopt_entry_code_entries_[i] = -1; 62 deopt_entry_code_entries_[i] = -1;
65 deopt_entry_code_[i] = AllocateCodeChunk(allocator); 63 deopt_entry_code_[i] = AllocateCodeChunk(allocator);
66 } 64 }
67 } 65 }
68 66
69 67
70 DeoptimizerData::~DeoptimizerData() { 68 DeoptimizerData::~DeoptimizerData() {
71 for (int i = 0; i < Deoptimizer::kBailoutTypesWithCodeEntry; ++i) { 69 for (int i = 0; i < Deoptimizer::kBailoutTypesWithCodeEntry; ++i) {
72 allocator_->Free(deopt_entry_code_[i]); 70 allocator_->Free(deopt_entry_code_[i]);
73 deopt_entry_code_[i] = NULL; 71 deopt_entry_code_[i] = NULL;
74 } 72 }
75 } 73 }
76 74
77 75
78 #ifdef ENABLE_DEBUGGER_SUPPORT
79 void DeoptimizerData::Iterate(ObjectVisitor* v) { 76 void DeoptimizerData::Iterate(ObjectVisitor* v) {
80 if (deoptimized_frame_info_ != NULL) { 77 if (deoptimized_frame_info_ != NULL) {
81 deoptimized_frame_info_->Iterate(v); 78 deoptimized_frame_info_->Iterate(v);
82 } 79 }
83 } 80 }
84 #endif
85 81
86 82
87 Code* Deoptimizer::FindDeoptimizingCode(Address addr) { 83 Code* Deoptimizer::FindDeoptimizingCode(Address addr) {
88 if (function_->IsHeapObject()) { 84 if (function_->IsHeapObject()) {
89 // Search all deoptimizing code in the native context of the function. 85 // Search all deoptimizing code in the native context of the function.
90 Context* native_context = function_->context()->native_context(); 86 Context* native_context = function_->context()->native_context();
91 Object* element = native_context->DeoptimizedCodeListHead(); 87 Object* element = native_context->DeoptimizedCodeListHead();
92 while (!element->IsUndefined()) { 88 while (!element->IsUndefined()) {
93 Code* code = Code::cast(element); 89 Code* code = Code::cast(element);
94 ASSERT(code->kind() == Code::OPTIMIZED_FUNCTION); 90 ASSERT(code->kind() == Code::OPTIMIZED_FUNCTION);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 if (frame->GetFrameType() == StackFrame::JAVA_SCRIPT) { 149 if (frame->GetFrameType() == StackFrame::JAVA_SCRIPT) {
154 jsframe_index--; 150 jsframe_index--;
155 } 151 }
156 frame_index++; 152 frame_index++;
157 } 153 }
158 154
159 return frame_index - 1; 155 return frame_index - 1;
160 } 156 }
161 157
162 158
163 #ifdef ENABLE_DEBUGGER_SUPPORT
164 DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame( 159 DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame(
165 JavaScriptFrame* frame, 160 JavaScriptFrame* frame,
166 int jsframe_index, 161 int jsframe_index,
167 Isolate* isolate) { 162 Isolate* isolate) {
168 ASSERT(frame->is_optimized()); 163 ASSERT(frame->is_optimized());
169 ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == NULL); 164 ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == NULL);
170 165
171 // Get the function and code from the frame. 166 // Get the function and code from the frame.
172 JSFunction* function = frame->function(); 167 JSFunction* function = frame->function();
173 Code* code = frame->LookupCode(); 168 Code* code = frame->LookupCode();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 return info; 243 return info;
249 } 244 }
250 245
251 246
252 void Deoptimizer::DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info, 247 void Deoptimizer::DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info,
253 Isolate* isolate) { 248 Isolate* isolate) {
254 ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == info); 249 ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == info);
255 delete info; 250 delete info;
256 isolate->deoptimizer_data()->deoptimized_frame_info_ = NULL; 251 isolate->deoptimizer_data()->deoptimized_frame_info_ = NULL;
257 } 252 }
258 #endif 253
259 254
260 void Deoptimizer::GenerateDeoptimizationEntries(MacroAssembler* masm, 255 void Deoptimizer::GenerateDeoptimizationEntries(MacroAssembler* masm,
261 int count, 256 int count,
262 BailoutType type) { 257 BailoutType type) {
263 TableEntryGenerator generator(masm, type, count); 258 TableEntryGenerator generator(masm, type, count);
264 generator.Generate(); 259 generator.Generate();
265 } 260 }
266 261
267 262
268 void Deoptimizer::VisitAllOptimizedFunctionsForContext( 263 void Deoptimizer::VisitAllOptimizedFunctionsForContext(
(...skipping 1741 matching lines...) Expand 10 before | Expand all | Expand 10 after
2010 ASSERT(materialization_object_index_ == materialized_objects_->length()); 2005 ASSERT(materialization_object_index_ == materialized_objects_->length());
2011 ASSERT(materialization_value_index_ == materialized_values_->length()); 2006 ASSERT(materialization_value_index_ == materialized_values_->length());
2012 } 2007 }
2013 2008
2014 if (prev_materialized_count_ > 0) { 2009 if (prev_materialized_count_ > 0) {
2015 materialized_store->Remove(stack_fp_); 2010 materialized_store->Remove(stack_fp_);
2016 } 2011 }
2017 } 2012 }
2018 2013
2019 2014
2020 #ifdef ENABLE_DEBUGGER_SUPPORT
2021 void Deoptimizer::MaterializeHeapNumbersForDebuggerInspectableFrame( 2015 void Deoptimizer::MaterializeHeapNumbersForDebuggerInspectableFrame(
2022 Address parameters_top, 2016 Address parameters_top,
2023 uint32_t parameters_size, 2017 uint32_t parameters_size,
2024 Address expressions_top, 2018 Address expressions_top,
2025 uint32_t expressions_size, 2019 uint32_t expressions_size,
2026 DeoptimizedFrameInfo* info) { 2020 DeoptimizedFrameInfo* info) {
2027 ASSERT_EQ(DEBUGGER, bailout_type_); 2021 ASSERT_EQ(DEBUGGER, bailout_type_);
2028 Address parameters_bottom = parameters_top + parameters_size; 2022 Address parameters_bottom = parameters_top + parameters_size;
2029 Address expressions_bottom = expressions_top + expressions_size; 2023 Address expressions_bottom = expressions_top + expressions_size;
2030 for (int i = 0; i < deferred_heap_numbers_.length(); i++) { 2024 for (int i = 0; i < deferred_heap_numbers_.length(); i++) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2063 reinterpret_cast<void*>(*num), 2057 reinterpret_cast<void*>(*num),
2064 d.value(), 2058 d.value(),
2065 d.destination(), 2059 d.destination(),
2066 index); 2060 index);
2067 } 2061 }
2068 2062
2069 info->SetExpression(index, *num); 2063 info->SetExpression(index, *num);
2070 } 2064 }
2071 } 2065 }
2072 } 2066 }
2073 #endif
2074 2067
2075 2068
2076 static const char* TraceValueType(bool is_smi) { 2069 static const char* TraceValueType(bool is_smi) {
2077 if (is_smi) { 2070 if (is_smi) {
2078 return "smi"; 2071 return "smi";
2079 } 2072 }
2080 2073
2081 return "heap number"; 2074 return "heap number";
2082 } 2075 }
2083 2076
(...skipping 1412 matching lines...) Expand 10 before | Expand all | Expand 10 after
3496 for (int i = 0; i < array->length(); i++) { 3489 for (int i = 0; i < array->length(); i++) {
3497 new_array->set(i, array->get(i)); 3490 new_array->set(i, array->get(i));
3498 } 3491 }
3499 for (int i = array->length(); i < length; i++) { 3492 for (int i = array->length(); i < length; i++) {
3500 new_array->set(i, isolate()->heap()->undefined_value()); 3493 new_array->set(i, isolate()->heap()->undefined_value());
3501 } 3494 }
3502 isolate()->heap()->public_set_materialized_objects(*new_array); 3495 isolate()->heap()->public_set_materialized_objects(*new_array);
3503 return new_array; 3496 return new_array;
3504 } 3497 }
3505 3498
3506 #ifdef ENABLE_DEBUGGER_SUPPORT
3507 3499
3508 DeoptimizedFrameInfo::DeoptimizedFrameInfo(Deoptimizer* deoptimizer, 3500 DeoptimizedFrameInfo::DeoptimizedFrameInfo(Deoptimizer* deoptimizer,
3509 int frame_index, 3501 int frame_index,
3510 bool has_arguments_adaptor, 3502 bool has_arguments_adaptor,
3511 bool has_construct_stub) { 3503 bool has_construct_stub) {
3512 FrameDescription* output_frame = deoptimizer->output_[frame_index]; 3504 FrameDescription* output_frame = deoptimizer->output_[frame_index];
3513 function_ = output_frame->GetFunction(); 3505 function_ = output_frame->GetFunction();
3514 has_construct_stub_ = has_construct_stub; 3506 has_construct_stub_ = has_construct_stub;
3515 expression_count_ = output_frame->GetExpressionCount(); 3507 expression_count_ = output_frame->GetExpressionCount();
3516 expression_stack_ = new Object*[expression_count_]; 3508 expression_stack_ = new Object*[expression_count_];
(...skipping 24 matching lines...) Expand all
3541 delete[] parameters_; 3533 delete[] parameters_;
3542 } 3534 }
3543 3535
3544 3536
3545 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { 3537 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) {
3546 v->VisitPointer(BitCast<Object**>(&function_)); 3538 v->VisitPointer(BitCast<Object**>(&function_));
3547 v->VisitPointers(parameters_, parameters_ + parameters_count_); 3539 v->VisitPointers(parameters_, parameters_ + parameters_count_);
3548 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); 3540 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_);
3549 } 3541 }
3550 3542
3551 #endif // ENABLE_DEBUGGER_SUPPORT
3552
3553 } } // namespace v8::internal 3543 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/deoptimizer.h ('k') | src/execution.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698