CPUProfiler: Simplify logging part of CreateCodeEvent functions.
authorloislo@chromium.org <loislo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 24 Jun 2013 12:55:19 +0000 (12:55 +0000)
committerloislo@chromium.org <loislo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 24 Jun 2013 12:55:19 +0000 (12:55 +0000)
We have 5 overloaded functions with name CreateCodeEvent.
All these functions have many common parts. I'd like to eliminate the difference between them.

TEST=existing tests
R=yangguo@chromium.org, yurys@chromium.org

Review URL: https://codereview.chromium.org/16901014

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15287 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/log-utils.cc
src/log-utils.h
src/log.cc
src/log.h
src/objects.cc
src/objects.h
src/spaces.cc
tools/plot-timer-events.js

index f033172..a733b52 100644 (file)
@@ -237,6 +237,18 @@ void LogMessageBuilder::Append(const char c) {
 }
 
 
+void LogMessageBuilder::AppendDoubleQuotedString(const char* string) {
+  Append('"');
+  for (const char* p = string; *p != '\0'; p++) {
+    if (*p == '"') {
+      Append('\\');
+    }
+    Append(*p);
+  }
+  Append('"');
+}
+
+
 void LogMessageBuilder::Append(String* str) {
   DisallowHeapAllocation no_gc;  // Ensure string stay valid.
   int length = str->length();
index a1867f2..c499540 100644 (file)
@@ -132,6 +132,9 @@ class LogMessageBuilder BASE_EMBEDDED {
   // Append a character to the log message.
   void Append(const char c);
 
+  // Append double quoted string to the log message.
+  void AppendDoubleQuotedString(const char* string);
+
   // Append a heap string.
   void Append(String* str);
 
index 01db0ab..76dfdaf 100644 (file)
@@ -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);
@@ -947,6 +947,32 @@ void Logger::LogRecordedBuffer(Code* code, SharedFunctionInfo* shared) {
 }
 
 
+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("hash %x)", symbol->Hash());
+}
+
+
 void Logger::CodeCreateEvent(LogEventsAndTags tag,
                              Code* code,
                              const char* comment) {
@@ -959,19 +985,8 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
 
   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());
-  for (const char* p = comment; *p != '\0'; p++) {
-    if (*p == '"') {
-      msg.Append('\\');
-    }
-    msg.Append(*p);
-  }
-  msg.Append('"');
+  AppendCodeCreateHeader(&msg, tag, code);
+  msg.AppendDoubleQuotedString(comment);
   msg.Append('\n');
   msg.WriteToLogFile();
 }
@@ -989,25 +1004,13 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
 
   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();
@@ -1043,25 +1046,13 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
     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());
@@ -1099,27 +1090,16 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
 
   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());
@@ -1139,12 +1119,8 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
 
   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();
 }
@@ -1167,13 +1143,10 @@ void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
 
   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();
 }
@@ -1242,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;
@@ -1319,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();
@@ -1548,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;
index faf6df1..f6e2ed9 100644 (file)
--- a/src/log.h
+++ b/src/log.h
@@ -422,6 +422,12 @@ class Logger {
   // Helper method. It dumps name into name_buffer_.
   void AppendName(Name* name);
 
+  // Appends standard code header.
+  void AppendCodeCreateHeader(LogMessageBuilder*, LogEventsAndTags, Code*);
+
+  // Appends symbol for the name.
+  void AppendSymbolName(LogMessageBuilder*, Symbol*);
+
   // Emits general information about generated code.
   void LogCodeInfo();
 
index 04e7318..cfeecad 100644 (file)
@@ -10365,6 +10365,7 @@ const char* Code::Kind2String(Kind kind) {
     case COMPARE_IC: return "COMPARE_IC";
     case COMPARE_NIL_IC: return "COMPARE_NIL_IC";
     case TO_BOOLEAN_IC: return "TO_BOOLEAN_IC";
+    case REGEXP: return "REGEXP";
   }
   UNREACHABLE();
   return NULL;
index ef7548f..417411d 100644 (file)
@@ -4454,7 +4454,9 @@ class Code: public HeapObject {
   V(BINARY_OP_IC)         \
   V(COMPARE_IC)           \
   V(COMPARE_NIL_IC)       \
-  V(TO_BOOLEAN_IC)
+  V(TO_BOOLEAN_IC)        \
+  V(REGEXP)
+
 
   enum Kind {
 #define DEFINE_CODE_KIND_ENUM(name) name,
@@ -4463,7 +4465,6 @@ class Code: public HeapObject {
 
     // Pseudo-kinds.
     LAST_CODE_KIND = TO_BOOLEAN_IC,
-    REGEXP = BUILTIN,
     FIRST_IC_KIND = LOAD_IC,
     LAST_IC_KIND = TO_BOOLEAN_IC
   };
index 825d2a6..e05a872 100644 (file)
@@ -1823,6 +1823,7 @@ static void ReportCodeKindStatistics() {
       CASE(COMPARE_IC);
       CASE(COMPARE_NIL_IC);
       CASE(TO_BOOLEAN_IC);
+      CASE(REGEXP);
     }
   }
 
index 5412f8e..96cbed0 100644 (file)
@@ -104,14 +104,14 @@ function CodeKind(color, kinds) {
 
 
 var CodeKinds = {
-  'external ': new CodeKind("#3399FF", [-3]),
-  'reg.exp. ': new CodeKind("#0000FF", [-2]),
+  'external ': new CodeKind("#3399FF", [-2]),
   'runtime  ': new CodeKind("#000000", [-1]),
   'full code': new CodeKind("#DD0000", [0]),
   'opt code ': new CodeKind("#00EE00", [1]),
   'code stub': new CodeKind("#FF00FF", [2]),
   'built-in ': new CodeKind("#AA00AA", [3]),
-  'inl.cache': new CodeKind("#4444AA", [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
+  'inl.cache': new CodeKind("#4444AA", [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
+  'reg.exp. ': new CodeKind("#0000FF", [15]),
 }
 
 
@@ -197,7 +197,7 @@ function ProcessCodeDeleteEvent(address) {
 
 function ProcessSharedLibrary(name, start, end) {
   var code_entry = new CodeMap.CodeEntry(end - start, name);
-  code_entry.kind = -3;  // External code kind.
+  code_entry.kind = -2;  // External code kind.
   for (var i = 0; i < kV8BinarySuffixes.length; i++) {
     var suffix = kV8BinarySuffixes[i];
     if (name.indexOf(suffix, name.length - suffix.length) >= 0) {