diff --git a/modules/congestion_controller/include/receive_side_congestion_controller.h b/modules/congestion_controller/include/receive_side_congestion_controller.h index b4cbfb6947..9cbad1187a 100644 --- a/modules/congestion_controller/include/receive_side_congestion_controller.h +++ b/modules/congestion_controller/include/receive_side_congestion_controller.h @@ -42,12 +42,6 @@ class ReceiveSideCongestionController : public CallStatsObserver { RembThrottler::RembSender remb_sender, absl::Nullable network_state_estimator); - [[deprecated]] ReceiveSideCongestionController( - Clock* clock, - RemoteEstimatorProxy::TransportFeedbackSender feedback_sender, - RembThrottler::RembSender remb_sender, - NetworkStateEstimator* network_state_estimator); - ~ReceiveSideCongestionController() override = default; void OnReceivedPacket(const RtpPacketReceived& packet, MediaType media_type); @@ -80,7 +74,7 @@ class ReceiveSideCongestionController : public CallStatsObserver { void PickEstimator(bool has_absolute_send_time) RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_); - Clock& clock_; + const Environment env_; RembThrottler remb_throttler_; RemoteEstimatorProxy remote_estimator_proxy_; diff --git a/modules/congestion_controller/receive_side_congestion_controller.cc b/modules/congestion_controller/receive_side_congestion_controller.cc index 3bcc82f973..317858ccdb 100644 --- a/modules/congestion_controller/receive_side_congestion_controller.cc +++ b/modules/congestion_controller/receive_side_congestion_controller.cc @@ -51,7 +51,7 @@ void ReceiveSideCongestionController::PickEstimator( << "WrappingBitrateEstimator: Switching to absolute send time RBE."; using_absolute_send_time_ = true; rbe_ = std::make_unique( - &remb_throttler_, &clock_); + env_, &remb_throttler_); } packets_since_absolute_send_time_ = 0; } else { @@ -64,7 +64,7 @@ void ReceiveSideCongestionController::PickEstimator( "time offset RBE."; using_absolute_send_time_ = false; rbe_ = std::make_unique( - &remb_throttler_, &clock_); + env_, &remb_throttler_); } } } @@ -75,26 +75,13 @@ ReceiveSideCongestionController::ReceiveSideCongestionController( RemoteEstimatorProxy::TransportFeedbackSender feedback_sender, RembThrottler::RembSender remb_sender, absl::Nullable network_state_estimator) - : clock_(env.clock()), - remb_throttler_(std::move(remb_sender), &clock_), + : env_(env), + remb_throttler_(std::move(remb_sender), &env_.clock()), remote_estimator_proxy_(std::move(feedback_sender), network_state_estimator), - rbe_( - std::make_unique(&remb_throttler_, - &clock_)), - using_absolute_send_time_(false), - packets_since_absolute_send_time_(0) {} - -ReceiveSideCongestionController::ReceiveSideCongestionController( - Clock* clock, - RemoteEstimatorProxy::TransportFeedbackSender feedback_sender, - RembThrottler::RembSender remb_sender, - NetworkStateEstimator* network_state_estimator) - : clock_(*clock), - remb_throttler_(std::move(remb_sender), clock), - remote_estimator_proxy_(std::move(feedback_sender), - network_state_estimator), - rbe_(new RemoteBitrateEstimatorSingleStream(&remb_throttler_, clock)), + rbe_(std::make_unique( + env_, + &remb_throttler_)), using_absolute_send_time_(false), packets_since_absolute_send_time_(0) {} @@ -125,7 +112,7 @@ void ReceiveSideCongestionController::OnBitrateChanged(int bitrate_bps) { } TimeDelta ReceiveSideCongestionController::MaybeProcess() { - Timestamp now = clock_.CurrentTime(); + Timestamp now = env_.clock().CurrentTime(); mutex_.Lock(); TimeDelta time_until_rbe = rbe_->Process(); mutex_.Unlock(); diff --git a/modules/remote_bitrate_estimator/BUILD.gn b/modules/remote_bitrate_estimator/BUILD.gn index b9346ae299..d691ad7759 100644 --- a/modules/remote_bitrate_estimator/BUILD.gn +++ b/modules/remote_bitrate_estimator/BUILD.gn @@ -36,7 +36,7 @@ rtc_library("remote_bitrate_estimator") { "../../api:field_trials_view", "../../api:network_state_predictor_api", "../../api:rtp_headers", - "../../api/transport:field_trial_based_config", + "../../api/environment", "../../api/transport:network_control", "../../api/units:data_rate", "../../api/units:data_size", @@ -55,10 +55,10 @@ rtc_library("remote_bitrate_estimator") { "../../rtc_base/experiments:field_trial_parser", "../../rtc_base/synchronization:mutex", "../../system_wrappers", - "../../system_wrappers:field_trial", "../../system_wrappers:metrics", ] absl_deps = [ + "//third_party/abseil-cpp/absl/base:nullability", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/types:optional", ] @@ -120,6 +120,7 @@ if (rtc_include_tests) { deps = [ ":remote_bitrate_estimator", "..:module_api_public", + "../../api/environment:environment_factory", "../../api/transport:mock_network_control", "../../api/transport:network_control", "../../api/units:data_rate", diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc index fcfbb2ecb5..278ad9d935 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc @@ -16,7 +16,8 @@ #include #include -#include "api/transport/field_trial_based_config.h" +#include "absl/base/nullability.h" +#include "api/environment/environment.h" #include "api/units/data_rate.h" #include "api/units/data_size.h" #include "api/units/time_delta.h" @@ -88,11 +89,9 @@ void RemoteBitrateEstimatorAbsSendTime::MaybeAddCluster( } RemoteBitrateEstimatorAbsSendTime::RemoteBitrateEstimatorAbsSendTime( - RemoteBitrateObserver* observer, - Clock* clock) - : clock_(clock), observer_(observer), remote_rate_(field_trials_) { - RTC_DCHECK(clock_); - RTC_DCHECK(observer_); + const Environment& env, + absl::Nonnull observer) + : env_(env), observer_(observer), remote_rate_(env_.field_trials()) { RTC_LOG(LS_INFO) << "RemoteBitrateEstimatorAbsSendTime: Instantiating."; } @@ -225,7 +224,7 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacket( Timestamp send_time = Timestamp::Millis(static_cast(timestamp) * kTimestampToMs); - Timestamp now = clock_->CurrentTime(); + Timestamp now = env_.clock().CurrentTime(); // TODO(holmer): SSRCs are only needed for REMB, should be broken out from // here. diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h index 9bcdfb8aff..e48f3abe67 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h @@ -19,8 +19,9 @@ #include #include +#include "absl/base/nullability.h" +#include "api/environment/environment.h" #include "api/rtp_headers.h" -#include "api/transport/field_trial_based_config.h" #include "api/units/data_rate.h" #include "api/units/data_size.h" #include "api/units/time_delta.h" @@ -32,14 +33,14 @@ #include "modules/remote_bitrate_estimator/overuse_estimator.h" #include "rtc_base/bitrate_tracker.h" #include "rtc_base/checks.h" -#include "system_wrappers/include/clock.h" namespace webrtc { class RemoteBitrateEstimatorAbsSendTime : public RemoteBitrateEstimator { public: - RemoteBitrateEstimatorAbsSendTime(RemoteBitrateObserver* observer, - Clock* clock); + RemoteBitrateEstimatorAbsSendTime( + const Environment& env, + absl::Nonnull observer); RemoteBitrateEstimatorAbsSendTime() = delete; RemoteBitrateEstimatorAbsSendTime(const RemoteBitrateEstimatorAbsSendTime&) = @@ -98,9 +99,8 @@ class RemoteBitrateEstimatorAbsSendTime : public RemoteBitrateEstimator { void TimeoutStreams(Timestamp now); - Clock* const clock_; - const FieldTrialBasedConfig field_trials_; - RemoteBitrateObserver* const observer_; + const Environment env_; + const absl::Nonnull observer_; std::unique_ptr inter_arrival_; std::unique_ptr estimator_; OveruseDetector detector_; diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc index d8ef23cc92..6cdf8a64b5 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc @@ -10,6 +10,9 @@ #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h" +#include + +#include "api/environment/environment_factory.h" #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h" #include "test/gtest.h" @@ -25,12 +28,10 @@ class RemoteBitrateEstimatorAbsSendTimeTest RemoteBitrateEstimatorAbsSendTimeTest& operator=( const RemoteBitrateEstimatorAbsSendTimeTest&) = delete; - virtual void SetUp() { - bitrate_estimator_.reset(new RemoteBitrateEstimatorAbsSendTime( - bitrate_observer_.get(), &clock_)); + void SetUp() override { + bitrate_estimator_ = std::make_unique( + CreateEnvironment(&clock_), bitrate_observer_.get()); } - - protected: }; TEST_F(RemoteBitrateEstimatorAbsSendTimeTest, InitialBehavior) { diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc index 1605008299..9db92ac474 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc @@ -13,7 +13,9 @@ #include #include +#include "absl/base/nullability.h" #include "absl/types/optional.h" +#include "api/environment/environment.h" #include "modules/remote_bitrate_estimator/aimd_rate_control.h" #include "modules/remote_bitrate_estimator/include/bwe_defines.h" #include "modules/remote_bitrate_estimator/inter_arrival.h" @@ -39,13 +41,13 @@ RemoteBitrateEstimatorSingleStream::Detector::Detector() inter_arrival(90 * kTimestampGroupLengthMs, kTimestampToMs) {} RemoteBitrateEstimatorSingleStream::RemoteBitrateEstimatorSingleStream( - RemoteBitrateObserver* observer, - Clock* clock) - : clock_(clock), + const Environment& env, + absl::Nonnull observer) + : env_(env), + observer_(observer), incoming_bitrate_(kBitrateWindow), last_valid_incoming_bitrate_(DataRate::Zero()), - remote_rate_(field_trials_), - observer_(observer), + remote_rate_(env_.field_trials()), process_interval_(kProcessInterval), uma_recorded_(false) { RTC_LOG(LS_INFO) << "RemoteBitrateEstimatorSingleStream: Instantiating."; @@ -68,7 +70,7 @@ void RemoteBitrateEstimatorSingleStream::IncomingPacket( uint32_t ssrc = rtp_packet.Ssrc(); uint32_t rtp_timestamp = rtp_packet.Timestamp() + transmission_time_offset.value_or(0); - Timestamp now = clock_->CurrentTime(); + Timestamp now = env_.clock().CurrentTime(); Detector& estimator = overuse_detectors_[ssrc]; estimator.last_packet_time = now; @@ -114,7 +116,7 @@ void RemoteBitrateEstimatorSingleStream::IncomingPacket( } TimeDelta RemoteBitrateEstimatorSingleStream::Process() { - Timestamp now = clock_->CurrentTime(); + Timestamp now = env_.clock().CurrentTime(); Timestamp next_process_time = last_process_time_.has_value() ? *last_process_time_ + process_interval_ : now; diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h index 44976caf5e..16a0097849 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h @@ -17,8 +17,9 @@ #include #include +#include "absl/base/nullability.h" #include "absl/types/optional.h" -#include "api/transport/field_trial_based_config.h" +#include "api/environment/environment.h" #include "api/units/data_rate.h" #include "api/units/time_delta.h" #include "api/units/timestamp.h" @@ -31,13 +32,11 @@ namespace webrtc { -class Clock; -struct RTPHeader; - class RemoteBitrateEstimatorSingleStream : public RemoteBitrateEstimator { public: - RemoteBitrateEstimatorSingleStream(RemoteBitrateObserver* observer, - Clock* clock); + RemoteBitrateEstimatorSingleStream( + const Environment& env, + absl::Nonnull observer); RemoteBitrateEstimatorSingleStream() = delete; RemoteBitrateEstimatorSingleStream( @@ -68,13 +67,12 @@ class RemoteBitrateEstimatorSingleStream : public RemoteBitrateEstimator { std::vector GetSsrcs() const; - Clock* const clock_; - const FieldTrialBasedConfig field_trials_; + const Environment env_; + const absl::Nonnull observer_; std::map overuse_detectors_; BitrateTracker incoming_bitrate_; DataRate last_valid_incoming_bitrate_; AimdRateControl remote_rate_; - RemoteBitrateObserver* const observer_; absl::optional last_process_time_; TimeDelta process_interval_; bool uma_recorded_; diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc index 3d72807698..15696dc34c 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc @@ -10,6 +10,9 @@ #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h" +#include + +#include "api/environment/environment_factory.h" #include "modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h" #include "test/gtest.h" @@ -24,12 +27,10 @@ class RemoteBitrateEstimatorSingleTest : public RemoteBitrateEstimatorTest { RemoteBitrateEstimatorSingleTest& operator=( const RemoteBitrateEstimatorSingleTest&) = delete; - virtual void SetUp() { - bitrate_estimator_.reset(new RemoteBitrateEstimatorSingleStream( - bitrate_observer_.get(), &clock_)); + void SetUp() override { + bitrate_estimator_ = std::make_unique( + CreateEnvironment(&clock_), bitrate_observer_.get()); } - - protected: }; TEST_F(RemoteBitrateEstimatorSingleTest, InitialBehavior) {