Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / gn / trace.cc
index a2f34a3..4dfb6ca 100644 (file)
@@ -167,8 +167,8 @@ void ScopedTrace::Done() {
 }
 
 void EnableTracing() {
-  CHECK(!trace_log);
-  trace_log = new TraceLog;
+  if (!trace_log)
+    trace_log = new TraceLog;
 }
 
 void AddTrace(TraceItem* item) {
@@ -185,6 +185,8 @@ std::string SummarizeTraces() {
   std::vector<const TraceItem*> parses;
   std::vector<const TraceItem*> file_execs;
   std::vector<const TraceItem*> script_execs;
+  std::vector<const TraceItem*> check_headers;
+  int headers_checked = 0;
   for (size_t i = 0; i < events.size(); i++) {
     switch (events[i]->type()) {
       case TraceItem::TRACE_FILE_PARSE:
@@ -196,6 +198,13 @@ std::string SummarizeTraces() {
       case TraceItem::TRACE_SCRIPT_EXECUTE:
         script_execs.push_back(events[i]);
         break;
+      case TraceItem::TRACE_CHECK_HEADERS:
+        check_headers.push_back(events[i]);
+        break;
+      case TraceItem::TRACE_CHECK_HEADER:
+        headers_checked++;
+        break;
+      case TraceItem::TRACE_SETUP:
       case TraceItem::TRACE_FILE_LOAD:
       case TraceItem::TRACE_FILE_WRITE:
       case TraceItem::TRACE_DEFINE_TARGET:
@@ -211,6 +220,19 @@ std::string SummarizeTraces() {
   SummarizeScriptExecs(script_execs, out);
   out << std::endl;
 
+  // Generally there will only be one header check, but it's theoretically
+  // possible for more than one to run if more than one build is going in
+  // parallel. Just report the total of all of them.
+  if (!check_headers.empty()) {
+    float check_headers_time = 0;
+    for (size_t i = 0; i < check_headers.size(); i++)
+      check_headers_time += check_headers[i]->delta().InMillisecondsF();
+
+    out << "Header check time: (total time in ms, files checked)\n";
+    out << base::StringPrintf(" %8.2f  %d\n",
+                              check_headers_time, headers_checked);
+  }
+
   return out.str();
 }
 
@@ -244,6 +266,9 @@ void SaveTraces(const base::FilePath& file_name) {
 
     out << ",\"cat\":";
     switch (item.type()) {
+      case TraceItem::TRACE_SETUP:
+        out << "\"setup\"";
+        break;
       case TraceItem::TRACE_FILE_LOAD:
         out << "\"load\"";
         break;
@@ -261,6 +286,13 @@ void SaveTraces(const base::FilePath& file_name) {
         break;
       case TraceItem::TRACE_DEFINE_TARGET:
         out << "\"define\"";
+        break;
+      case TraceItem::TRACE_CHECK_HEADER:
+        out << "\"hdr\"";
+        break;
+      case TraceItem::TRACE_CHECK_HEADERS:
+        out << "\"header_check\"";
+        break;
     }
 
     if (!item.toolchain().empty() || !item.cmdline().empty()) {