Test disabling timing reports
Change-Id: I5b904bbf9e039b2a15f8328b156fcc7bdd1d71ca
diff --git a/aos/events/event_loop_param_test.cc b/aos/events/event_loop_param_test.cc
index a5b6b19..79f326d 100644
--- a/aos/events/event_loop_param_test.cc
+++ b/aos/events/event_loop_param_test.cc
@@ -24,7 +24,11 @@
name_copy += std::to_string(event_loop_count_);
}
++event_loop_count_;
- return factory_->Make(name_copy);
+ auto result = factory_->Make(name_copy);
+ if (do_timing_reports() == DoTimingReports::kNo) {
+ result->SkipTimingReport();
+ }
+ return result;
}
void AbstractEventLoopTest::VerifyBuffers(
@@ -1016,38 +1020,42 @@
EXPECT_LT(expected_times[expected_times.size() / 2], average_time + kEpsilon);
EXPECT_GT(expected_times[expected_times.size() / 2], average_time - kEpsilon);
- // And, since we are here, check that the timing report makes sense.
- // Start by looking for our event loop's timing.
- FlatbufferDetachedBuffer<timing::Report> report =
- FlatbufferDetachedBuffer<timing::Report>::Empty();
- while (report_fetcher.FetchNext()) {
- if (report_fetcher->name()->string_view() == "primary") {
- report = CopyFlatBuffer(report_fetcher.get());
+ if (do_timing_reports() == DoTimingReports::kYes) {
+ // And, since we are here, check that the timing report makes sense.
+ // Start by looking for our event loop's timing.
+ FlatbufferDetachedBuffer<timing::Report> report =
+ FlatbufferDetachedBuffer<timing::Report>::Empty();
+ while (report_fetcher.FetchNext()) {
+ if (report_fetcher->name()->string_view() == "primary") {
+ report = CopyFlatBuffer(report_fetcher.get());
+ }
}
+
+ // Confirm that we have the right number of reports, and the contents are
+ // sane.
+ VLOG(1) << FlatbufferToJson(report, {.multi_line = true});
+
+ EXPECT_EQ(report.message().name()->string_view(), "primary");
+
+ ASSERT_NE(report.message().senders(), nullptr);
+ EXPECT_EQ(report.message().senders()->size(), 2);
+
+ ASSERT_NE(report.message().timers(), nullptr);
+ EXPECT_EQ(report.message().timers()->size(), 2);
+
+ EXPECT_EQ(report.message().timers()->Get(0)->name()->string_view(),
+ "Test loop");
+ EXPECT_GE(report.message().timers()->Get(0)->count(), 1);
+
+ EXPECT_EQ(report.message().timers()->Get(1)->name()->string_view(),
+ "timing_reports");
+ EXPECT_EQ(report.message().timers()->Get(1)->count(), 1);
+
+ // Make sure there is a single phased loop report with our report in it.
+ ASSERT_EQ(report.message().phased_loops(), nullptr);
+ } else {
+ ASSERT_FALSE(report_fetcher.Fetch());
}
-
- // Confirm that we have the right number of reports, and the contents are
- // sane.
- VLOG(1) << FlatbufferToJson(report, {.multi_line = true});
-
- EXPECT_EQ(report.message().name()->string_view(), "primary");
-
- ASSERT_NE(report.message().senders(), nullptr);
- EXPECT_EQ(report.message().senders()->size(), 2);
-
- ASSERT_NE(report.message().timers(), nullptr);
- EXPECT_EQ(report.message().timers()->size(), 2);
-
- EXPECT_EQ(report.message().timers()->Get(0)->name()->string_view(),
- "Test loop");
- EXPECT_GE(report.message().timers()->Get(0)->count(), 1);
-
- EXPECT_EQ(report.message().timers()->Get(1)->name()->string_view(),
- "timing_reports");
- EXPECT_EQ(report.message().timers()->Get(1)->count(), 1);
-
- // Make sure there is a single phased loop report with our report in it.
- ASSERT_EQ(report.message().phased_loops(), nullptr);
}
// Verify that we can change a timer's parameters during execution.
@@ -1501,32 +1509,36 @@
EXPECT_LT(expected_times[expected_times.size() / 2], average_time + kEpsilon);
EXPECT_GT(expected_times[expected_times.size() / 2], average_time - kEpsilon);
- // And, since we are here, check that the timing report makes sense.
- // Start by looking for our event loop's timing.
- FlatbufferDetachedBuffer<timing::Report> report =
- FlatbufferDetachedBuffer<timing::Report>::Empty();
- while (report_fetcher.FetchNext()) {
- if (report_fetcher->name()->string_view() == "primary") {
- report = CopyFlatBuffer(report_fetcher.get());
+ if (do_timing_reports() == DoTimingReports::kYes) {
+ // And, since we are here, check that the timing report makes sense.
+ // Start by looking for our event loop's timing.
+ FlatbufferDetachedBuffer<timing::Report> report =
+ FlatbufferDetachedBuffer<timing::Report>::Empty();
+ while (report_fetcher.FetchNext()) {
+ if (report_fetcher->name()->string_view() == "primary") {
+ report = CopyFlatBuffer(report_fetcher.get());
+ }
}
+
+ VLOG(1) << FlatbufferToJson(report, {.multi_line = true});
+
+ EXPECT_EQ(report.message().name()->string_view(), "primary");
+
+ ASSERT_NE(report.message().senders(), nullptr);
+ EXPECT_EQ(report.message().senders()->size(), 2);
+
+ ASSERT_NE(report.message().timers(), nullptr);
+ EXPECT_EQ(report.message().timers()->size(), 1);
+
+ // Make sure there is a single phased loop report with our report in it.
+ ASSERT_NE(report.message().phased_loops(), nullptr);
+ ASSERT_EQ(report.message().phased_loops()->size(), 1);
+ EXPECT_EQ(report.message().phased_loops()->Get(0)->name()->string_view(),
+ "Test loop");
+ EXPECT_GE(report.message().phased_loops()->Get(0)->count(), 1);
+ } else {
+ ASSERT_FALSE(report_fetcher.Fetch());
}
-
- VLOG(1) << FlatbufferToJson(report, {.multi_line = true});
-
- EXPECT_EQ(report.message().name()->string_view(), "primary");
-
- ASSERT_NE(report.message().senders(), nullptr);
- EXPECT_EQ(report.message().senders()->size(), 2);
-
- ASSERT_NE(report.message().timers(), nullptr);
- EXPECT_EQ(report.message().timers()->size(), 1);
-
- // Make sure there is a single phased loop report with our report in it.
- ASSERT_NE(report.message().phased_loops(), nullptr);
- ASSERT_EQ(report.message().phased_loops()->size(), 1);
- EXPECT_EQ(report.message().phased_loops()->Get(0)->name()->string_view(),
- "Test loop");
- EXPECT_GE(report.message().phased_loops()->Get(0)->count(), 1);
}
// Tests that senders count correctly in the timing report.
@@ -1564,50 +1576,54 @@
Run();
- // And, since we are here, check that the timing report makes sense.
- // Start by looking for our event loop's timing.
- FlatbufferDetachedBuffer<timing::Report> primary_report =
- FlatbufferDetachedBuffer<timing::Report>::Empty();
- while (report_fetcher.FetchNext()) {
- LOG(INFO) << "Report " << FlatbufferToJson(report_fetcher.get());
- if (report_fetcher->name()->string_view() == "primary") {
- primary_report = CopyFlatBuffer(report_fetcher.get());
+ if (do_timing_reports() == DoTimingReports::kYes) {
+ // And, since we are here, check that the timing report makes sense.
+ // Start by looking for our event loop's timing.
+ FlatbufferDetachedBuffer<timing::Report> primary_report =
+ FlatbufferDetachedBuffer<timing::Report>::Empty();
+ while (report_fetcher.FetchNext()) {
+ LOG(INFO) << "Report " << FlatbufferToJson(report_fetcher.get());
+ if (report_fetcher->name()->string_view() == "primary") {
+ primary_report = CopyFlatBuffer(report_fetcher.get());
+ }
}
+
+ LOG(INFO) << FlatbufferToJson(primary_report, {.multi_line = true});
+
+ EXPECT_EQ(primary_report.message().name()->string_view(), "primary");
+
+ ASSERT_NE(primary_report.message().senders(), nullptr);
+ EXPECT_EQ(primary_report.message().senders()->size(), 3);
+
+ // Confirm that the sender looks sane.
+ EXPECT_EQ(
+ loop1->configuration()
+ ->channels()
+ ->Get(primary_report.message().senders()->Get(0)->channel_index())
+ ->name()
+ ->string_view(),
+ "/test");
+ EXPECT_EQ(primary_report.message().senders()->Get(0)->count(), 10);
+
+ // Confirm that the timing primary_report sender looks sane.
+ EXPECT_EQ(
+ loop1->configuration()
+ ->channels()
+ ->Get(primary_report.message().senders()->Get(1)->channel_index())
+ ->name()
+ ->string_view(),
+ "/aos");
+ EXPECT_EQ(primary_report.message().senders()->Get(1)->count(), 1);
+
+ ASSERT_NE(primary_report.message().timers(), nullptr);
+ EXPECT_EQ(primary_report.message().timers()->size(), 3);
+
+ // Make sure there are no phased loops or watchers.
+ ASSERT_EQ(primary_report.message().phased_loops(), nullptr);
+ ASSERT_EQ(primary_report.message().watchers(), nullptr);
+ } else {
+ ASSERT_FALSE(report_fetcher.Fetch());
}
-
- LOG(INFO) << FlatbufferToJson(primary_report, {.multi_line = true});
-
- EXPECT_EQ(primary_report.message().name()->string_view(), "primary");
-
- ASSERT_NE(primary_report.message().senders(), nullptr);
- EXPECT_EQ(primary_report.message().senders()->size(), 3);
-
- // Confirm that the sender looks sane.
- EXPECT_EQ(
- loop1->configuration()
- ->channels()
- ->Get(primary_report.message().senders()->Get(0)->channel_index())
- ->name()
- ->string_view(),
- "/test");
- EXPECT_EQ(primary_report.message().senders()->Get(0)->count(), 10);
-
- // Confirm that the timing primary_report sender looks sane.
- EXPECT_EQ(
- loop1->configuration()
- ->channels()
- ->Get(primary_report.message().senders()->Get(1)->channel_index())
- ->name()
- ->string_view(),
- "/aos");
- EXPECT_EQ(primary_report.message().senders()->Get(1)->count(), 1);
-
- ASSERT_NE(primary_report.message().timers(), nullptr);
- EXPECT_EQ(primary_report.message().timers()->size(), 3);
-
- // Make sure there are no phased loops or watchers.
- ASSERT_EQ(primary_report.message().phased_loops(), nullptr);
- ASSERT_EQ(primary_report.message().watchers(), nullptr);
}
// Tests that senders count correctly in the timing report.
@@ -1645,32 +1661,36 @@
Run();
- // And, since we are here, check that the timing report makes sense.
- // Start by looking for our event loop's timing.
- FlatbufferDetachedBuffer<timing::Report> primary_report =
- FlatbufferDetachedBuffer<timing::Report>::Empty();
- while (report_fetcher.FetchNext()) {
- LOG(INFO) << "Report " << FlatbufferToJson(report_fetcher.get());
- if (report_fetcher->name()->string_view() == "primary") {
- primary_report = CopyFlatBuffer(report_fetcher.get());
+ if (do_timing_reports() == DoTimingReports::kYes) {
+ // And, since we are here, check that the timing report makes sense.
+ // Start by looking for our event loop's timing.
+ FlatbufferDetachedBuffer<timing::Report> primary_report =
+ FlatbufferDetachedBuffer<timing::Report>::Empty();
+ while (report_fetcher.FetchNext()) {
+ LOG(INFO) << "Report " << FlatbufferToJson(report_fetcher.get());
+ if (report_fetcher->name()->string_view() == "primary") {
+ primary_report = CopyFlatBuffer(report_fetcher.get());
+ }
}
+
+ // Check the watcher report.
+ VLOG(1) << FlatbufferToJson(primary_report, {.multi_line = true});
+
+ EXPECT_EQ(primary_report.message().name()->string_view(), "primary");
+
+ // Just the timing report timer.
+ ASSERT_NE(primary_report.message().timers(), nullptr);
+ EXPECT_EQ(primary_report.message().timers()->size(), 3);
+
+ // No phased loops
+ ASSERT_EQ(primary_report.message().phased_loops(), nullptr);
+
+ ASSERT_NE(primary_report.message().watchers(), nullptr);
+ ASSERT_EQ(primary_report.message().watchers()->size(), 1);
+ EXPECT_EQ(primary_report.message().watchers()->Get(0)->count(), 10);
+ } else {
+ ASSERT_FALSE(report_fetcher.Fetch());
}
-
- // Check the watcher report.
- VLOG(1) << FlatbufferToJson(primary_report, {.multi_line = true});
-
- EXPECT_EQ(primary_report.message().name()->string_view(), "primary");
-
- // Just the timing report timer.
- ASSERT_NE(primary_report.message().timers(), nullptr);
- EXPECT_EQ(primary_report.message().timers()->size(), 3);
-
- // No phased loops
- ASSERT_EQ(primary_report.message().phased_loops(), nullptr);
-
- ASSERT_NE(primary_report.message().watchers(), nullptr);
- ASSERT_EQ(primary_report.message().watchers()->size(), 1);
- EXPECT_EQ(primary_report.message().watchers()->Get(0)->count(), 10);
}
// Tests that fetchers count correctly in the timing report.
@@ -1717,47 +1737,53 @@
Run();
- // And, since we are here, check that the timing report makes sense.
- // Start by looking for our event loop's timing.
- FlatbufferDetachedBuffer<timing::Report> primary_report =
- FlatbufferDetachedBuffer<timing::Report>::Empty();
- while (report_fetcher.FetchNext()) {
- if (report_fetcher->name()->string_view() == "primary") {
- primary_report = CopyFlatBuffer(report_fetcher.get());
+ if (do_timing_reports() == DoTimingReports::kYes) {
+ // And, since we are here, check that the timing report makes sense.
+ // Start by looking for our event loop's timing.
+ FlatbufferDetachedBuffer<timing::Report> primary_report =
+ FlatbufferDetachedBuffer<timing::Report>::Empty();
+ while (report_fetcher.FetchNext()) {
+ if (report_fetcher->name()->string_view() == "primary") {
+ primary_report = CopyFlatBuffer(report_fetcher.get());
+ }
}
+
+ VLOG(1) << FlatbufferToJson(primary_report, {.multi_line = true});
+
+ EXPECT_EQ(primary_report.message().name()->string_view(), "primary");
+
+ ASSERT_NE(primary_report.message().senders(), nullptr);
+ EXPECT_EQ(primary_report.message().senders()->size(), 2);
+
+ ASSERT_NE(primary_report.message().timers(), nullptr);
+ EXPECT_EQ(primary_report.message().timers()->size(), 4);
+
+ // Make sure there are no phased loops or watchers.
+ ASSERT_EQ(primary_report.message().phased_loops(), nullptr);
+ ASSERT_EQ(primary_report.message().watchers(), nullptr);
+
+ // Now look at the fetchrs.
+ ASSERT_NE(primary_report.message().fetchers(), nullptr);
+ ASSERT_EQ(primary_report.message().fetchers()->size(), 2);
+
+ EXPECT_EQ(primary_report.message().fetchers()->Get(0)->count(), 1);
+ EXPECT_GE(primary_report.message().fetchers()->Get(0)->latency()->average(),
+ 0.1);
+ EXPECT_GE(primary_report.message().fetchers()->Get(0)->latency()->min(),
+ 0.1);
+ EXPECT_GE(primary_report.message().fetchers()->Get(0)->latency()->max(),
+ 0.1);
+ EXPECT_EQ(primary_report.message()
+ .fetchers()
+ ->Get(0)
+ ->latency()
+ ->standard_deviation(),
+ 0.0);
+
+ EXPECT_EQ(primary_report.message().fetchers()->Get(1)->count(), 10);
+ } else {
+ ASSERT_FALSE(report_fetcher.Fetch());
}
-
- VLOG(1) << FlatbufferToJson(primary_report, {.multi_line = true});
-
- EXPECT_EQ(primary_report.message().name()->string_view(), "primary");
-
- ASSERT_NE(primary_report.message().senders(), nullptr);
- EXPECT_EQ(primary_report.message().senders()->size(), 2);
-
- ASSERT_NE(primary_report.message().timers(), nullptr);
- EXPECT_EQ(primary_report.message().timers()->size(), 4);
-
- // Make sure there are no phased loops or watchers.
- ASSERT_EQ(primary_report.message().phased_loops(), nullptr);
- ASSERT_EQ(primary_report.message().watchers(), nullptr);
-
- // Now look at the fetchrs.
- ASSERT_NE(primary_report.message().fetchers(), nullptr);
- ASSERT_EQ(primary_report.message().fetchers()->size(), 2);
-
- EXPECT_EQ(primary_report.message().fetchers()->Get(0)->count(), 1);
- EXPECT_GE(primary_report.message().fetchers()->Get(0)->latency()->average(),
- 0.1);
- EXPECT_GE(primary_report.message().fetchers()->Get(0)->latency()->min(), 0.1);
- EXPECT_GE(primary_report.message().fetchers()->Get(0)->latency()->max(), 0.1);
- EXPECT_EQ(primary_report.message()
- .fetchers()
- ->Get(0)
- ->latency()
- ->standard_deviation(),
- 0.0);
-
- EXPECT_EQ(primary_report.message().fetchers()->Get(1)->count(), 10);
}
// Tests that a raw watcher and raw fetcher can receive messages from a raw
diff --git a/aos/events/event_loop_param_test.h b/aos/events/event_loop_param_test.h
index 85e802b..0cbb5fe 100644
--- a/aos/events/event_loop_param_test.h
+++ b/aos/events/event_loop_param_test.h
@@ -255,9 +255,12 @@
const Node *my_node_ = nullptr;
};
+enum class DoTimingReports { kYes, kNo };
+
class AbstractEventLoopTest
: public ::testing::TestWithParam<
- std::tuple<std::function<EventLoopTestFactory *()>, ReadMethod>> {
+ std::tuple<std::function<EventLoopTestFactory *()>, ReadMethod,
+ DoTimingReports>> {
public:
AbstractEventLoopTest() : factory_(std::get<0>(GetParam())()) {
if (read_method() == ReadMethod::PIN) {
@@ -266,12 +269,17 @@
}
ReadMethod read_method() const { return std::get<1>(GetParam()); }
+ DoTimingReports do_timing_reports() const { return std::get<2>(GetParam()); }
::std::unique_ptr<EventLoop> Make(std::string_view name = "");
::std::unique_ptr<EventLoop> MakePrimary(std::string_view name = "primary") {
++event_loop_count_;
- return factory_->MakePrimary(name);
+ auto result = factory_->MakePrimary(name);
+ if (do_timing_reports() == DoTimingReports::kNo) {
+ result->SkipTimingReport();
+ }
+ return result;
}
void InvalidChannelAlignment() { factory_->InvalidChannelAlignment(); }
diff --git a/aos/events/shm_event_loop_test.cc b/aos/events/shm_event_loop_test.cc
index 8e7ad93..cd91ab3 100644
--- a/aos/events/shm_event_loop_test.cc
+++ b/aos/events/shm_event_loop_test.cc
@@ -70,25 +70,18 @@
::aos::ShmEventLoop *primary_event_loop_;
};
-INSTANTIATE_TEST_CASE_P(ShmEventLoopCopyTest, AbstractEventLoopTest,
- ::testing::Values(std::make_pair(
- []() { return new ShmEventLoopTestFactory(); },
- ReadMethod::COPY)));
+auto CommonParameters() {
+ return ::testing::Combine(
+ ::testing::Values([]() { return new ShmEventLoopTestFactory(); }),
+ ::testing::Values(ReadMethod::COPY, ReadMethod::PIN),
+ ::testing::Values(DoTimingReports::kYes, DoTimingReports::kNo));
+}
-INSTANTIATE_TEST_CASE_P(ShmEventLoopCopyDeathTest, AbstractEventLoopDeathTest,
- ::testing::Values(std::make_pair(
- []() { return new ShmEventLoopTestFactory(); },
- ReadMethod::COPY)));
+INSTANTIATE_TEST_CASE_P(ShmEventLoopCommonTest, AbstractEventLoopTest,
+ CommonParameters());
-INSTANTIATE_TEST_CASE_P(ShmEventLoopPinTest, AbstractEventLoopTest,
- ::testing::Values(std::make_pair(
- []() { return new ShmEventLoopTestFactory(); },
- ReadMethod::PIN)));
-
-INSTANTIATE_TEST_CASE_P(ShmEventLoopPinDeathTest, AbstractEventLoopDeathTest,
- ::testing::Values(std::make_pair(
- []() { return new ShmEventLoopTestFactory(); },
- ReadMethod::PIN)));
+INSTANTIATE_TEST_CASE_P(ShmEventLoopCommonDeathTest, AbstractEventLoopDeathTest,
+ CommonParameters());
} // namespace
diff --git a/aos/events/simulated_event_loop_test.cc b/aos/events/simulated_event_loop_test.cc
index 0fb757b..7b7c861 100644
--- a/aos/events/simulated_event_loop_test.cc
+++ b/aos/events/simulated_event_loop_test.cc
@@ -64,31 +64,18 @@
std::unique_ptr<SimulatedEventLoopFactory> event_loop_factory_;
};
-INSTANTIATE_TEST_CASE_P(SimulatedEventLoopCopyTest, AbstractEventLoopTest,
- ::testing::Values(std::make_tuple(
- []() {
- return new SimulatedEventLoopTestFactory();
- },
- ReadMethod::COPY)));
+auto CommonParameters() {
+ return ::testing::Combine(
+ ::testing::Values([]() { return new SimulatedEventLoopTestFactory(); }),
+ ::testing::Values(ReadMethod::COPY, ReadMethod::PIN),
+ ::testing::Values(DoTimingReports::kYes, DoTimingReports::kNo));
+}
-INSTANTIATE_TEST_CASE_P(
- SimulatedEventLoopCopyDeathTest, AbstractEventLoopDeathTest,
- ::testing::Values(
- std::make_tuple([]() { return new SimulatedEventLoopTestFactory(); },
- ReadMethod::COPY)));
+INSTANTIATE_TEST_CASE_P(SimulatedEventLoopCommonTest, AbstractEventLoopTest,
+ CommonParameters());
-INSTANTIATE_TEST_CASE_P(SimulatedEventLoopPinTest, AbstractEventLoopTest,
- ::testing::Values(std::make_tuple(
- []() {
- return new SimulatedEventLoopTestFactory();
- },
- ReadMethod::PIN)));
-
-INSTANTIATE_TEST_CASE_P(
- SimulatedEventLoopPinDeathTest, AbstractEventLoopDeathTest,
- ::testing::Values(
- std::make_tuple([]() { return new SimulatedEventLoopTestFactory(); },
- ReadMethod::PIN)));
+INSTANTIATE_TEST_CASE_P(SimulatedEventLoopCommonDeathTest,
+ AbstractEventLoopDeathTest, CommonParameters());
// Test that creating an event and running the scheduler runs the event.
TEST(EventSchedulerTest, ScheduleEvent) {