Index: src/log.cc |
=================================================================== |
--- src/log.cc (revision 13599) |
+++ src/log.cc (working copy) |
@@ -468,12 +468,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)); |
danno
2013/02/06 14:21:34
Why don't you use "<Script>(ToApi<Script>(script))
|
event.name.str = name; |
event.name.len = name_len; |
@@ -512,7 +515,38 @@ |
code_event_handler_(&event); |
} |
+void Logger::IssueAddCodeLinePosInfoEvent( |
+ void* jit_handler_data, |
+ int pc_offset, |
+ int position, |
+ JitCodeEvent::PositionType position_type) { |
+ JitCodeEvent event; |
+ event.type = JitCodeEvent::CODE_ADD_LINE_POS_INFO; |
+ event.user_data = jit_handler_data; |
+ 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; |
danno
2013/02/06 14:21:34
How about making sure the event is a well-defined
|
+ event.type = JitCodeEvent::CODE_START_LINE_INFO_RECORDING; |
+ |
+ code_event_handler_(&event); |
+ return event.user_data; |
+} |
+ |
+void Logger::IssueEndCodePosInfoEvent(Code* code, void* jit_handler_data) { |
+ JitCodeEvent event; |
+ event.type = JitCodeEvent::CODE_END_LINE_INFO_RECORDING; |
+ event.code_start = code->instruction_start(); |
+ event.user_data = jit_handler_data; |
+ |
+ code_event_handler_(&event); |
danno
2013/02/06 14:21:34
same here
|
+} |
+ |
#define DECLARE_EVENT(ignore1, name) name, |
static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { |
LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT) |
@@ -881,7 +915,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) { |
@@ -921,7 +955,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) { |
@@ -968,7 +1002,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) { |
@@ -1018,7 +1057,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) { |
@@ -1059,7 +1103,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) { |
@@ -1097,7 +1141,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) { |
@@ -1141,7 +1185,41 @@ |
DeleteEventInternal(CODE_DELETE_EVENT, from); |
} |
+void Logger::CodeLinePosInfoAddPositionEvent(void* jit_handler_data, |
+ int pc_offset, |
+ int position) { |
+ if (code_event_handler_ != NULL) { |
+ IssueAddCodeLinePosInfoEvent(jit_handler_data, |
+ pc_offset, |
+ position, |
+ JitCodeEvent::POSITION); |
+ } |
+} |
+void Logger::CodeLinePosInfoAddStatementPositionEvent(void* jit_handler_data, |
+ int pc_offset, |
+ int position) { |
+ if (code_event_handler_ != NULL) { |
+ IssueAddCodeLinePosInfoEvent(jit_handler_data, |
+ pc_offset, |
+ position, |
+ JitCodeEvent::STATEMENT_POSITION); |
+ } |
+} |
+ |
+void Logger::CodeStartLinePosInfoRecordEvent(PositionsRecorder* pos_recorder) { |
+ if (code_event_handler_ != NULL) { |
+ pos_recorder->AttachJITHandlerData(IssueStartCodePosInfoEvent()); |
+ } |
+} |
+ |
+void Logger::CodeEndLinePosInfoRecordEvent(Code* code, |
+ void* jit_handler_data) { |
+ if (code_event_handler_ != NULL) { |
+ IssueEndCodePosInfoEvent(code, jit_handler_data); |
+ } |
+} |
+ |
void Logger::SnapshotPositionEvent(Address addr, int pos) { |
if (!log_->IsEnabled()) return; |
if (FLAG_ll_prof) LowLevelSnapshotPositionEvent(addr, pos); |
@@ -1716,7 +1794,6 @@ |
void Logger::SetCodeEventHandler(uint32_t options, |
JitCodeEventHandler event_handler) { |
code_event_handler_ = event_handler; |
- |
if (code_event_handler_ != NULL && (options & kJitCodeEventEnumExisting)) { |
HandleScope scope; |
LogCodeObjects(); |