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:
parent
9f5ae7b715
commit
e34fb878b9
@ -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",
|
||||
]
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user