Send *Statistics and Timestamp messages from SimulatedMessageBridge

This makes the simulation environment much closer to reality.

Change-Id: Ie0f44c17d9c9a750363335def1b008cef8c809b0
diff --git a/aos/events/logging/BUILD b/aos/events/logging/BUILD
index b5a4377..c3af9e2 100644
--- a/aos/events/logging/BUILD
+++ b/aos/events/logging/BUILD
@@ -131,6 +131,9 @@
     flatbuffers = [
         "//aos/events:ping_fbs",
         "//aos/events:pong_fbs",
+        "//aos/network:message_bridge_client_fbs",
+        "//aos/network:message_bridge_server_fbs",
+        "//aos/network:timestamp_fbs",
     ],
     deps = ["//aos/events:config"],
 )
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index eff977b..abab5f6 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -593,6 +593,10 @@
 
       event_loop_factory_->DisableForwarding(remapped_channel);
     }
+
+    // If we are replaying a log, we don't want a bunch of redundant messages
+    // from both the real message bridge and simulated message bridge.
+    event_loop_factory_->DisableStatistics();
   }
 
   // While we are starting the system up, we might be relying on matching data
diff --git a/aos/events/logging/logger_test.cc b/aos/events/logging/logger_test.cc
index b6a30cb..7dbbb8e 100644
--- a/aos/events/logging/logger_test.cc
+++ b/aos/events/logging/logger_test.cc
@@ -171,6 +171,7 @@
   unlink(logfile.c_str());
 
   LOG(INFO) << "Logging data to " << logfile;
+  ping_.set_quiet(true);
 
   {
     DetachedBufferWriter writer(logfile);
@@ -352,25 +353,25 @@
 
     // Timing reports, pings
     EXPECT_THAT(CountChannelsData(logfiles_[0]),
-                ::testing::ElementsAre(::testing::Pair(1, 40),
-                                       ::testing::Pair(4, 2001)));
+                ::testing::ElementsAre(::testing::Pair(4, 40),
+                                       ::testing::Pair(10, 2001)));
     // Timestamps for pong
     EXPECT_THAT(CountChannelsTimestamp(logfiles_[0]),
-                ::testing::ElementsAre(::testing::Pair(5, 2001)));
+                ::testing::ElementsAre(::testing::Pair(11, 2001)));
 
     // Pong data.
     EXPECT_THAT(CountChannelsData(logfiles_[1]),
-                ::testing::ElementsAre(::testing::Pair(5, 2001)));
+                ::testing::ElementsAre(::testing::Pair(11, 2001)));
     // No timestamps
     EXPECT_THAT(CountChannelsTimestamp(logfiles_[1]), ::testing::ElementsAre());
 
     // Timing reports and pongs.
     EXPECT_THAT(CountChannelsData(logfiles_[2]),
-                ::testing::ElementsAre(::testing::Pair(3, 40),
-                                       ::testing::Pair(5, 2001)));
+                ::testing::ElementsAre(::testing::Pair(9, 40),
+                                       ::testing::Pair(11, 2001)));
     // And ping timestamps.
     EXPECT_THAT(CountChannelsTimestamp(logfiles_[2]),
-                ::testing::ElementsAre(::testing::Pair(4, 2001)));
+                ::testing::ElementsAre(::testing::Pair(10, 2001)));
   }
 
   LogReader reader({std::vector<std::string>{logfiles_[0]},
diff --git a/aos/events/logging/multinode_pingpong.json b/aos/events/logging/multinode_pingpong.json
index 1b1424e..a78b42c 100644
--- a/aos/events/logging/multinode_pingpong.json
+++ b/aos/events/logging/multinode_pingpong.json
@@ -33,6 +33,54 @@
       "num_senders": 20,
       "max_size": 2048
     },
+    {
+      "name": "/pi1/aos",
+      "type": "aos.message_bridge.ServerStatistics",
+      "logger": "NOT_LOGGED",
+      "source_node": "pi1"
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.message_bridge.ServerStatistics",
+      "logger": "NOT_LOGGED",
+      "source_node": "pi2"
+    },
+    {
+      "name": "/pi1/aos",
+      "type": "aos.message_bridge.ClientStatistics",
+      "logger": "NOT_LOGGED",
+      "source_node": "pi1"
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.message_bridge.ClientStatistics",
+      "logger": "NOT_LOGGED",
+      "source_node": "pi2"
+    },
+    {
+      "name": "/pi1/aos",
+      "type": "aos.message_bridge.Timestamp",
+      "logger": "NOT_LOGGED",
+      "source_node": "pi1",
+      "destination_nodes": [
+        {
+          "name": "pi2",
+          "timestamp_logger": "NOT_LOGGED"
+        }
+      ]
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.message_bridge.Timestamp",
+      "logger": "NOT_LOGGED",
+      "source_node": "pi2",
+      "destination_nodes": [
+        {
+          "name": "pi1",
+          "timestamp_logger": "NOT_LOGGED"
+        }
+      ]
+    },
     /* Forwarded to pi2 */
     {
       "name": "/test",