From 72678e11cc6b3dc295d7875ea54dee3774a83b49 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Tue, 22 May 2018 11:03:12 +0200 Subject: [PATCH] Adds unwrapped sequence number to sent packet info. This prepares for making the BBR implementation more identical to the implementation in Quic, this is to ensure that results are comparable. Bug: webrtc:8415 Change-Id: I6b182246c988dd4a95681c063dcaa779088d0e99 Reviewed-on: https://webrtc-review.googlesource.com/76481 Reviewed-by: Stefan Holmer Commit-Queue: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#23356} --- api/transport/network_types.h | 4 ++++ api/transport/test/network_control_tester.cc | 6 ++++-- api/transport/test/network_control_tester.h | 1 + .../rtp/send_side_congestion_controller.cc | 2 ++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/api/transport/network_types.h b/api/transport/network_types.h index a4d46380bc..0693f69c7a 100644 --- a/api/transport/network_types.h +++ b/api/transport/network_types.h @@ -85,6 +85,10 @@ struct SentPacket { Timestamp send_time = Timestamp::Infinity(); DataSize size = DataSize::Zero(); PacedPacketInfo pacing_info; + // Transport independent sequence number, any tracked packet should have a + // sequence number that is unique over the whole call and increasing by 1 for + // each packet. + int64_t sequence_number; }; // Transport level feedback diff --git a/api/transport/test/network_control_tester.cc b/api/transport/test/network_control_tester.cc index a34292ea43..a0bc8d4caa 100644 --- a/api/transport/test/network_control_tester.cc +++ b/api/transport/test/network_control_tester.cc @@ -62,6 +62,7 @@ NetworkControllerTester::NetworkControllerTester( NetworkControllerFactoryInterface* factory, NetworkControllerConfig initial_config) : current_time_(Timestamp::seconds(100000)), + packet_sequence_number_(1), accumulated_delay_(TimeDelta::ms(0)) { initial_config.constraints.at_time = current_time_; controller_ = factory->Create(initial_config); @@ -107,8 +108,9 @@ void NetworkControllerTester::RunSimulation(TimeDelta duration, } if (send_packet) { - SentPacket sent_packet = - next_packet(state_, current_time_, packet_interval); + SentPacket sent_packet; + sent_packet = next_packet(state_, current_time_, packet_interval); + sent_packet.sequence_number = packet_sequence_number_++; Update(&state_, controller_->OnSentPacket(sent_packet)); outstanding_packets_.push_back(SimulateSend( sent_packet, packet_interval, propagation_delay, actual_bandwidth)); diff --git a/api/transport/test/network_control_tester.h b/api/transport/test/network_control_tester.h index 43c6503a69..df52a9bf82 100644 --- a/api/transport/test/network_control_tester.h +++ b/api/transport/test/network_control_tester.h @@ -66,6 +66,7 @@ class NetworkControllerTester { std::unique_ptr controller_; TimeDelta process_interval_ = TimeDelta::PlusInfinity(); Timestamp current_time_; + int64_t packet_sequence_number_; TimeDelta accumulated_delay_; std::deque outstanding_packets_; NetworkControlUpdate state_; diff --git a/modules/congestion_controller/rtp/send_side_congestion_controller.cc b/modules/congestion_controller/rtp/send_side_congestion_controller.cc index 00224bd328..fa010e8234 100644 --- a/modules/congestion_controller/rtp/send_side_congestion_controller.cc +++ b/modules/congestion_controller/rtp/send_side_congestion_controller.cc @@ -61,6 +61,7 @@ PacketResult NetworkPacketFeedbackFromRtpPacketFeedback( feedback.receive_time = Timestamp::ms(pf.arrival_time_ms); if (pf.send_time_ms != webrtc::PacketFeedback::kNoSendTime) { feedback.sent_packet = SentPacket(); + feedback.sent_packet->sequence_number = pf.long_sequence_number; feedback.sent_packet->send_time = Timestamp::ms(pf.send_time_ms); feedback.sent_packet->size = DataSize::bytes(pf.payload_size); feedback.sent_packet->pacing_info = pf.pacing_info; @@ -542,6 +543,7 @@ void SendSideCongestionController::OnSentPacket( SentPacket msg; msg.size = DataSize::bytes(packet->payload_size); msg.send_time = Timestamp::ms(packet->send_time_ms); + msg.sequence_number = packet->long_sequence_number; task_queue_->PostTask([this, msg]() { RTC_DCHECK_RUN_ON(task_queue_); if (controller_)