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