Chromium Code Reviews| Index: src/log.cc | 
| =================================================================== | 
| --- src/log.cc (revision 13419) | 
| +++ src/log.cc (working copy) | 
| @@ -455,6 +455,7 @@ | 
| address_to_name_map_(NULL), | 
| is_initialized_(false), | 
| code_event_handler_(NULL), | 
| + support_moved_code_(true), | 
| last_address_(NULL), | 
| prev_sp_(NULL), | 
| prev_function_(NULL), | 
| @@ -472,12 +473,15 @@ | 
| void Logger::IssueCodeAddedEvent(Code* code, | 
| + Script* script, | 
| const char* name, | 
| size_t name_len) { | 
| JitCodeEvent event; | 
| + memset(&event, 0, sizeof(event)); | 
| event.type = JitCodeEvent::CODE_ADDED; | 
| event.code_start = code->instruction_start(); | 
| event.code_len = code->instruction_size(); | 
| + event.script = v8::Handle<v8::Script>(reinterpret_cast<v8::Script*>(script)); | 
| event.name.str = name; | 
| event.name.len = name_len; | 
| @@ -516,7 +520,38 @@ | 
| code_event_handler_(&event); | 
| } | 
| +void Logger::IssueAddCodeLinePosInfoEvent(void* line_info, | 
| + int pc_offset, | 
| + int position, | 
| + JitCodeEvent::PositionType | 
| + position_type) { | 
| 
 
danno
2013/02/01 13:43:10
nit: indentation
 
 | 
| + JitCodeEvent event; | 
| + event.type = JitCodeEvent::CODE_ADD_LINE_POS_INFO; | 
| + event.user_data = line_info; | 
| + event.line_info.offset = pc_offset; | 
| + event.line_info.pos = position; | 
| + event.line_info.position_type = position_type; | 
| + code_event_handler_(&event); | 
| +} | 
| + | 
| +void* Logger::IssueStartCodePosInfoEvent() { | 
| + JitCodeEvent event; | 
| + event.type = JitCodeEvent::CODE_START_LINE_INFO_RECORDING; | 
| + | 
| + code_event_handler_(&event); | 
| + return event.user_data; | 
| +} | 
| + | 
| +void Logger::IssueEndCodePosInfoEvent(Code* code, void* line_info) { | 
| + JitCodeEvent event; | 
| + event.type = JitCodeEvent::CODE_END_LINE_INFO_RECORDING; | 
| + event.code_start = code->instruction_start(); | 
| + event.user_data = line_info; | 
| + | 
| + code_event_handler_(&event); | 
| +} | 
| + | 
| #define DECLARE_EVENT(ignore1, name) name, | 
| static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { | 
| LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT) | 
| @@ -900,7 +935,7 @@ | 
| name_buffer_->AppendBytes(comment); | 
| } | 
| if (code_event_handler_ != NULL) { | 
| - IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 
| + IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); | 
| } | 
| if (!log_->IsEnabled()) return; | 
| if (FLAG_ll_prof) { | 
| @@ -940,7 +975,7 @@ | 
| name_buffer_->AppendString(name); | 
| } | 
| if (code_event_handler_ != NULL) { | 
| - IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 
| + IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); | 
| } | 
| if (!log_->IsEnabled()) return; | 
| if (FLAG_ll_prof) { | 
| @@ -987,7 +1022,12 @@ | 
| name_buffer_->AppendString(name); | 
| } | 
| if (code_event_handler_ != NULL) { | 
| - IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 
| + Script* script = | 
| + shared->script()->IsScript() ? Script::cast(shared->script()) : NULL; | 
| + IssueCodeAddedEvent(code, | 
| + script, | 
| + name_buffer_->get(), | 
| + name_buffer_->size()); | 
| } | 
| if (!log_->IsEnabled()) return; | 
| if (FLAG_ll_prof) { | 
| @@ -1037,7 +1077,12 @@ | 
| name_buffer_->AppendInt(line); | 
| } | 
| if (code_event_handler_ != NULL) { | 
| - IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 
| + Script* script = | 
| + shared->script()->IsScript() ? Script::cast(shared->script()) : NULL; | 
| + IssueCodeAddedEvent(code, | 
| + script, | 
| + name_buffer_->get(), | 
| + name_buffer_->size()); | 
| } | 
| if (!log_->IsEnabled()) return; | 
| if (FLAG_ll_prof) { | 
| @@ -1078,7 +1123,7 @@ | 
| name_buffer_->AppendInt(args_count); | 
| } | 
| if (code_event_handler_ != NULL) { | 
| - IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 
| + IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); | 
| } | 
| if (!log_->IsEnabled()) return; | 
| if (FLAG_ll_prof) { | 
| @@ -1116,7 +1161,7 @@ | 
| name_buffer_->AppendString(source); | 
| } | 
| if (code_event_handler_ != NULL) { | 
| - IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 
| + IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); | 
| } | 
| if (!log_->IsEnabled()) return; | 
| if (FLAG_ll_prof) { | 
| @@ -1160,7 +1205,30 @@ | 
| DeleteEventInternal(CODE_DELETE_EVENT, from); | 
| } | 
| +void Logger::CodeLinePosInfoAddEvent(void* line_info, | 
| + int pc_offset, | 
| + int position, | 
| + JitCodeEvent::PositionType position_type) { | 
| + if (code_event_handler_ != NULL) { | 
| + IssueAddCodeLinePosInfoEvent(line_info, pc_offset, position, position_type); | 
| + } | 
| +} | 
| +void* Logger::CodeStartLinePosInfoRecordEvent() { | 
| + if (code_event_handler_ != NULL) { | 
| + return IssueStartCodePosInfoEvent(); | 
| + } else { | 
| + return NULL; | 
| + } | 
| +} | 
| + | 
| +void Logger::CodeEndLinePosInfoRecordEvent(Code* code, | 
| + void* line_info) { | 
| + if (code_event_handler_ != NULL) { | 
| + IssueEndCodePosInfoEvent(code, line_info); | 
| + } | 
| +} | 
| + | 
| void Logger::SnapshotPositionEvent(Address addr, int pos) { | 
| if (!log_->IsEnabled()) return; | 
| if (FLAG_ll_prof) LowLevelSnapshotPositionEvent(addr, pos); | 
| @@ -1733,9 +1801,10 @@ | 
| void Logger::SetCodeEventHandler(uint32_t options, | 
| - JitCodeEventHandler event_handler) { | 
| + JitCodeEventHandler event_handler, | 
| + bool support_moved_code) { | 
| code_event_handler_ = event_handler; | 
| - | 
| + support_moved_code_ = support_moved_code; | 
| if (code_event_handler_ != NULL && (options & kJitCodeEventEnumExisting)) { | 
| HandleScope scope; | 
| LogCodeObjects(); |