Index: src/log.cc |
diff --git a/src/log.cc b/src/log.cc |
index 6d88a535dc78f4ce10ce7a578d56d1b7b32b4e7c..877c6b8e961f574f5078002cba54a2b789b05d69 100644 |
--- a/src/log.cc |
+++ b/src/log.cc |
@@ -1063,6 +1063,9 @@ void Logger::ApiNamedSecurityCheck(Object* key) { |
void Logger::SharedLibraryEvent(const std::string& library_path, |
uintptr_t start, |
uintptr_t end) { |
+ codeEventHandler()->SharedLibrary(library_path, |
+ (const void*)start, |
+ (const void*)end); |
if (!log_->IsEnabled() || !FLAG_prof) return; |
Log::MessageBuilder msg(log_); |
msg.Append("shared-library,\"%s\",0x%08" V8PRIxPTR ",0x%08" V8PRIxPTR "\n", |
@@ -1353,9 +1356,16 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
if (!FLAG_log_code || !log_->IsEnabled()) return; |
Log::MessageBuilder msg(log_); |
AppendCodeCreateHeader(&msg, tag, code); |
+ msg.StartSubstring(); |
msg.AppendDoubleQuotedString(comment); |
+ msg.EndSubstring(); |
msg.Append('\n'); |
msg.WriteToLogFile(); |
+ std::string code_name; |
+ msg.GetSubstring(&code_name); |
+ codeEventHandler()->Create((const void*)code->address(), |
Jarin
2014/08/26 08:23:57
If you are interested in the address of actual cod
|
+ (const int)code->ExecutableSize(), |
+ code_name); |
} |
@@ -1370,6 +1380,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
if (!FLAG_log_code || !log_->IsEnabled()) return; |
Log::MessageBuilder msg(log_); |
AppendCodeCreateHeader(&msg, tag, code); |
+ msg.StartSubstring(); |
if (name->IsString()) { |
msg.Append('"'); |
msg.AppendDetailed(String::cast(name), false); |
@@ -1377,8 +1388,14 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
} else { |
msg.AppendSymbolName(Symbol::cast(name)); |
} |
+ msg.EndSubstring(); |
msg.Append('\n'); |
msg.WriteToLogFile(); |
+ std::string code_name; |
+ msg.GetSubstring(&code_name); |
+ codeEventHandler()->Create((const void*)code->address(), |
+ (const int)code->ExecutableSize(), |
+ code_name); |
} |
@@ -1398,6 +1415,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
Log::MessageBuilder msg(log_); |
AppendCodeCreateHeader(&msg, tag, code); |
+ msg.StartSubstring(); |
if (name->IsString()) { |
SmartArrayPointer<char> str = |
String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
@@ -1405,11 +1423,17 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
} else { |
msg.AppendSymbolName(Symbol::cast(name)); |
} |
+ msg.EndSubstring(); |
msg.Append(','); |
msg.AppendAddress(shared->address()); |
msg.Append(",%s", ComputeMarker(code)); |
msg.Append('\n'); |
msg.WriteToLogFile(); |
+ std::string code_name; |
+ msg.GetSubstring(&code_name); |
+ codeEventHandler()->Create((const void*)code->address(), |
+ (const int)code->ExecutableSize(), |
+ code_name); |
} |
@@ -1430,6 +1454,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
if (!FLAG_log_code || !log_->IsEnabled()) return; |
Log::MessageBuilder msg(log_); |
AppendCodeCreateHeader(&msg, tag, code); |
+ msg.StartSubstring(); |
SmartArrayPointer<char> name = |
shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
msg.Append("\"%s ", name.get()); |
@@ -1440,11 +1465,18 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
} else { |
msg.AppendSymbolName(Symbol::cast(source)); |
} |
- msg.Append(":%d:%d\",", line, column); |
+ msg.Append(":%d:%d\"", line, column); |
+ msg.EndSubstring(); |
+ msg.Append(","); |
msg.AppendAddress(shared->address()); |
msg.Append(",%s", ComputeMarker(code)); |
msg.Append('\n'); |
msg.WriteToLogFile(); |
+ std::string code_name; |
+ msg.GetSubstring(&code_name); |
+ codeEventHandler()->Create((const void*)code->address(), |
+ (const int)code->ExecutableSize(), |
+ code_name); |
} |
@@ -1459,9 +1491,16 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, |
if (!FLAG_log_code || !log_->IsEnabled()) return; |
Log::MessageBuilder msg(log_); |
AppendCodeCreateHeader(&msg, tag, code); |
+ msg.StartSubstring(); |
msg.Append("\"args_count: %d\"", args_count); |
+ msg.EndSubstring(); |
msg.Append('\n'); |
msg.WriteToLogFile(); |
+ std::string code_name; |
+ msg.GetSubstring(&code_name); |
+ codeEventHandler()->Create((const void*)code->address(), |
+ (const int)code->ExecutableSize(), |
+ code_name); |
} |
@@ -1502,17 +1541,25 @@ void Logger::RegExpCodeCreateEvent(Code* code, String* source) { |
if (!FLAG_log_code || !log_->IsEnabled()) return; |
Log::MessageBuilder msg(log_); |
AppendCodeCreateHeader(&msg, REG_EXP_TAG, code); |
+ msg.StartSubstring(); |
msg.Append('"'); |
msg.AppendDetailed(source, false); |
msg.Append('"'); |
+ msg.EndSubstring(); |
msg.Append('\n'); |
msg.WriteToLogFile(); |
+ std::string code_name; |
+ msg.GetSubstring(&code_name); |
+ codeEventHandler()->Create((const void*)code->address(), |
+ (const int)code->ExecutableSize(), |
+ code_name); |
} |
void Logger::CodeMoveEvent(Address from, Address to) { |
PROFILER_LOG(CodeMoveEvent(from, to)); |
- |
+ codeEventHandler()->Move((const void*)from, |
+ (const void*)to); |
if (!is_logging_code_events()) return; |
CALL_LISTENERS(CodeMoveEvent(from, to)); |
MoveEventInternal(CODE_MOVE_EVENT, from, to); |
@@ -1521,6 +1568,7 @@ void Logger::CodeMoveEvent(Address from, Address to) { |
void Logger::CodeDeleteEvent(Address from) { |
PROFILER_LOG(CodeDeleteEvent(from)); |
+ codeEventHandler()->Delete((const void*)from); |
Jarin
2014/08/26 08:23:57
I think this is never called.
|
if (!is_logging_code_events()) return; |
CALL_LISTENERS(CodeDeleteEvent(from)); |
@@ -2086,11 +2134,23 @@ void Logger::SetCodeEventHandler(uint32_t options, |
} |
+void Logger::SetCodeEventHandler(v8::CodeEventHandler* handler) { |
+ code_event_handler_ = handler; |
+} |
+ |
+ |
Sampler* Logger::sampler() { |
return ticker_; |
} |
+CodeEventHandler* Logger::codeEventHandler() { |
+ if (code_event_handler_ == NULL) |
+ code_event_handler_ = new StubCodeEventHandler(); |
+ return code_event_handler_; |
+} |
+ |
+ |
FILE* Logger::TearDown() { |
if (!is_initialized_) return NULL; |
is_initialized_ = false; |