diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn index cd8c01b6df..12200a630d 100644 --- a/api/transport/BUILD.gn +++ b/api/transport/BUILD.gn @@ -43,6 +43,7 @@ rtc_library("network_control") { "../units:data_size", "../units:time_delta", "../units:timestamp", + "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/types:optional", ] } diff --git a/api/transport/network_control.h b/api/transport/network_control.h index 1ba65eee2c..6fc1f7c0d1 100644 --- a/api/transport/network_control.h +++ b/api/transport/network_control.h @@ -14,6 +14,7 @@ #include +#include "absl/base/attributes.h" #include "api/rtc_event_log/rtc_event_log.h" #include "api/transport/network_types.h" #include "api/transport/webrtc_key_value_config.h" @@ -60,32 +61,42 @@ class NetworkControllerInterface { virtual ~NetworkControllerInterface() = default; // Called when network availabilty changes. - virtual NetworkControlUpdate OnNetworkAvailability(NetworkAvailability) = 0; + virtual NetworkControlUpdate OnNetworkAvailability(NetworkAvailability) + ABSL_MUST_USE_RESULT = 0; // Called when the receiving or sending endpoint changes address. - virtual NetworkControlUpdate OnNetworkRouteChange(NetworkRouteChange) = 0; + virtual NetworkControlUpdate OnNetworkRouteChange(NetworkRouteChange) + ABSL_MUST_USE_RESULT = 0; // Called periodically with a periodicy as specified by // NetworkControllerFactoryInterface::GetProcessInterval. - virtual NetworkControlUpdate OnProcessInterval(ProcessInterval) = 0; + virtual NetworkControlUpdate OnProcessInterval(ProcessInterval) + ABSL_MUST_USE_RESULT = 0; // Called when remotely calculated bitrate is received. - virtual NetworkControlUpdate OnRemoteBitrateReport(RemoteBitrateReport) = 0; + virtual NetworkControlUpdate OnRemoteBitrateReport(RemoteBitrateReport) + ABSL_MUST_USE_RESULT = 0; // Called round trip time has been calculated by protocol specific mechanisms. - virtual NetworkControlUpdate OnRoundTripTimeUpdate(RoundTripTimeUpdate) = 0; + virtual NetworkControlUpdate OnRoundTripTimeUpdate(RoundTripTimeUpdate) + ABSL_MUST_USE_RESULT = 0; // Called when a packet is sent on the network. - virtual NetworkControlUpdate OnSentPacket(SentPacket) = 0; + virtual NetworkControlUpdate OnSentPacket(SentPacket) + ABSL_MUST_USE_RESULT = 0; // Called when a packet is received from the remote client. - virtual NetworkControlUpdate OnReceivedPacket(ReceivedPacket) = 0; + virtual NetworkControlUpdate OnReceivedPacket(ReceivedPacket) + ABSL_MUST_USE_RESULT = 0; // Called when the stream specific configuration has been updated. - virtual NetworkControlUpdate OnStreamsConfig(StreamsConfig) = 0; + virtual NetworkControlUpdate OnStreamsConfig(StreamsConfig) + ABSL_MUST_USE_RESULT = 0; // Called when target transfer rate constraints has been changed. - virtual NetworkControlUpdate OnTargetRateConstraints( - TargetRateConstraints) = 0; + virtual NetworkControlUpdate OnTargetRateConstraints(TargetRateConstraints) + ABSL_MUST_USE_RESULT = 0; // Called when a protocol specific calculation of packet loss has been made. - virtual NetworkControlUpdate OnTransportLossReport(TransportLossReport) = 0; + virtual NetworkControlUpdate OnTransportLossReport(TransportLossReport) + ABSL_MUST_USE_RESULT = 0; // Called with per packet feedback regarding receive time. virtual NetworkControlUpdate OnTransportPacketsFeedback( - TransportPacketsFeedback) = 0; + TransportPacketsFeedback) ABSL_MUST_USE_RESULT = 0; // Called with network state estimate updates. - virtual NetworkControlUpdate OnNetworkStateEstimate(NetworkStateEstimate) = 0; + virtual NetworkControlUpdate OnNetworkStateEstimate(NetworkStateEstimate) + ABSL_MUST_USE_RESULT = 0; }; // NetworkControllerFactoryInterface is an interface for creating a network diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc index 4e8d021144..83e0318771 100644 --- a/call/rtp_transport_controller_send.cc +++ b/call/rtp_transport_controller_send.cc @@ -480,7 +480,7 @@ void RtpTransportControllerSend::OnRemoteNetworkEstimate( task_queue_.PostTask([this, estimate] { RTC_DCHECK_RUN_ON(&task_queue_); if (controller_) - controller_->OnNetworkStateEstimate(estimate); + PostUpdates(controller_->OnNetworkStateEstimate(estimate)); }); } diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc b/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc index 9503ada774..0f73c7b52b 100644 --- a/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc +++ b/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc @@ -146,7 +146,7 @@ class GoogCcNetworkControllerTest : public ::testing::Test { // prescribing on which iterations it must change (like a mock would). void TargetBitrateTrackingSetup() { controller_ = factory_.Create(InitialConfig()); - controller_->OnProcessInterval(DefaultInterval()); + OnUpdate(controller_->OnProcessInterval(DefaultInterval())); } NetworkControllerConfig InitialConfig( @@ -216,7 +216,7 @@ class GoogCcNetworkControllerTest : public ::testing::Test { CreateResult(current_time_.ms() + delay_buildup, current_time_.ms(), kPayloadSize, PacedPacketInfo()); delay_buildup += delay; - controller_->OnSentPacket(packet.sent_packet); + OnUpdate(controller_->OnSentPacket(packet.sent_packet)); TransportPacketsFeedback feedback; feedback.feedback_time = packet.receive_time; feedback.packet_feedbacks.push_back(packet); @@ -235,17 +235,19 @@ class GoogCcNetworkControllerTest : public ::testing::Test { TEST_F(GoogCcNetworkControllerTest, ReactsToChangedNetworkConditions) { // Test no change. AdvanceTimeMilliseconds(25); - controller_->OnProcessInterval(DefaultInterval()); + OnUpdate(controller_->OnProcessInterval(DefaultInterval())); NetworkControlUpdate update; - controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate * 2)); + OnUpdate(controller_->OnRemoteBitrateReport( + CreateBitrateReport(kInitialBitrate * 2))); AdvanceTimeMilliseconds(25); update = controller_->OnProcessInterval(DefaultInterval()); EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate * 2); EXPECT_EQ(update.pacer_config->data_rate(), kInitialBitrate * 2 * kDefaultPacingRate); - controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate)); + OnUpdate( + controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate))); AdvanceTimeMilliseconds(25); update = controller_->OnProcessInterval(DefaultInterval()); EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate);