Chromium Code Reviews| Index: src/log.cc |
| diff --git a/src/log.cc b/src/log.cc |
| index c1edf4d1855a27c37272a12052e9bf0fdc70bd3a..3a75306f61334e9b335ef51caa8c8d5f2f6ce155 100644 |
| --- a/src/log.cc |
| +++ b/src/log.cc |
| @@ -262,6 +262,7 @@ void Profiler::Engage() { |
| Logger::ticker_->SetProfiler(this); |
| Logger::ProfilerBeginEvent(); |
| + Logger::LogAliases(); |
| } |
| @@ -301,6 +302,19 @@ Profiler* Logger::profiler_ = NULL; |
| VMState* Logger::current_state_ = NULL; |
| VMState Logger::bottom_state_(EXTERNAL); |
| SlidingStateWindow* Logger::sliding_state_window_ = NULL; |
| +const char** Logger::log_events_ = NULL; |
| + |
| +#define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name, |
| +const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { |
| + LOG_EVENTS_AND_TAGS_LIST(DECLARE_LONG_EVENT) |
| +}; |
| +#undef DECLARE_LONG_EVENT |
| + |
| +#define DECLARE_SHORT_EVENT(ignore1, ignore2, short_name) short_name, |
| +const char* kCompressedLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { |
| + LOG_EVENTS_AND_TAGS_LIST(DECLARE_SHORT_EVENT) |
| +}; |
| +#undef DECLARE_SHORT_EVENT |
| bool Logger::IsEnabled() { |
| @@ -315,6 +329,17 @@ void Logger::ProfilerBeginEvent() { |
| msg.WriteToLogFile(); |
| } |
| + |
| +void Logger::LogAliases() { |
| + if (!Log::IsEnabled() || !FLAG_compress_log) return; |
| + LogMessageBuilder msg; |
| + for (int i = 0; i < NUMBER_OF_LOG_EVENTS; ++i) { |
| + msg.Append("alias,%s,%s\n", |
| + kCompressedLogEventsNames[i], kLongLogEventsNames[i]); |
| + } |
| + msg.WriteToLogFile(); |
| +} |
| + |
| #endif // ENABLE_LOGGING_AND_PROFILING |
| @@ -594,12 +619,14 @@ void Logger::DeleteEvent(const char* name, void* object) { |
| } |
| -void Logger::CodeCreateEvent(const char* tag, Code* code, const char* comment) { |
| +void Logger::CodeCreateEvent( |
|
Søren Thygesen Gjesse
2009/06/08 12:28:47
I think we normally use the following format for l
Mikhail Naganov
2009/06/08 13:39:09
OK, fixed.
|
| + LogEventsAndTags tag, Code* code, const char* comment) { |
| #ifdef ENABLE_LOGGING_AND_PROFILING |
| if (!Log::IsEnabled() || !FLAG_log_code) return; |
| LogMessageBuilder msg; |
| - msg.Append("code-creation,%s,0x%" V8PRIxPTR ",%d,\"", tag, code->address(), |
| - code->ExecutableSize()); |
| + msg.Append("%s,%s,0x%" V8PRIxPTR ",%d,\"", |
| + log_events_[CODE_CREATION_EVENT], log_events_[tag], |
| + code->address(), code->ExecutableSize()); |
| for (const char* p = comment; *p != '\0'; p++) { |
| if (*p == '"') { |
| msg.Append('\\'); |
| @@ -613,20 +640,21 @@ void Logger::CodeCreateEvent(const char* tag, Code* code, const char* comment) { |
| } |
| -void Logger::CodeCreateEvent(const char* tag, Code* code, String* name) { |
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, String* name) { |
| #ifdef ENABLE_LOGGING_AND_PROFILING |
| if (!Log::IsEnabled() || !FLAG_log_code) return; |
| LogMessageBuilder msg; |
| SmartPointer<char> str = |
| name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| - msg.Append("code-creation,%s,0x%" V8PRIxPTR ",%d,\"%s\"\n", |
| - tag, code->address(), code->ExecutableSize(), *str); |
| + msg.Append("%s,%s,0x%" V8PRIxPTR ",%d,\"%s\"\n", |
| + log_events_[CODE_CREATION_EVENT], log_events_[tag], |
| + code->address(), code->ExecutableSize(), *str); |
| msg.WriteToLogFile(); |
| #endif |
| } |
| -void Logger::CodeCreateEvent(const char* tag, Code* code, String* name, |
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, String* name, |
| String* source, int line) { |
| #ifdef ENABLE_LOGGING_AND_PROFILING |
| if (!Log::IsEnabled() || !FLAG_log_code) return; |
| @@ -635,8 +663,9 @@ void Logger::CodeCreateEvent(const char* tag, Code* code, String* name, |
| name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| SmartPointer<char> sourcestr = |
| source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| - msg.Append("code-creation,%s,0x%" V8PRIxPTR ",%d,\"%s %s:%d\"\n", |
| - tag, code->address(), |
| + msg.Append("%s,%s,0x%" V8PRIxPTR ",%d,\"%s %s:%d\"\n", |
| + log_events_[CODE_CREATION_EVENT], |
| + log_events_[tag], code->address(), |
| code->ExecutableSize(), |
| *str, *sourcestr, line); |
| msg.WriteToLogFile(); |
| @@ -644,11 +673,13 @@ void Logger::CodeCreateEvent(const char* tag, Code* code, String* name, |
| } |
| -void Logger::CodeCreateEvent(const char* tag, Code* code, int args_count) { |
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) { |
| #ifdef ENABLE_LOGGING_AND_PROFILING |
| if (!Log::IsEnabled() || !FLAG_log_code) return; |
| LogMessageBuilder msg; |
| - msg.Append("code-creation,%s,0x%" V8PRIxPTR ",%d,\"args_count: %d\"\n", tag, |
| + msg.Append("%s,%s,0x%" V8PRIxPTR ",%d,\"args_count: %d\"\n", |
| + log_events_[CODE_CREATION_EVENT], |
| + log_events_[tag], |
| code->address(), |
| code->ExecutableSize(), |
| args_count); |
| @@ -661,7 +692,9 @@ void Logger::RegExpCodeCreateEvent(Code* code, String* source) { |
| #ifdef ENABLE_LOGGING_AND_PROFILING |
| if (!Log::IsEnabled() || !FLAG_log_code) return; |
| LogMessageBuilder msg; |
| - msg.Append("code-creation,%s,0x%" V8PRIxPTR ",%d,\"", "RegExp", |
| + msg.Append("%s,%s,0x%" V8PRIxPTR ",%d,\"", |
| + log_events_[CODE_CREATION_EVENT], |
| + log_events_[REG_EXP_TAG], |
| code->address(), |
| code->ExecutableSize()); |
| msg.AppendDetailed(source, false); |
| @@ -671,23 +704,12 @@ void Logger::RegExpCodeCreateEvent(Code* code, String* source) { |
| } |
| -void Logger::CodeAllocateEvent(Code* code, Assembler* assem) { |
| -#ifdef ENABLE_LOGGING_AND_PROFILING |
| - if (!Log::IsEnabled() || !FLAG_log_code) return; |
| - LogMessageBuilder msg; |
| - msg.Append("code-allocate,0x%" V8PRIxPTR ",0x%" V8PRIxPTR "\n", |
| - code->address(), |
| - assem); |
| - msg.WriteToLogFile(); |
| -#endif |
| -} |
| - |
| - |
| void Logger::CodeMoveEvent(Address from, Address to) { |
| #ifdef ENABLE_LOGGING_AND_PROFILING |
| if (!Log::IsEnabled() || !FLAG_log_code) return; |
| LogMessageBuilder msg; |
| - msg.Append("code-move,0x%" V8PRIxPTR ",0x%" V8PRIxPTR "\n", from, to); |
| + msg.Append("%s,0x%" V8PRIxPTR ",0x%" V8PRIxPTR "\n", |
| + log_events_[CODE_MOVE_EVENT], from, to); |
| msg.WriteToLogFile(); |
| #endif |
| } |
| @@ -697,7 +719,7 @@ void Logger::CodeDeleteEvent(Address from) { |
| #ifdef ENABLE_LOGGING_AND_PROFILING |
| if (!Log::IsEnabled() || !FLAG_log_code) return; |
| LogMessageBuilder msg; |
| - msg.Append("code-delete,0x%" V8PRIxPTR "\n", from); |
| + msg.Append("%s,0x%" V8PRIxPTR "\n", log_events_[CODE_DELETE_EVENT], from); |
| msg.WriteToLogFile(); |
| #endif |
| } |
| @@ -803,13 +825,26 @@ void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) { |
| void Logger::TickEvent(TickSample* sample, bool overflow) { |
| if (!Log::IsEnabled() || !FLAG_prof) return; |
| LogMessageBuilder msg; |
| - msg.Append("tick,0x%" V8PRIxPTR ",0x%" V8PRIxPTR ",%d", |
| + msg.Append("%s,0x%" V8PRIxPTR ",0x%" V8PRIxPTR ",%d", |
| + log_events_[TICK_EVENT], |
| sample->pc, sample->sp, static_cast<int>(sample->state)); |
| if (overflow) { |
| msg.Append(",overflow"); |
| } |
| + uintptr_t prev_ptr = sample->pc; |
| for (int i = 0; i < sample->frames_count; ++i) { |
| - msg.Append(",0x%" V8PRIxPTR, sample->stack[i]); |
| + if (FLAG_compress_log) { |
| + const uintptr_t ptr = OffsetFrom(sample->stack[i]); |
| + intptr_t delta = ptr - prev_ptr; |
| + prev_ptr = ptr; |
| + // To avoid printing negative offsets in an unsigned form, |
| + // we are printing an absolute value with a sign. |
| + const char sign = delta >= 0 ? '+' : '-'; |
| + if (sign == '-') { delta = -delta; } |
| + msg.Append(",%c0x%" V8PRIxPTR, sign, delta); |
| + } else { |
| + msg.Append(",0x%" V8PRIxPTR, sample->stack[i]); |
| + } |
| } |
| msg.Append('\n'); |
| msg.WriteToLogFile(); |
| @@ -913,17 +948,19 @@ void Logger::LogCompiledFunctions() { |
| int line_num = GetScriptLineNumber(script, shared->start_position()); |
| if (line_num > 0) { |
| line_num += script->line_offset()->value() + 1; |
| - LOG(CodeCreateEvent("LazyCompile", shared->code(), *func_name, |
| + LOG(CodeCreateEvent(Logger::LAZY_COMPILE_TAG, |
| + shared->code(), *func_name, |
| *script_name, line_num)); |
| } else { |
| // Can't distinguish enum and script here, so always use Script. |
| - LOG(CodeCreateEvent("Script", shared->code(), *script_name)); |
| + LOG(CodeCreateEvent(Logger::SCRIPT_TAG, |
| + shared->code(), *script_name)); |
| } |
| continue; |
| } |
| } |
| // If no script or script has no name. |
| - LOG(CodeCreateEvent("LazyCompile", shared->code(), *func_name)); |
| + LOG(CodeCreateEvent(Logger::LAZY_COMPILE_TAG, shared->code(), *func_name)); |
| } |
| DeleteArray(sfis); |
| @@ -1022,6 +1059,9 @@ bool Logger::Setup() { |
| LogMessageBuilder::set_write_failure_handler(StopLoggingAndProfiling); |
| + log_events_ = FLAG_compress_log ? |
| + kCompressedLogEventsNames : kLongLogEventsNames; |
| + |
| return true; |
| #else |