Clarify NetworkControl interface: result of each function must be used
Bug: None
Change-Id: Iff93513d36ed60d2c1bcbabb4dd5f8716e40d183
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/157860
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29558}
diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn
index cd8c01b..12200a6 100644
--- a/api/transport/BUILD.gn
+++ b/api/transport/BUILD.gn
@@ -43,6 +43,7 @@
"../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 1ba65ee..6fc1f7c 100644
--- a/api/transport/network_control.h
+++ b/api/transport/network_control.h
@@ -14,6 +14,7 @@
#include <memory>
+#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 @@
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 4e8d021..83e0318 100644
--- a/call/rtp_transport_controller_send.cc
+++ b/call/rtp_transport_controller_send.cc
@@ -480,7 +480,7 @@
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 9503ada..0f73c7b 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 @@
// 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 @@
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 @@
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);