Merge "Sort the RemoteMessageSender queue"
diff --git a/aos/events/event_loop_param_test.cc b/aos/events/event_loop_param_test.cc
index d92927b..a5b6b19 100644
--- a/aos/events/event_loop_param_test.cc
+++ b/aos/events/event_loop_param_test.cc
@@ -1053,23 +1053,31 @@
// Verify that we can change a timer's parameters during execution.
TEST_P(AbstractEventLoopTest, TimerChangeParameters) {
auto loop = MakePrimary();
- ::std::vector<::aos::monotonic_clock::time_point> iteration_list;
+ std::vector<monotonic_clock::time_point> iteration_list;
auto test_timer = loop->AddTimer([&iteration_list, &loop]() {
- iteration_list.push_back(loop->monotonic_now());
+ iteration_list.push_back(loop->context().monotonic_event_time);
});
- auto modifier_timer = loop->AddTimer([&loop, &test_timer]() {
- test_timer->Setup(loop->monotonic_now(), ::std::chrono::milliseconds(30));
+ monotonic_clock::time_point s;
+ auto modifier_timer = loop->AddTimer([&test_timer, &s]() {
+ test_timer->Setup(s + chrono::milliseconds(45), chrono::milliseconds(30));
});
- test_timer->Setup(loop->monotonic_now(), ::std::chrono::milliseconds(20));
- modifier_timer->Setup(loop->monotonic_now() +
- ::std::chrono::milliseconds(45));
- EndEventLoop(loop.get(), ::std::chrono::milliseconds(150));
+ s = loop->monotonic_now();
+ test_timer->Setup(s, chrono::milliseconds(20));
+ modifier_timer->Setup(s + chrono::milliseconds(45));
+ EndEventLoop(loop.get(), chrono::milliseconds(150));
Run();
EXPECT_EQ(iteration_list.size(), 7);
+ EXPECT_EQ(iteration_list[0], s);
+ EXPECT_EQ(iteration_list[1], s + chrono::milliseconds(20));
+ EXPECT_EQ(iteration_list[2], s + chrono::milliseconds(40));
+ EXPECT_EQ(iteration_list[3], s + chrono::milliseconds(45));
+ EXPECT_EQ(iteration_list[4], s + chrono::milliseconds(75));
+ EXPECT_EQ(iteration_list[5], s + chrono::milliseconds(105));
+ EXPECT_EQ(iteration_list[6], s + chrono::milliseconds(135));
}
// Verify that we can disable a timer during execution.
diff --git a/aos/network/timestamp_filter.cc b/aos/network/timestamp_filter.cc
index b4455a5..6479607 100644
--- a/aos/network/timestamp_filter.cc
+++ b/aos/network/timestamp_filter.cc
@@ -520,16 +520,15 @@
std::tuple<monotonic_clock::time_point, chrono::nanoseconds>>
NoncausalTimestampFilter::FindTimestamps(monotonic_clock::time_point ta) const {
CHECK_GT(timestamps_size(), 1u);
- // Linear search until this is proven to be a measurable slowdown.
- // If ta is outside our timestamp range, return the closest pair
- size_t index = 0;
- while (index < timestamps_size() - 2u) {
- if (std::get<0>(timestamp(index + 1)) > ta) {
- break;
- }
- ++index;
- }
- return std::make_pair(timestamp(index), timestamp(index + 1));
+ auto it = std::upper_bound(timestamps_.begin() + 1, timestamps_.end() - 1, ta,
+ [](monotonic_clock::time_point ta,
+ std::tuple<aos::monotonic_clock::time_point,
+ std::chrono::nanoseconds, bool>
+ t) { return ta < std::get<0>(t); });
+
+ const size_t index = std::distance(timestamps_.begin(), it);
+
+ return std::make_pair(timestamp(index - 1), timestamp(index));
}
chrono::nanoseconds NoncausalTimestampFilter::ExtrapolateOffset(