diff --git a/logging/BUILD.gn b/logging/BUILD.gn index 3871193bad..6340b49e74 100644 --- a/logging/BUILD.gn +++ b/logging/BUILD.gn @@ -280,7 +280,7 @@ if (rtc_enable_protobuf) { "../api:libjingle_peerconnection_api", "../call:video_stream_api", "../modules/audio_coding:audio_network_adaptor", - "../modules/congestion_controller:transport_feedback", + "../modules/congestion_controller/rtp:transport_feedback", "../modules/remote_bitrate_estimator:remote_bitrate_estimator", "../modules/rtp_rtcp", "../modules/rtp_rtcp:rtp_rtcp_format", diff --git a/logging/rtc_event_log/rtc_event_log_parser_new.cc b/logging/rtc_event_log/rtc_event_log_parser_new.cc index 5fa69ed637..64d2e13479 100644 --- a/logging/rtc_event_log/rtc_event_log_parser_new.cc +++ b/logging/rtc_event_log/rtc_event_log_parser_new.cc @@ -26,7 +26,7 @@ #include "api/rtpparameters.h" #include "logging/rtc_event_log/rtc_event_log.h" #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h" -#include "modules/congestion_controller/transport_feedback_adapter.h" +#include "modules/congestion_controller/rtp/transport_feedback_adapter.h" #include "modules/remote_bitrate_estimator/include/bwe_defines.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/byte_io.h" @@ -1438,7 +1438,8 @@ const std::vector GetNetworkTrace( clock.AdvanceTimeMicroseconds(time_us - clock.TimeInMicroseconds()); if (clock.TimeInMicroseconds() >= NextRtcpTime()) { RTC_DCHECK_EQ(clock.TimeInMicroseconds(), NextRtcpTime()); - feedback_adapter.OnTransportFeedback(rtcp_iterator->transport_feedback); + feedback_adapter.ProcessTransportFeedback( + rtcp_iterator->transport_feedback); std::vector feedback = feedback_adapter.GetTransportFeedbackVector(); SortPacketFeedbackVectorWithLoss(&feedback); @@ -1452,14 +1453,25 @@ const std::vector GetNetworkTrace( if (clock.TimeInMicroseconds() >= NextRtpTime()) { RTC_DCHECK_EQ(clock.TimeInMicroseconds(), NextRtpTime()); const RtpPacketType& rtp_packet = *rtp_iterator->second; + rtc::SentPacket sent_packet; + sent_packet.send_time_ms = rtp_packet.rtp.log_time_ms(); + sent_packet.info.packet_size_bytes = rtp_packet.rtp.total_length; if (rtp_packet.rtp.header.extension.hasTransportSequenceNumber) { feedback_adapter.AddPacket( rtp_packet.rtp.header.ssrc, rtp_packet.rtp.header.extension.transportSequenceNumber, rtp_packet.rtp.total_length, PacedPacketInfo()); - feedback_adapter.OnSentPacket( - rtp_packet.rtp.header.extension.transportSequenceNumber, - rtp_packet.rtp.log_time_ms()); + sent_packet.packet_id = + rtp_packet.rtp.header.extension.transportSequenceNumber; + sent_packet.info.included_in_feedback = true; + sent_packet.info.included_in_allocation = true; + feedback_adapter.ProcessSentPacket(sent_packet); + } else { + sent_packet.info.included_in_feedback = false; + // TODO(srte): Make it possible to indicate that all packets are part of + // allocation. + sent_packet.info.included_in_allocation = false; + feedback_adapter.ProcessSentPacket(sent_packet); } ++rtp_iterator; } diff --git a/modules/congestion_controller/include/send_side_congestion_controller.h b/modules/congestion_controller/include/send_side_congestion_controller.h index ba26272e6f..06856a3c9d 100644 --- a/modules/congestion_controller/include/send_side_congestion_controller.h +++ b/modules/congestion_controller/include/send_side_congestion_controller.h @@ -136,7 +136,7 @@ class SendSideCongestionController RTC_GUARDED_BY(probe_lock_); const std::unique_ptr retransmission_rate_limiter_; - TransportFeedbackAdapter transport_feedback_adapter_; + LegacyTransportFeedbackAdapter transport_feedback_adapter_; rtc::CriticalSection network_state_lock_; uint32_t last_reported_bitrate_bps_ RTC_GUARDED_BY(network_state_lock_); uint8_t last_reported_fraction_loss_ RTC_GUARDED_BY(network_state_lock_); diff --git a/modules/congestion_controller/rtp/transport_feedback_adapter.cc b/modules/congestion_controller/rtp/transport_feedback_adapter.cc index 6ff1740cce..348070898f 100644 --- a/modules/congestion_controller/rtp/transport_feedback_adapter.cc +++ b/modules/congestion_controller/rtp/transport_feedback_adapter.cc @@ -19,7 +19,6 @@ #include "rtc_base/numerics/mod_ops.h" namespace webrtc { -namespace webrtc_cc { namespace { void SortPacketFeedbackVector(std::vector* input) { std::sort(input->begin(), input->end(), PacketFeedbackComparator()); @@ -257,5 +256,4 @@ std::vector TransportFeedbackAdapter::GetTransportFeedbackVector() const { return last_packet_feedback_vector_; } -} // namespace webrtc_cc } // namespace webrtc diff --git a/modules/congestion_controller/rtp/transport_feedback_adapter.h b/modules/congestion_controller/rtp/transport_feedback_adapter.h index 8bc5547afc..1741d6d66a 100644 --- a/modules/congestion_controller/rtp/transport_feedback_adapter.h +++ b/modules/congestion_controller/rtp/transport_feedback_adapter.h @@ -30,7 +30,6 @@ namespace rtcp { class TransportFeedback; } // namespace rtcp -namespace webrtc_cc { class TransportFeedbackAdapter { public: explicit TransportFeedbackAdapter(const Clock* clock); @@ -76,7 +75,6 @@ class TransportFeedbackAdapter { RTC_GUARDED_BY(&observers_lock_); }; -} // namespace webrtc_cc } // namespace webrtc #endif // MODULES_CONGESTION_CONTROLLER_RTP_TRANSPORT_FEEDBACK_ADAPTER_H_ diff --git a/modules/congestion_controller/transport_feedback_adapter.cc b/modules/congestion_controller/transport_feedback_adapter.cc index 7f07c73d60..b8b620d008 100644 --- a/modules/congestion_controller/transport_feedback_adapter.cc +++ b/modules/congestion_controller/transport_feedback_adapter.cc @@ -26,7 +26,8 @@ const int64_t kBaseTimestampScaleFactor = rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 8); const int64_t kBaseTimestampRangeSizeUs = kBaseTimestampScaleFactor * (1 << 24); -TransportFeedbackAdapter::TransportFeedbackAdapter(const Clock* clock) +LegacyTransportFeedbackAdapter::LegacyTransportFeedbackAdapter( + const Clock* clock) : send_time_history_(clock, kSendTimeHistoryWindowMs), clock_(clock), current_offset_ms_(kNoTimestamp), @@ -34,11 +35,11 @@ TransportFeedbackAdapter::TransportFeedbackAdapter(const Clock* clock) local_net_id_(0), remote_net_id_(0) {} -TransportFeedbackAdapter::~TransportFeedbackAdapter() { +LegacyTransportFeedbackAdapter::~LegacyTransportFeedbackAdapter() { RTC_DCHECK(observers_.empty()); } -void TransportFeedbackAdapter::RegisterPacketFeedbackObserver( +void LegacyTransportFeedbackAdapter::RegisterPacketFeedbackObserver( PacketFeedbackObserver* observer) { rtc::CritScope cs(&observers_lock_); RTC_DCHECK(observer); @@ -47,7 +48,7 @@ void TransportFeedbackAdapter::RegisterPacketFeedbackObserver( observers_.push_back(observer); } -void TransportFeedbackAdapter::DeRegisterPacketFeedbackObserver( +void LegacyTransportFeedbackAdapter::DeRegisterPacketFeedbackObserver( PacketFeedbackObserver* observer) { rtc::CritScope cs(&observers_lock_); RTC_DCHECK(observer); @@ -56,10 +57,11 @@ void TransportFeedbackAdapter::DeRegisterPacketFeedbackObserver( observers_.erase(it); } -void TransportFeedbackAdapter::AddPacket(uint32_t ssrc, - uint16_t sequence_number, - size_t length, - const PacedPacketInfo& pacing_info) { +void LegacyTransportFeedbackAdapter::AddPacket( + uint32_t ssrc, + uint16_t sequence_number, + size_t length, + const PacedPacketInfo& pacing_info) { { rtc::CritScope cs(&lock_); const int64_t creation_time_ms = clock_->TimeInMilliseconds(); @@ -76,20 +78,21 @@ void TransportFeedbackAdapter::AddPacket(uint32_t ssrc, } } -void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, - int64_t send_time_ms) { +void LegacyTransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, + int64_t send_time_ms) { rtc::CritScope cs(&lock_); send_time_history_.OnSentPacket(sequence_number, send_time_ms); } -void TransportFeedbackAdapter::SetNetworkIds(uint16_t local_id, - uint16_t remote_id) { +void LegacyTransportFeedbackAdapter::SetNetworkIds(uint16_t local_id, + uint16_t remote_id) { rtc::CritScope cs(&lock_); local_net_id_ = local_id; remote_net_id_ = remote_id; } -std::vector TransportFeedbackAdapter::GetPacketFeedbackVector( +std::vector +LegacyTransportFeedbackAdapter::GetPacketFeedbackVector( const rtcp::TransportFeedback& feedback) { int64_t timestamp_us = feedback.GetBaseTimeUs(); int64_t now_ms = clock_->TimeInMilliseconds(); @@ -177,7 +180,7 @@ std::vector TransportFeedbackAdapter::GetPacketFeedbackVector( return packet_feedback_vector; } -void TransportFeedbackAdapter::OnTransportFeedback( +void LegacyTransportFeedbackAdapter::OnTransportFeedback( const rtcp::TransportFeedback& feedback) { last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); { @@ -189,17 +192,17 @@ void TransportFeedbackAdapter::OnTransportFeedback( } std::vector -TransportFeedbackAdapter::GetTransportFeedbackVector() const { +LegacyTransportFeedbackAdapter::GetTransportFeedbackVector() const { return last_packet_feedback_vector_; } -absl::optional TransportFeedbackAdapter::GetMinFeedbackLoopRtt() +absl::optional LegacyTransportFeedbackAdapter::GetMinFeedbackLoopRtt() const { rtc::CritScope cs(&lock_); return min_feedback_rtt_; } -size_t TransportFeedbackAdapter::GetOutstandingBytes() const { +size_t LegacyTransportFeedbackAdapter::GetOutstandingBytes() const { rtc::CritScope cs(&lock_); return send_time_history_.GetOutstandingData(local_net_id_, remote_net_id_) .bytes(); diff --git a/modules/congestion_controller/transport_feedback_adapter.h b/modules/congestion_controller/transport_feedback_adapter.h index 206236ce8b..c6ac2ad9ad 100644 --- a/modules/congestion_controller/transport_feedback_adapter.h +++ b/modules/congestion_controller/transport_feedback_adapter.h @@ -29,10 +29,12 @@ namespace rtcp { class TransportFeedback; } // namespace rtcp -class TransportFeedbackAdapter { +// Deprecated, use version in +// modules/congeestion_controller/rtp/transport_feedback_adapter.h +class LegacyTransportFeedbackAdapter { public: - explicit TransportFeedbackAdapter(const Clock* clock); - virtual ~TransportFeedbackAdapter(); + explicit LegacyTransportFeedbackAdapter(const Clock* clock); + virtual ~LegacyTransportFeedbackAdapter(); void RegisterPacketFeedbackObserver(PacketFeedbackObserver* observer); void DeRegisterPacketFeedbackObserver(PacketFeedbackObserver* observer); diff --git a/modules/congestion_controller/transport_feedback_adapter_unittest.cc b/modules/congestion_controller/transport_feedback_adapter_unittest.cc index 39aa72e816..dc4eab13d6 100644 --- a/modules/congestion_controller/transport_feedback_adapter_unittest.cc +++ b/modules/congestion_controller/transport_feedback_adapter_unittest.cc @@ -52,7 +52,7 @@ class LegacyTransportFeedbackAdapterTest : public ::testing::Test { virtual ~LegacyTransportFeedbackAdapterTest() {} virtual void SetUp() { - adapter_.reset(new TransportFeedbackAdapter(&clock_)); + adapter_.reset(new LegacyTransportFeedbackAdapter(&clock_)); } virtual void TearDown() { adapter_.reset(); } @@ -75,7 +75,7 @@ class LegacyTransportFeedbackAdapterTest : public ::testing::Test { static constexpr uint32_t kSsrc = 8492; SimulatedClock clock_; - std::unique_ptr adapter_; + std::unique_ptr adapter_; }; TEST_F(LegacyTransportFeedbackAdapterTest, ObserverSanity) {