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_)