diff --git a/webrtc/tools/network_tester/packet_sender.cc b/webrtc/tools/network_tester/packet_sender.cc index a0629d9de8..6bd4dd075c 100644 --- a/webrtc/tools/network_tester/packet_sender.cc +++ b/webrtc/tools/network_tester/packet_sender.cc @@ -10,6 +10,7 @@ #include "webrtc/tools/network_tester/packet_sender.h" +#include #include #include @@ -24,20 +25,23 @@ namespace { class SendPacketTask : public rtc::QueuedTask { public: explicit SendPacketTask(PacketSender* packet_sender) - : packet_sender_(packet_sender) {} + : target_time_ms_(rtc::TimeMillis()), packet_sender_(packet_sender) {} private: bool Run() override { if (packet_sender_->IsSending()) { packet_sender_->SendPacket(); + target_time_ms_ += packet_sender_->GetSendIntervalMs(); + int64_t delay_ms = std::max(static_cast(0), + target_time_ms_ - rtc::TimeMillis()); rtc::TaskQueue::Current()->PostDelayedTask( - std::unique_ptr(this), - packet_sender_->GetSendIntervalMs()); + std::unique_ptr(this), delay_ms); return false; } else { return true; } } + int64_t target_time_ms_; PacketSender* const packet_sender_; }; diff --git a/webrtc/tools/network_tester/test_controller.cc b/webrtc/tools/network_tester/test_controller.cc index 51deac7bb7..40af6437cb 100644 --- a/webrtc/tools/network_tester/test_controller.cc +++ b/webrtc/tools/network_tester/test_controller.cc @@ -22,8 +22,8 @@ TestController::TestController(int min_port, local_test_done_(false), remote_test_done_(false) { RTC_DCHECK_RUN_ON(&test_controller_thread_checker_); - send_data_.fill(42); packet_sender_checker_.Detach(); + send_data_.fill(42); auto socket = std::unique_ptr(socket_factory_.CreateUdpSocket( rtc::SocketAddress(rtc::GetAnyIP(AF_INET), 0), min_port, max_port)); @@ -53,10 +53,11 @@ void TestController::SendData(const NetworkTesterPacket& packet, // Can be call from packet_sender or from test_controller thread. size_t packet_size = packet.ByteSize(); send_data_[0] = packet_size; + packet_size++; packet.SerializeToArray(&send_data_[1], std::numeric_limits::max()); if (data_size && *data_size > packet_size) packet_size = *data_size; - udp_transport_->SendPacket(send_data_.data(), packet_size + 1, + udp_transport_->SendPacket(send_data_.data(), packet_size, rtc::PacketOptions(), 0); }