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:time_delta",
"../units:timestamp",
"//third_party/abseil-cpp/absl/base:core_headers",
"//third_party/abseil-cpp/absl/types:optional",
]
}

View File

@ -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 @@ 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

View File

@ -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));
});
}

View File

@ -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);