diff --git a/aos/util/config_validator_lib.cc b/aos/util/config_validator_lib.cc
index 2bd660a..e388bb7 100644
--- a/aos/util/config_validator_lib.cc
+++ b/aos/util/config_validator_lib.cc
@@ -182,6 +182,8 @@
     if (!send_data_on_channels && (configuration::NodesCount(config) == 1u)) {
       continue;
     }
+    // Send timing report when we are sending data.
+    const bool do_skip_timing_report = !send_data_on_channels;
     for (const LoggerNodeSetValidation *logger_set :
          *validation_config->logging()->logger_sets()) {
       SCOPED_TRACE(aos::FlatbufferToJson(logger_set));
@@ -192,9 +194,11 @@
         for (const auto &node : *logger_set->loggers()) {
           logger_nodes.push_back(node->str());
         }
-        loggers = MakeLoggersForNodes(&factory, logger_nodes, log_path);
+        loggers = MakeLoggersForNodes(&factory, logger_nodes, log_path,
+                                      do_skip_timing_report);
       } else {
-        loggers = MakeLoggersForAllNodes(&factory, log_path);
+        loggers =
+            MakeLoggersForAllNodes(&factory, log_path, do_skip_timing_report);
       }
 
       std::vector<std::unique_ptr<EventLoop>> test_loops;
diff --git a/aos/util/simulation_logger.cc b/aos/util/simulation_logger.cc
index 24691ef..513fa65 100644
--- a/aos/util/simulation_logger.cc
+++ b/aos/util/simulation_logger.cc
@@ -4,13 +4,16 @@
 
 namespace aos::util {
 LoggerState::LoggerState(aos::SimulatedEventLoopFactory *factory,
-                         const aos::Node *node, std::string_view output_folder)
+                         const aos::Node *node, std::string_view output_folder,
+                         bool do_skip_timing_report)
     : event_loop_(factory->MakeEventLoop("logger", node)),
       namer_(std::make_unique<aos::logger::MultiNodeFilesLogNamer>(
           absl::StrCat(output_folder, "/", logger::MaybeNodeName(node), "/"),
           event_loop_.get())),
       logger_(std::make_unique<aos::logger::Logger>(event_loop_.get())) {
-  event_loop_->SkipTimingReport();
+  if (do_skip_timing_report) {
+    event_loop_->SkipTimingReport();
+  }
   event_loop_->SkipAosLog();
   event_loop_->OnRun([this]() { logger_->StartLogging(std::move(namer_)); });
 }
@@ -18,23 +21,24 @@
 std::vector<std::unique_ptr<LoggerState>> MakeLoggersForNodes(
     aos::SimulatedEventLoopFactory *factory,
     const std::vector<std::string> &nodes_to_log,
-    std::string_view output_folder) {
+    std::string_view output_folder, bool do_skip_timing_report) {
   std::vector<std::unique_ptr<LoggerState>> loggers;
   for (const std::string &node : nodes_to_log) {
     loggers.emplace_back(std::make_unique<LoggerState>(
         factory, aos::configuration::GetNode(factory->configuration(), node),
-        output_folder));
+        output_folder, do_skip_timing_report));
   }
   return loggers;
 }
 
 std::vector<std::unique_ptr<LoggerState>> MakeLoggersForAllNodes(
-    aos::SimulatedEventLoopFactory *factory, std::string_view output_folder) {
+    aos::SimulatedEventLoopFactory *factory, std::string_view output_folder,
+    bool do_skip_timing_report) {
   std::vector<std::unique_ptr<LoggerState>> loggers;
   for (const aos::Node *node :
        configuration::GetNodes(factory->configuration())) {
-    loggers.emplace_back(
-        std::make_unique<LoggerState>(factory, node, output_folder));
+    loggers.emplace_back(std::make_unique<LoggerState>(
+        factory, node, output_folder, do_skip_timing_report));
   }
   return loggers;
 }
diff --git a/aos/util/simulation_logger.h b/aos/util/simulation_logger.h
index f431b4c..af43d02 100644
--- a/aos/util/simulation_logger.h
+++ b/aos/util/simulation_logger.h
@@ -9,7 +9,8 @@
 class LoggerState {
  public:
   LoggerState(aos::SimulatedEventLoopFactory *factory, const aos::Node *node,
-              std::string_view output_folder);
+              std::string_view output_folder,
+              bool do_skip_timing_report = true);
 
  private:
   std::unique_ptr<aos::EventLoop> event_loop_;
@@ -23,11 +24,12 @@
 std::vector<std::unique_ptr<LoggerState>> MakeLoggersForNodes(
     aos::SimulatedEventLoopFactory *factory,
     const std::vector<std::string> &nodes_to_log,
-    std::string_view output_folder);
+    std::string_view output_folder, bool do_skip_timing_report = true);
 
 // Creates loggers for all of the nodes.
 std::vector<std::unique_ptr<LoggerState>> MakeLoggersForAllNodes(
-    aos::SimulatedEventLoopFactory *factory, std::string_view output_folder);
+    aos::SimulatedEventLoopFactory *factory, std::string_view output_folder,
+    bool do_skip_timing_report = true);
 
 }  // namespace aos::util
 #endif  // AOS_UTIL_SIMULATION_LOGGER_H_
