Use Environment to create GoogCcNetworkController
Environment guarantees field trials are provided, thus GoogCcNetworkController doesn't need to fallback to the global field trials.
Bug: webrtc:42220378
Change-Id: Iff8e00504b43b074dc41b5ac9908fd0e2be18959
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/350540
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42300}
diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn
index 756e1cc..8f7bba72 100644
--- a/api/transport/BUILD.gn
+++ b/api/transport/BUILD.gn
@@ -88,7 +88,6 @@
"..:network_state_predictor_api",
"../../api/units:time_delta",
"../../modules/congestion_controller/goog_cc",
- "../../rtc_base:checks",
]
}
diff --git a/api/transport/goog_cc_factory.cc b/api/transport/goog_cc_factory.cc
index fa1c486..036a399 100644
--- a/api/transport/goog_cc_factory.cc
+++ b/api/transport/goog_cc_factory.cc
@@ -15,7 +15,6 @@
#include "api/units/time_delta.h"
#include "modules/congestion_controller/goog_cc/goog_cc_network_control.h"
-#include "rtc_base/checks.h"
namespace webrtc {
@@ -28,10 +27,9 @@
GoogCcConfig goog_cc_config;
goog_cc_config.feedback_only = factory_config_.feedback_only;
if (factory_config_.network_state_estimator_factory) {
- RTC_DCHECK(config.key_value_config);
goog_cc_config.network_state_estimator =
factory_config_.network_state_estimator_factory->Create(
- config.key_value_config);
+ &config.env.field_trials());
}
if (factory_config_.network_state_predictor_factory) {
goog_cc_config.network_state_predictor =
diff --git a/api/transport/network_control.h b/api/transport/network_control.h
index 3b76dff..c7a7a98 100644
--- a/api/transport/network_control.h
+++ b/api/transport/network_control.h
@@ -36,11 +36,9 @@
// 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()) {}
+ explicit NetworkControllerConfig(const Environment& env) : env(env) {}
+
+ Environment env;
// The initial constraints to start with, these can be changed at any later
// time by calls to OnTargetRateConstraints. Note that the starting rate
@@ -50,12 +48,6 @@
// Initial stream specific configuration, these are changed at any later time
// by calls to OnStreamsConfig.
StreamsConfig stream_based_config;
-
- // Optional override of configuration of WebRTC internals. Using nullptr here
- // indicates that the field trial API will be used.
- const FieldTrialsView* key_value_config = nullptr;
- // Optional override of event log.
- RtcEventLog* event_log = nullptr;
};
// NetworkControllerInterface is implemented by network controllers. A network
diff --git a/modules/congestion_controller/goog_cc/BUILD.gn b/modules/congestion_controller/goog_cc/BUILD.gn
index 656ccdb..dd7d2db 100644
--- a/modules/congestion_controller/goog_cc/BUILD.gn
+++ b/modules/congestion_controller/goog_cc/BUILD.gn
@@ -33,8 +33,8 @@
":send_side_bwe",
"../../../api:field_trials_view",
"../../../api:network_state_predictor_api",
+ "../../../api/environment",
"../../../api/rtc_event_log",
- "../../../api/transport:field_trial_based_config",
"../../../api/transport:network_control",
"../../../api/units:data_rate",
"../../../api/units:data_size",
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
index 7f958c9..cbaabfa 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
@@ -22,6 +22,7 @@
#include "absl/strings/match.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
+#include "api/environment/environment.h"
#include "api/field_trials_view.h"
#include "api/network_state_predictor.h"
#include "api/transport/network_control.h"
@@ -93,46 +94,45 @@
GoogCcNetworkController::GoogCcNetworkController(NetworkControllerConfig config,
GoogCcConfig goog_cc_config)
- : key_value_config_(config.key_value_config ? config.key_value_config
- : &trial_based_config_),
- event_log_(config.event_log),
+ : env_(config.env),
packet_feedback_only_(goog_cc_config.feedback_only),
safe_reset_on_route_change_("Enabled"),
safe_reset_acknowledged_rate_("ack"),
use_min_allocatable_as_lower_bound_(
- !key_value_config_->IsDisabled("WebRTC-Bwe-MinAllocAsLowerBound")),
- ignore_probes_lower_than_network_estimate_(!key_value_config_->IsDisabled(
- "WebRTC-Bwe-IgnoreProbesLowerThanNetworkStateEstimate")),
+ !env_.field_trials().IsDisabled("WebRTC-Bwe-MinAllocAsLowerBound")),
+ ignore_probes_lower_than_network_estimate_(
+ !env_.field_trials().IsDisabled(
+ "WebRTC-Bwe-IgnoreProbesLowerThanNetworkStateEstimate")),
limit_probes_lower_than_throughput_estimate_(
- !key_value_config_->IsDisabled(
+ !env_.field_trials().IsDisabled(
"WebRTC-Bwe-LimitProbesLowerThanThroughputEstimate")),
- rate_control_settings_(*key_value_config_),
- pace_at_max_of_bwe_and_lower_link_capacity_(key_value_config_->IsEnabled(
+ rate_control_settings_(env_.field_trials()),
+ pace_at_max_of_bwe_and_lower_link_capacity_(env_.field_trials().IsEnabled(
"WebRTC-Bwe-PaceAtMaxOfBweAndLowerLinkCapacity")),
limit_pacingfactor_by_upper_link_capacity_estimate_(
- key_value_config_->IsEnabled(
+ env_.field_trials().IsEnabled(
"WebRTC-Bwe-LimitPacingFactorByUpperLinkCapacityEstimate")),
probe_controller_(
- new ProbeController(key_value_config_, config.event_log)),
+ new ProbeController(&env_.field_trials(), &env_.event_log())),
congestion_window_pushback_controller_(
rate_control_settings_.UseCongestionWindowPushback()
? std::make_unique<CongestionWindowPushbackController>(
- *key_value_config_)
+ env_.field_trials())
: nullptr),
bandwidth_estimation_(
- std::make_unique<SendSideBandwidthEstimation>(key_value_config_,
- event_log_)),
- alr_detector_(
- std::make_unique<AlrDetector>(key_value_config_, config.event_log)),
- probe_bitrate_estimator_(new ProbeBitrateEstimator(config.event_log)),
+ std::make_unique<SendSideBandwidthEstimation>(&env_.field_trials(),
+ &env_.event_log())),
+ alr_detector_(std::make_unique<AlrDetector>(&env_.field_trials(),
+ &env_.event_log())),
+ probe_bitrate_estimator_(new ProbeBitrateEstimator(&env_.event_log())),
network_estimator_(std::move(goog_cc_config.network_state_estimator)),
network_state_predictor_(
std::move(goog_cc_config.network_state_predictor)),
- delay_based_bwe_(new DelayBasedBwe(key_value_config_,
- event_log_,
+ delay_based_bwe_(new DelayBasedBwe(&env_.field_trials(),
+ &env_.event_log(),
network_state_predictor_.get())),
acknowledged_bitrate_estimator_(
- AcknowledgedBitrateEstimatorInterface::Create(key_value_config_)),
+ AcknowledgedBitrateEstimatorInterface::Create(&env_.field_trials())),
initial_config_(config),
last_loss_based_target_rate_(*config.constraints.starting_rate),
last_pushback_target_rate_(last_loss_based_target_rate_),
@@ -148,7 +148,7 @@
RTC_DCHECK(config.constraints.at_time.IsFinite());
ParseFieldTrial(
{&safe_reset_on_route_change_, &safe_reset_acknowledged_rate_},
- key_value_config_->Lookup("WebRTC-Bwe-SafeResetOnRouteChange"));
+ env_.field_trials().Lookup("WebRTC-Bwe-SafeResetOnRouteChange"));
if (delay_based_bwe_)
delay_based_bwe_->SetMinBitrate(kCongestionControllerMinBitrate);
}
@@ -184,12 +184,12 @@
}
acknowledged_bitrate_estimator_ =
- AcknowledgedBitrateEstimatorInterface::Create(key_value_config_);
- probe_bitrate_estimator_.reset(new ProbeBitrateEstimator(event_log_));
+ AcknowledgedBitrateEstimatorInterface::Create(&env_.field_trials());
+ probe_bitrate_estimator_.reset(new ProbeBitrateEstimator(&env_.event_log()));
if (network_estimator_)
network_estimator_->OnRouteChange(msg);
- delay_based_bwe_.reset(new DelayBasedBwe(key_value_config_, event_log_,
- network_state_predictor_.get()));
+ delay_based_bwe_.reset(new DelayBasedBwe(
+ &env_.field_trials(), &env_.event_log(), network_state_predictor_.get()));
bandwidth_estimation_->OnRouteChange();
probe_controller_->Reset(msg.at_time);
NetworkControlUpdate update;
@@ -527,7 +527,7 @@
// changed to avoid the need for this check.
if (estimate_ && (!prev_estimate || estimate_->last_feed_time !=
prev_estimate->last_feed_time)) {
- event_log_->Log(std::make_unique<RtcEventRemoteEstimate>(
+ env_.event_log().Log(std::make_unique<RtcEventRemoteEstimate>(
estimate_->link_capacity_lower, estimate_->link_capacity_upper));
probe_controller_->SetNetworkStateEstimate(*estimate_);
}
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control.h b/modules/congestion_controller/goog_cc/goog_cc_network_control.h
index 2b4fb6e..63691a7 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control.h
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.h
@@ -20,8 +20,6 @@
#include "absl/types/optional.h"
#include "api/field_trials_view.h"
#include "api/network_state_predictor.h"
-#include "api/rtc_event_log/rtc_event_log.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/transport/network_control.h"
#include "api/transport/network_types.h"
#include "api/units/data_rate.h"
@@ -84,10 +82,8 @@
Timestamp at_time);
void UpdateCongestionWindowSize();
PacerConfig GetPacingRates(Timestamp at_time) const;
- const FieldTrialBasedConfig trial_based_config_;
- const FieldTrialsView* const key_value_config_;
- RtcEventLog* const event_log_;
+ const Environment env_;
const bool packet_feedback_only_;
FieldTrialFlag safe_reset_on_route_change_;
FieldTrialFlag safe_reset_acknowledged_rate_;