| Index: src/log.cc
|
| diff --git a/src/log.cc b/src/log.cc
|
| index 908a3682b83150d42254484eae3ab3fa251b214d..82ce886fc9248cd31f49bca7e691b071bad4ff6c 100644
|
| --- a/src/log.cc
|
| +++ b/src/log.cc
|
| @@ -862,7 +862,7 @@ void Logger::CallbackEventInternal(const char* prefix, Name* name,
|
| Address entry_point) {
|
| if (!log_->IsEnabled() || !FLAG_log_code) return;
|
| LogMessageBuilder msg(this);
|
| - msg.Append("%s,%s,-3,",
|
| + msg.Append("%s,%s,-2,",
|
| kLogEventsNames[CODE_CREATION_EVENT],
|
| kLogEventsNames[CALLBACK_TAG]);
|
| msg.AppendAddress(entry_point);
|
| @@ -903,18 +903,39 @@ void Logger::SetterCallbackEvent(Name* name, Address entry_point) {
|
| }
|
|
|
|
|
| -void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| - Code* code,
|
| - const char* comment) {
|
| - if (!is_logging_code_events()) return;
|
| - if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
|
| +void Logger::AppendName(Name* name) {
|
| + if (name->IsString()) {
|
| + name_buffer_->AppendString(String::cast(name));
|
| + } else {
|
| + Symbol* symbol = Symbol::cast(name);
|
| + name_buffer_->AppendBytes("symbol(");
|
| + if (!symbol->name()->IsUndefined()) {
|
| + name_buffer_->AppendBytes("\"");
|
| + name_buffer_->AppendString(String::cast(symbol->name()));
|
| + name_buffer_->AppendBytes("\" ");
|
| + }
|
| + name_buffer_->AppendBytes("hash ");
|
| + name_buffer_->AppendHex(symbol->Hash());
|
| + name_buffer_->AppendByte(')');
|
| + }
|
| +}
|
| +
|
| +
|
| +void Logger::InitNameBuffer(LogEventsAndTags tag) {
|
| name_buffer_->Reset();
|
| name_buffer_->AppendBytes(kLogEventsNames[tag]);
|
| name_buffer_->AppendByte(':');
|
| - name_buffer_->AppendBytes(comment);
|
| - }
|
| +}
|
| +
|
| +
|
| +void Logger::LogRecordedBuffer(Code* code, SharedFunctionInfo* shared) {
|
| if (code_event_handler_ != NULL) {
|
| - IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
|
| + Script* script = shared && 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) {
|
| @@ -923,21 +944,49 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| if (Serializer::enabled()) {
|
| RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
|
| }
|
| - if (!FLAG_log_code) return;
|
| - LogMessageBuilder msg(this);
|
| - msg.Append("%s,%s,%d,",
|
| - kLogEventsNames[CODE_CREATION_EVENT],
|
| - kLogEventsNames[tag],
|
| - code->kind());
|
| - msg.AppendAddress(code->address());
|
| - msg.Append(",%d,\"", code->ExecutableSize());
|
| - for (const char* p = comment; *p != '\0'; p++) {
|
| - if (*p == '"') {
|
| - msg.Append('\\');
|
| +}
|
| +
|
| +
|
| +void Logger::AppendCodeCreateHeader(LogMessageBuilder* msg,
|
| + LogEventsAndTags tag,
|
| + Code* code) {
|
| + ASSERT(msg);
|
| + msg->Append("%s,%s,%d,",
|
| + kLogEventsNames[CODE_CREATION_EVENT],
|
| + kLogEventsNames[tag],
|
| + code->kind());
|
| + msg->AppendAddress(code->address());
|
| + msg->Append(",%d,", code->ExecutableSize());
|
| +}
|
| +
|
| +
|
| +void Logger::AppendSymbolName(LogMessageBuilder* msg,
|
| + Symbol* symbol) {
|
| + ASSERT(symbol);
|
| + msg->Append("symbol(");
|
| + if (!symbol->name()->IsUndefined()) {
|
| + msg->Append("\"");
|
| + msg->AppendDetailed(String::cast(symbol->name()), false);
|
| + msg->Append("\" ");
|
| }
|
| - msg.Append(*p);
|
| + msg->Append("hash %x)", symbol->Hash());
|
| +}
|
| +
|
| +
|
| +void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| + Code* code,
|
| + const char* comment) {
|
| + if (!is_logging_code_events()) return;
|
| + if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
|
| + InitNameBuffer(tag);
|
| + name_buffer_->AppendBytes(comment);
|
| + LogRecordedBuffer(code, NULL);
|
| }
|
| - msg.Append('"');
|
| +
|
| + if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| + LogMessageBuilder msg(this);
|
| + AppendCodeCreateHeader(&msg, tag, code);
|
| + msg.AppendDoubleQuotedString(comment);
|
| msg.Append('\n');
|
| msg.WriteToLogFile();
|
| }
|
| @@ -948,55 +997,20 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| Name* name) {
|
| if (!is_logging_code_events()) return;
|
| if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
|
| - name_buffer_->Reset();
|
| - name_buffer_->AppendBytes(kLogEventsNames[tag]);
|
| - name_buffer_->AppendByte(':');
|
| - if (name->IsString()) {
|
| - name_buffer_->AppendString(String::cast(name));
|
| - } else {
|
| - Symbol* symbol = Symbol::cast(name);
|
| - name_buffer_->AppendBytes("symbol(");
|
| - if (!symbol->name()->IsUndefined()) {
|
| - name_buffer_->AppendBytes("\"");
|
| - name_buffer_->AppendString(String::cast(symbol->name()));
|
| - name_buffer_->AppendBytes("\" ");
|
| - }
|
| - name_buffer_->AppendBytes("hash ");
|
| - name_buffer_->AppendHex(symbol->Hash());
|
| - name_buffer_->AppendByte(')');
|
| - }
|
| + InitNameBuffer(tag);
|
| + AppendName(name);
|
| + LogRecordedBuffer(code, NULL);
|
| }
|
| - if (code_event_handler_ != NULL) {
|
| - IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!log_->IsEnabled()) return;
|
| - if (FLAG_ll_prof) {
|
| - LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (Serializer::enabled()) {
|
| - RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!FLAG_log_code) return;
|
| +
|
| + if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| LogMessageBuilder msg(this);
|
| - msg.Append("%s,%s,%d,",
|
| - kLogEventsNames[CODE_CREATION_EVENT],
|
| - kLogEventsNames[tag],
|
| - code->kind());
|
| - msg.AppendAddress(code->address());
|
| - msg.Append(",%d,", code->ExecutableSize());
|
| + AppendCodeCreateHeader(&msg, tag, code);
|
| if (name->IsString()) {
|
| msg.Append('"');
|
| msg.AppendDetailed(String::cast(name), false);
|
| msg.Append('"');
|
| } else {
|
| - Symbol* symbol = Symbol::cast(name);
|
| - msg.Append("symbol(");
|
| - if (!symbol->name()->IsUndefined()) {
|
| - msg.Append("\"");
|
| - msg.AppendDetailed(String::cast(symbol->name()), false);
|
| - msg.Append("\" ");
|
| - }
|
| - msg.Append("hash %x)", symbol->Hash());
|
| + AppendSymbolName(&msg, Symbol::cast(name));
|
| }
|
| msg.Append('\n');
|
| msg.WriteToLogFile();
|
| @@ -1020,65 +1034,25 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| Name* name) {
|
| if (!is_logging_code_events()) return;
|
| if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
|
| - name_buffer_->Reset();
|
| - name_buffer_->AppendBytes(kLogEventsNames[tag]);
|
| - name_buffer_->AppendByte(':');
|
| + InitNameBuffer(tag);
|
| name_buffer_->AppendBytes(ComputeMarker(code));
|
| - if (name->IsString()) {
|
| - name_buffer_->AppendString(String::cast(name));
|
| - } else {
|
| - Symbol* symbol = Symbol::cast(name);
|
| - name_buffer_->AppendBytes("symbol(");
|
| - if (!symbol->name()->IsUndefined()) {
|
| - name_buffer_->AppendBytes("\"");
|
| - name_buffer_->AppendString(String::cast(symbol->name()));
|
| - name_buffer_->AppendBytes("\" ");
|
| - }
|
| - name_buffer_->AppendBytes("hash ");
|
| - name_buffer_->AppendHex(symbol->Hash());
|
| - name_buffer_->AppendByte(')');
|
| - }
|
| + AppendName(name);
|
| + LogRecordedBuffer(code, shared);
|
| }
|
| - if (code_event_handler_ != NULL) {
|
| - 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) {
|
| - LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (Serializer::enabled()) {
|
| - RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!FLAG_log_code) return;
|
| +
|
| + if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| if (code == Isolate::Current()->builtins()->builtin(
|
| Builtins::kLazyCompile))
|
| return;
|
|
|
| LogMessageBuilder msg(this);
|
| - msg.Append("%s,%s,%d,",
|
| - kLogEventsNames[CODE_CREATION_EVENT],
|
| - kLogEventsNames[tag],
|
| - code->kind());
|
| - msg.AppendAddress(code->address());
|
| - msg.Append(",%d,", code->ExecutableSize());
|
| + AppendCodeCreateHeader(&msg, tag, code);
|
| if (name->IsString()) {
|
| SmartArrayPointer<char> str =
|
| String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
| msg.Append("\"%s\"", *str);
|
| } else {
|
| - Symbol* symbol = Symbol::cast(name);
|
| - msg.Append("symbol(");
|
| - if (!symbol->name()->IsUndefined()) {
|
| - msg.Append("\"");
|
| - msg.AppendDetailed(String::cast(symbol->name()), false);
|
| - msg.Append("\" ");
|
| - }
|
| - msg.Append("hash %x)", symbol->Hash());
|
| + AppendSymbolName(&msg, Symbol::cast(name));
|
| }
|
| msg.Append(',');
|
| msg.AppendAddress(shared->address());
|
| @@ -1098,9 +1072,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| Name* source, int line) {
|
| if (!is_logging_code_events()) return;
|
| if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
|
| - name_buffer_->Reset();
|
| - name_buffer_->AppendBytes(kLogEventsNames[tag]);
|
| - name_buffer_->AppendByte(':');
|
| + InitNameBuffer(tag);
|
| name_buffer_->AppendBytes(ComputeMarker(code));
|
| name_buffer_->AppendString(shared->DebugName());
|
| name_buffer_->AppendByte(' ');
|
| @@ -1113,45 +1085,21 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| }
|
| name_buffer_->AppendByte(':');
|
| name_buffer_->AppendInt(line);
|
| + LogRecordedBuffer(code, shared);
|
| }
|
| - if (code_event_handler_ != NULL) {
|
| - 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) {
|
| - LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (Serializer::enabled()) {
|
| - RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!FLAG_log_code) return;
|
| +
|
| + if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| LogMessageBuilder msg(this);
|
| + AppendCodeCreateHeader(&msg, tag, code);
|
| SmartArrayPointer<char> name =
|
| shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
| - msg.Append("%s,%s,%d,",
|
| - kLogEventsNames[CODE_CREATION_EVENT],
|
| - kLogEventsNames[tag],
|
| - code->kind());
|
| - msg.AppendAddress(code->address());
|
| - msg.Append(",%d,\"%s ", code->ExecutableSize(), *name);
|
| + msg.Append("\"%s ", *name);
|
| if (source->IsString()) {
|
| SmartArrayPointer<char> sourcestr =
|
| String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
| msg.Append("%s", *sourcestr);
|
| } else {
|
| - Symbol* symbol = Symbol::cast(source);
|
| - msg.Append("symbol(");
|
| - if (!symbol->name()->IsUndefined()) {
|
| - msg.Append("\"");
|
| - msg.AppendDetailed(String::cast(symbol->name()), false);
|
| - msg.Append("\" ");
|
| - }
|
| - msg.Append("hash %x)", symbol->Hash());
|
| + AppendSymbolName(&msg, Symbol::cast(source));
|
| }
|
| msg.Append(":%d\",", line);
|
| msg.AppendAddress(shared->address());
|
| @@ -1164,29 +1112,15 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
|
| if (!is_logging_code_events()) return;
|
| if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
|
| - name_buffer_->Reset();
|
| - name_buffer_->AppendBytes(kLogEventsNames[tag]);
|
| - name_buffer_->AppendByte(':');
|
| + InitNameBuffer(tag);
|
| name_buffer_->AppendInt(args_count);
|
| + LogRecordedBuffer(code, NULL);
|
| }
|
| - if (code_event_handler_ != NULL) {
|
| - IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!log_->IsEnabled()) return;
|
| - if (FLAG_ll_prof) {
|
| - LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (Serializer::enabled()) {
|
| - RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!FLAG_log_code) return;
|
| +
|
| + if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| LogMessageBuilder msg(this);
|
| - msg.Append("%s,%s,%d,",
|
| - kLogEventsNames[CODE_CREATION_EVENT],
|
| - kLogEventsNames[tag],
|
| - code->kind());
|
| - msg.AppendAddress(code->address());
|
| - msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count);
|
| + AppendCodeCreateHeader(&msg, tag, code);
|
| + msg.Append("\"args_count: %d\"", args_count);
|
| msg.Append('\n');
|
| msg.WriteToLogFile();
|
| }
|
| @@ -1202,30 +1136,17 @@ void Logger::CodeMovingGCEvent() {
|
| void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
|
| if (!is_logging_code_events()) return;
|
| if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
|
| - name_buffer_->Reset();
|
| - name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]);
|
| - name_buffer_->AppendByte(':');
|
| + InitNameBuffer(REG_EXP_TAG);
|
| name_buffer_->AppendString(source);
|
| + LogRecordedBuffer(code, NULL);
|
| }
|
| - if (code_event_handler_ != NULL) {
|
| - IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!log_->IsEnabled()) return;
|
| - if (FLAG_ll_prof) {
|
| - LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (Serializer::enabled()) {
|
| - RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
|
| - }
|
| - if (!FLAG_log_code) return;
|
| +
|
| + if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| LogMessageBuilder msg(this);
|
| - msg.Append("%s,%s,-2,",
|
| - kLogEventsNames[CODE_CREATION_EVENT],
|
| - kLogEventsNames[REG_EXP_TAG]);
|
| - msg.AppendAddress(code->address());
|
| - msg.Append(",%d,\"", code->ExecutableSize());
|
| + AppendCodeCreateHeader(&msg, REG_EXP_TAG, code);
|
| + msg.Append('"');
|
| msg.AppendDetailed(source, false);
|
| - msg.Append('\"');
|
| + msg.Append('"');
|
| msg.Append('\n');
|
| msg.WriteToLogFile();
|
| }
|
| @@ -1294,12 +1215,9 @@ void Logger::SnapshotPositionEvent(Address addr, int pos) {
|
| const char* code_name = address_to_name_map_->Lookup(addr);
|
| if (code_name == NULL) return; // Not a code object.
|
| LogMessageBuilder msg(this);
|
| - msg.Append("%s,%d,\"", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos);
|
| - for (const char* p = code_name; *p != '\0'; ++p) {
|
| - if (*p == '"') msg.Append('\\');
|
| - msg.Append(*p);
|
| - }
|
| - msg.Append("\"\n");
|
| + msg.Append("%s,%d,", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos);
|
| + msg.AppendDoubleQuotedString(code_name);
|
| + msg.Append("\n");
|
| msg.WriteToLogFile();
|
| }
|
| if (!FLAG_log_snapshot_positions) return;
|
| @@ -1371,14 +1289,7 @@ void Logger::SuspectReadEvent(Name* name, Object* obj) {
|
| msg.Append(String::cast(name));
|
| msg.Append('"');
|
| } else {
|
| - Symbol* symbol = Symbol::cast(name);
|
| - msg.Append("symbol(");
|
| - if (!symbol->name()->IsUndefined()) {
|
| - msg.Append("\"");
|
| - msg.AppendDetailed(String::cast(symbol->name()), false);
|
| - msg.Append("\" ");
|
| - }
|
| - msg.Append("hash %x)", symbol->Hash());
|
| + AppendSymbolName(&msg, Symbol::cast(name));
|
| }
|
| msg.Append('\n');
|
| msg.WriteToLogFile();
|
| @@ -1600,6 +1511,10 @@ void Logger::LogCodeObject(Object* object) {
|
| description = "A stub from the snapshot";
|
| tag = Logger::STUB_TAG;
|
| break;
|
| + case Code::REGEXP:
|
| + description = "Regular expression code";
|
| + tag = Logger::REG_EXP_TAG;
|
| + break;
|
| case Code::BUILTIN:
|
| description = "A builtin from the snapshot";
|
| tag = Logger::BUILTIN_TAG;
|
| @@ -1628,6 +1543,8 @@ void Logger::LogCodeObject(Object* object) {
|
| description = "A keyed call IC from the snapshot";
|
| tag = Logger::KEYED_CALL_IC_TAG;
|
| break;
|
| + case Code::NUMBER_OF_KINDS:
|
| + break;
|
| }
|
| PROFILE(isolate_, CodeCreateEvent(tag, code_object, description));
|
| }
|
|
|