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}
This commit is contained in:
Danil Chapovalov 2019-10-21 10:51:08 +02:00 committed by Commit Bot
parent 9f5ae7b715
commit e34fb878b9
4 changed files with 33 additions and 19 deletions

View File

@ -43,6 +43,7 @@ rtc_library("network_control") {
"../units:data_size", "../units:data_size",
"../units:time_delta", "../units:time_delta",
"../units:timestamp", "../units:timestamp",
"//third_party/abseil-cpp/absl/base:core_headers",
"//third_party/abseil-cpp/absl/types:optional", "//third_party/abseil-cpp/absl/types:optional",
] ]
} }

View File

@ -14,6 +14,7 @@
#include <memory> #include <memory>
#include "absl/base/attributes.h"
#include "api/rtc_event_log/rtc_event_log.h" #include "api/rtc_event_log/rtc_event_log.h"
#include "api/transport/network_types.h" #include "api/transport/network_types.h"
#include "api/transport/webrtc_key_value_config.h" #include "api/transport/webrtc_key_value_config.h"
@ -60,32 +61,42 @@ class NetworkControllerInterface {
virtual ~NetworkControllerInterface() = default; virtual ~NetworkControllerInterface() = default;
// Called when network availabilty changes. // 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. // 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 // Called periodically with a periodicy as specified by
// NetworkControllerFactoryInterface::GetProcessInterval. // NetworkControllerFactoryInterface::GetProcessInterval.
virtual NetworkControlUpdate OnProcessInterval(ProcessInterval) = 0; virtual NetworkControlUpdate OnProcessInterval(ProcessInterval)
ABSL_MUST_USE_RESULT = 0;
// Called when remotely calculated bitrate is received. // 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. // 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. // 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. // 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. // 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. // Called when target transfer rate constraints has been changed.
virtual NetworkControlUpdate OnTargetRateConstraints( virtual NetworkControlUpdate OnTargetRateConstraints(TargetRateConstraints)
TargetRateConstraints) = 0; ABSL_MUST_USE_RESULT = 0;
// Called when a protocol specific calculation of packet loss has been made. // 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. // Called with per packet feedback regarding receive time.
virtual NetworkControlUpdate OnTransportPacketsFeedback( virtual NetworkControlUpdate OnTransportPacketsFeedback(
TransportPacketsFeedback) = 0; TransportPacketsFeedback) ABSL_MUST_USE_RESULT = 0;
// Called with network state estimate updates. // 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 // NetworkControllerFactoryInterface is an interface for creating a network

View File

@ -480,7 +480,7 @@ void RtpTransportControllerSend::OnRemoteNetworkEstimate(
task_queue_.PostTask([this, estimate] { task_queue_.PostTask([this, estimate] {
RTC_DCHECK_RUN_ON(&task_queue_); RTC_DCHECK_RUN_ON(&task_queue_);
if (controller_) if (controller_)
controller_->OnNetworkStateEstimate(estimate); PostUpdates(controller_->OnNetworkStateEstimate(estimate));
}); });
} }

View File

@ -146,7 +146,7 @@ class GoogCcNetworkControllerTest : public ::testing::Test {
// prescribing on which iterations it must change (like a mock would). // prescribing on which iterations it must change (like a mock would).
void TargetBitrateTrackingSetup() { void TargetBitrateTrackingSetup() {
controller_ = factory_.Create(InitialConfig()); controller_ = factory_.Create(InitialConfig());
controller_->OnProcessInterval(DefaultInterval()); OnUpdate(controller_->OnProcessInterval(DefaultInterval()));
} }
NetworkControllerConfig InitialConfig( NetworkControllerConfig InitialConfig(
@ -216,7 +216,7 @@ class GoogCcNetworkControllerTest : public ::testing::Test {
CreateResult(current_time_.ms() + delay_buildup, current_time_.ms(), CreateResult(current_time_.ms() + delay_buildup, current_time_.ms(),
kPayloadSize, PacedPacketInfo()); kPayloadSize, PacedPacketInfo());
delay_buildup += delay; delay_buildup += delay;
controller_->OnSentPacket(packet.sent_packet); OnUpdate(controller_->OnSentPacket(packet.sent_packet));
TransportPacketsFeedback feedback; TransportPacketsFeedback feedback;
feedback.feedback_time = packet.receive_time; feedback.feedback_time = packet.receive_time;
feedback.packet_feedbacks.push_back(packet); feedback.packet_feedbacks.push_back(packet);
@ -235,17 +235,19 @@ class GoogCcNetworkControllerTest : public ::testing::Test {
TEST_F(GoogCcNetworkControllerTest, ReactsToChangedNetworkConditions) { TEST_F(GoogCcNetworkControllerTest, ReactsToChangedNetworkConditions) {
// Test no change. // Test no change.
AdvanceTimeMilliseconds(25); AdvanceTimeMilliseconds(25);
controller_->OnProcessInterval(DefaultInterval()); OnUpdate(controller_->OnProcessInterval(DefaultInterval()));
NetworkControlUpdate update; NetworkControlUpdate update;
controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate * 2)); OnUpdate(controller_->OnRemoteBitrateReport(
CreateBitrateReport(kInitialBitrate * 2)));
AdvanceTimeMilliseconds(25); AdvanceTimeMilliseconds(25);
update = controller_->OnProcessInterval(DefaultInterval()); update = controller_->OnProcessInterval(DefaultInterval());
EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate * 2); EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate * 2);
EXPECT_EQ(update.pacer_config->data_rate(), EXPECT_EQ(update.pacer_config->data_rate(),
kInitialBitrate * 2 * kDefaultPacingRate); kInitialBitrate * 2 * kDefaultPacingRate);
controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate)); OnUpdate(
controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate)));
AdvanceTimeMilliseconds(25); AdvanceTimeMilliseconds(25);
update = controller_->OnProcessInterval(DefaultInterval()); update = controller_->OnProcessInterval(DefaultInterval());
EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate); EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate);