Merge "trace_to_text: report overwrite events for ftrace"
diff --git a/tools/trace_to_text/main.cc b/tools/trace_to_text/main.cc
index 2ba990b..9e4f93b 100644
--- a/tools/trace_to_text/main.cc
+++ b/tools/trace_to_text/main.cc
@@ -259,6 +259,24 @@
   *output << "\n\n";
 }
 
+void PrintFtraceStats(std::ostream* output,
+                      uint64_t overwrite_count,
+                      bool compact_output) {
+  if (!compact_output)
+    *output << "--------------------Ftrace Stats-------------------\n";
+
+  char line[2048];
+  if (compact_output) {
+    sprintf(line, "ftrace_overwrite_count,%" PRIu64 "\n", overwrite_count);
+  } else {
+    sprintf(line, "Events overwritten: %" PRIu64 "\n", overwrite_count);
+  }
+  *output << std::string(line);
+
+  if (!compact_output)
+    *output << "\n";
+}
+
 void PrintInodeStats(std::ostream* output,
                      const std::set<uint64_t>& ftrace_inodes,
                      const uint64_t& ftrace_inode_count,
@@ -390,6 +408,7 @@
                    bool compact_output) {
   uint64_t start = std::numeric_limits<uint64_t>::max();
   uint64_t end = 0;
+  uint64_t ftrace_overwrites = 0;
   std::multiset<uint64_t> ftrace_timestamps;
   std::set<pid_t> tids_in_tree;
   std::set<pid_t> tids_in_events;
@@ -399,8 +418,9 @@
   std::set<uint64_t> resolved_scan_inodes;
 
   ForEachPacketInTrace(
-      input, [&start, &end, &ftrace_timestamps, &tids_in_tree, &tids_in_events,
-              &ftrace_inodes, &ftrace_inode_count, &resolved_map_inodes,
+      input, [&start, &end, &ftrace_overwrites, &ftrace_timestamps,
+              &tids_in_tree, &tids_in_events, &ftrace_inodes,
+              &ftrace_inode_count, &resolved_map_inodes,
               &resolved_scan_inodes](const protos::TracePacket& packet) {
 
         if (packet.has_process_tree()) {
@@ -429,6 +449,8 @@
           return;
 
         const FtraceEventBundle& bundle = packet.ftrace_events();
+        ftrace_overwrites += bundle.overwrite_count();
+
         uint64_t inode_number = 0;
         for (const FtraceEvent& event : bundle.event()) {
           if (ParseInode(event, &inode_number)) {
@@ -459,6 +481,7 @@
 
   if (!compact_output)
     PrintFtraceTrack(output, start, end, ftrace_timestamps);
+  PrintFtraceStats(output, ftrace_overwrites, compact_output);
   PrintProcessStats(output, tids_in_tree, tids_in_events, compact_output);
   PrintInodeStats(output, ftrace_inodes, ftrace_inode_count,
                   resolved_map_inodes, resolved_scan_inodes, compact_output);