mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
Add option to provide Environment for CongestionConroller construction
This would allow network controllers, GoogCcNetworkController in particular to have access to Environment at construction and thus it can rely on propagated field trials and won't need to fallback to the global field trial string Bug: webrtc:42220378 Change-Id: I36099522e3866a89a8c8d6303da03f7d5b1cad8e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/350201 Reviewed-by: Björn Terelius <terelius@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42260}
This commit is contained in:
parent
5f3fc5028f
commit
f20ed3e8ad
9 changed files with 28 additions and 32 deletions
|
@ -39,6 +39,7 @@ rtc_library("network_control") {
|
|||
|
||||
deps = [
|
||||
"../../api:field_trials_view",
|
||||
"../environment",
|
||||
"../rtc_event_log",
|
||||
"../units:data_rate",
|
||||
"../units:data_size",
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <memory>
|
||||
|
||||
#include "absl/base/attributes.h"
|
||||
#include "api/environment/environment.h"
|
||||
#include "api/field_trials_view.h"
|
||||
#include "api/rtc_event_log/rtc_event_log.h"
|
||||
#include "api/transport/network_types.h"
|
||||
|
@ -35,6 +36,12 @@ class TargetTransferRateObserver {
|
|||
// Configuration sent to factory create function. The parameters here are
|
||||
// optional to use for a network controller implementation.
|
||||
struct NetworkControllerConfig {
|
||||
// TODO: bugs.webrtc.org/42220378 - Delete the default constructor and
|
||||
// thus make Environment (including field trials) a required parameter.
|
||||
[[deprecated]] NetworkControllerConfig() = default;
|
||||
explicit NetworkControllerConfig(const Environment& env)
|
||||
: key_value_config(&env.field_trials()), event_log(&env.event_log()) {}
|
||||
|
||||
// The initial constraints to start with, these can be changed at any later
|
||||
// time by calls to OnTargetRateConstraints. Note that the starting rate
|
||||
// has to be set initially to provide a starting state for the network
|
||||
|
|
|
@ -90,6 +90,7 @@ RtpTransportControllerSend::RtpTransportControllerSend(
|
|||
process_interval_(controller_factory_fallback_->GetProcessInterval()),
|
||||
last_report_block_time_(
|
||||
Timestamp::Millis(env_.clock().TimeInMilliseconds())),
|
||||
initial_config_(env_),
|
||||
reset_feedback_on_route_change_(
|
||||
!env_.field_trials().IsEnabled("WebRTC-Bwe-NoFeedbackReset")),
|
||||
add_pacing_to_cwin_(env_.field_trials().IsEnabled(
|
||||
|
@ -105,8 +106,6 @@ RtpTransportControllerSend::RtpTransportControllerSend(
|
|||
env_.field_trials().Lookup("WebRTC-Bwe-NetworkRouteConstraints"));
|
||||
initial_config_.constraints =
|
||||
ConvertConstraints(config.bitrate_config, &env_.clock());
|
||||
initial_config_.event_log = &env_.event_log();
|
||||
initial_config_.key_value_config = &env_.field_trials();
|
||||
RTC_DCHECK(config.bitrate_config.start_bitrate_bps > 0);
|
||||
|
||||
pacer_.SetPacingRates(
|
||||
|
|
|
@ -339,6 +339,8 @@ if (rtc_include_tests) {
|
|||
":send_side_bwe",
|
||||
"../../../api:field_trials_view",
|
||||
"../../../api:network_state_predictor_api",
|
||||
"../../../api/environment",
|
||||
"../../../api/environment:environment_factory",
|
||||
"../../../api/rtc_event_log",
|
||||
"../../../api/test/network_emulation",
|
||||
"../../../api/test/network_emulation:create_cross_traffic",
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
#include "absl/strings/string_view.h"
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/environment/environment.h"
|
||||
#include "api/environment/environment_factory.h"
|
||||
#include "api/test/network_emulation/create_cross_traffic.h"
|
||||
#include "api/test/network_emulation/cross_traffic.h"
|
||||
#include "api/transport/goog_cc_factory.h"
|
||||
|
@ -274,7 +276,7 @@ class NetworkControllerTestFixture {
|
|||
int starting_bandwidth_kbps = kInitialBitrateKbps,
|
||||
int min_data_rate_kbps = 0,
|
||||
int max_data_rate_kbps = 5 * kInitialBitrateKbps) {
|
||||
NetworkControllerConfig config;
|
||||
NetworkControllerConfig config(env_);
|
||||
config.constraints.at_time = Timestamp::Zero();
|
||||
config.constraints.min_data_rate =
|
||||
DataRate::KilobitsPerSec(min_data_rate_kbps);
|
||||
|
@ -282,11 +284,11 @@ class NetworkControllerTestFixture {
|
|||
DataRate::KilobitsPerSec(max_data_rate_kbps);
|
||||
config.constraints.starting_rate =
|
||||
DataRate::KilobitsPerSec(starting_bandwidth_kbps);
|
||||
config.event_log = &event_log_;
|
||||
return config;
|
||||
}
|
||||
|
||||
NiceMock<MockRtcEventLog> event_log_;
|
||||
const Environment env_ = CreateEnvironment(&event_log_);
|
||||
GoogCcNetworkControllerFactory factory_;
|
||||
};
|
||||
|
||||
|
|
|
@ -111,6 +111,7 @@ if (rtc_include_tests && !build_with_chromium) {
|
|||
":pcc_controller",
|
||||
":rtt_tracker",
|
||||
":utility_function",
|
||||
"../../../api/environment:environment_factory",
|
||||
"../../../api/transport:network_control",
|
||||
"../../../api/units:data_rate",
|
||||
"../../../api/units:data_size",
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include <memory>
|
||||
|
||||
#include "api/environment/environment_factory.h"
|
||||
#include "modules/congestion_controller/pcc/pcc_factory.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
@ -41,35 +42,19 @@ inline Matcher<TargetTransferRate> TargetRateCloseTo(DataRate rate) {
|
|||
AllOf(Ge(min_data_rate), Le(max_data_rate)));
|
||||
}
|
||||
|
||||
NetworkControllerConfig InitialConfig(
|
||||
int starting_bandwidth_kbps = kInitialBitrate.kbps(),
|
||||
int min_data_rate_kbps = 0,
|
||||
int max_data_rate_kbps = 5 * kInitialBitrate.kbps()) {
|
||||
NetworkControllerConfig config;
|
||||
config.constraints.at_time = kDefaultStartTime;
|
||||
config.constraints.min_data_rate =
|
||||
DataRate::KilobitsPerSec(min_data_rate_kbps);
|
||||
config.constraints.max_data_rate =
|
||||
DataRate::KilobitsPerSec(max_data_rate_kbps);
|
||||
config.constraints.starting_rate =
|
||||
DataRate::KilobitsPerSec(starting_bandwidth_kbps);
|
||||
return config;
|
||||
}
|
||||
|
||||
ProcessInterval InitialProcessInterval() {
|
||||
ProcessInterval process_interval;
|
||||
process_interval.at_time = kDefaultStartTime;
|
||||
return process_interval;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST(PccNetworkControllerTest, SendsConfigurationOnFirstProcess) {
|
||||
std::unique_ptr<NetworkControllerInterface> controller_;
|
||||
controller_.reset(new pcc::PccNetworkController(InitialConfig()));
|
||||
Environment env = CreateEnvironment();
|
||||
NetworkControllerConfig config(env);
|
||||
config.constraints.at_time = kDefaultStartTime;
|
||||
config.constraints.min_data_rate = DataRate::Zero();
|
||||
config.constraints.max_data_rate = 5 * kInitialBitrate;
|
||||
config.constraints.starting_rate = kInitialBitrate;
|
||||
pcc::PccNetworkController controller(config);
|
||||
|
||||
NetworkControlUpdate update =
|
||||
controller_->OnProcessInterval(InitialProcessInterval());
|
||||
controller.OnProcessInterval({.at_time = kDefaultStartTime});
|
||||
EXPECT_THAT(*update.target_rate, TargetRateCloseTo(kInitialBitrate));
|
||||
EXPECT_THAT(*update.pacer_config,
|
||||
Property(&PacerConfig::data_rate, Ge(kInitialBitrate)));
|
||||
|
|
|
@ -1651,11 +1651,10 @@ void EventLogAnalyzer::CreateSendSideBweSimulationGraph(Plot* plot) {
|
|||
TimeDelta process_interval = factory.GetProcessInterval();
|
||||
// TODO(holmer): Log the call config and use that here instead.
|
||||
static const uint32_t kDefaultStartBitrateBps = 300000;
|
||||
NetworkControllerConfig cc_config;
|
||||
NetworkControllerConfig cc_config(CreateEnvironment(&null_event_log));
|
||||
cc_config.constraints.at_time = Timestamp::Micros(clock.TimeInMicroseconds());
|
||||
cc_config.constraints.starting_rate =
|
||||
DataRate::BitsPerSec(kDefaultStartBitrateBps);
|
||||
cc_config.event_log = &null_event_log;
|
||||
auto goog_cc = factory.Create(cc_config);
|
||||
|
||||
TimeSeries time_series("Delay-based estimate", LineStyle::kStep,
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "api/environment/environment_factory.h"
|
||||
#include "api/transport/network_control.h"
|
||||
#include "api/transport/network_types.h"
|
||||
#include "api/units/data_rate.h"
|
||||
|
@ -46,11 +47,10 @@ void LogBasedNetworkControllerSimulation::HandleStateUpdate(
|
|||
|
||||
void LogBasedNetworkControllerSimulation::ProcessUntil(Timestamp to_time) {
|
||||
if (last_process_.IsInfinite()) {
|
||||
NetworkControllerConfig config;
|
||||
NetworkControllerConfig config(CreateEnvironment(&null_event_log_));
|
||||
config.constraints.at_time = to_time;
|
||||
config.constraints.min_data_rate = DataRate::KilobitsPerSec(30);
|
||||
config.constraints.starting_rate = DataRate::KilobitsPerSec(300);
|
||||
config.event_log = &null_event_log_;
|
||||
controller_ = factory_->Create(config);
|
||||
}
|
||||
if (last_process_.IsInfinite() ||
|
||||
|
|
Loading…
Reference in a new issue