Index: webrtc/call/congestion_controller.cc |
diff --git a/webrtc/call/congestion_controller.cc b/webrtc/call/congestion_controller.cc |
index 59713d30576cec2b98ed55752e6e457b0d92f2d9..e2b9c23834ac45b52081d05dc62f95b80dbd032a 100644 |
--- a/webrtc/call/congestion_controller.cc |
+++ b/webrtc/call/congestion_controller.cc |
@@ -19,15 +19,11 @@ |
#include "webrtc/base/thread_annotations.h" |
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
#include "webrtc/modules/pacing/paced_sender.h" |
-#include "webrtc/modules/pacing/packet_router.h" |
#include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.h" |
#include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h" |
#include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h" |
-#include "webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h" |
-#include "webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h" |
#include "webrtc/modules/utility/include/process_thread.h" |
#include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
-#include "webrtc/video/call_stats.h" |
#include "webrtc/video/payload_router.h" |
namespace webrtc { |
@@ -140,55 +136,46 @@ class WrappingBitrateEstimator : public RemoteBitrateEstimator { |
CongestionController::CongestionController( |
Clock* clock, |
- ProcessThread* process_thread, |
- CallStats* call_stats, |
BitrateObserver* bitrate_observer, |
RemoteBitrateObserver* remote_bitrate_observer) |
: clock_(clock), |
- packet_router_(new PacketRouter()), |
pacer_(new PacedSender(clock_, |
- packet_router_.get(), |
- BitrateController::kDefaultStartBitrateKbps, |
- PacedSender::kDefaultPaceMultiplier * |
- BitrateController::kDefaultStartBitrateKbps, |
- 0)), |
+ &packet_router_, |
+ BitrateController::kDefaultStartBitrateKbps, |
+ PacedSender::kDefaultPaceMultiplier * |
+ BitrateController::kDefaultStartBitrateKbps, |
+ 0)), |
remote_bitrate_estimator_( |
new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), |
- remote_estimator_proxy_( |
- new RemoteEstimatorProxy(clock_, packet_router_.get())), |
- process_thread_(process_thread), |
- call_stats_(call_stats), |
pacer_thread_(ProcessThread::Create("PacerThread")), |
// Constructed last as this object calls the provided callback on |
// construction. |
bitrate_controller_( |
BitrateController::CreateBitrateController(clock_, bitrate_observer)), |
+ remote_estimator_proxy_(clock_, &packet_router_), |
+ transport_feedback_adapter_(bitrate_controller_.get(), clock_), |
min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps) { |
- call_stats_->RegisterStatsObserver(remote_bitrate_estimator_.get()); |
- |
+ transport_feedback_adapter_.SetBitrateEstimator( |
+ new RemoteBitrateEstimatorAbsSendTime(&transport_feedback_adapter_, |
+ clock_)); |
+ transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( |
+ min_bitrate_bps_); |
pacer_thread_->RegisterModule(pacer_.get()); |
- pacer_thread_->RegisterModule(remote_estimator_proxy_.get()); |
+ pacer_thread_->RegisterModule(&remote_estimator_proxy_); |
pacer_thread_->Start(); |
- |
- process_thread_->RegisterModule(remote_bitrate_estimator_.get()); |
- process_thread_->RegisterModule(bitrate_controller_.get()); |
} |
CongestionController::~CongestionController() { |
pacer_thread_->Stop(); |
pacer_thread_->DeRegisterModule(pacer_.get()); |
- pacer_thread_->DeRegisterModule(remote_estimator_proxy_.get()); |
- process_thread_->DeRegisterModule(bitrate_controller_.get()); |
- process_thread_->DeRegisterModule(remote_bitrate_estimator_.get()); |
- call_stats_->DeregisterStatsObserver(remote_bitrate_estimator_.get()); |
- if (transport_feedback_adapter_.get()) |
- call_stats_->DeregisterStatsObserver(transport_feedback_adapter_.get()); |
+ pacer_thread_->DeRegisterModule(&remote_estimator_proxy_); |
} |
void CongestionController::SetBweBitrates(int min_bitrate_bps, |
int start_bitrate_bps, |
int max_bitrate_bps) { |
+ RTC_DCHECK(config_thread_checker_.CalledOnValidThread()); |
// TODO(holmer): We should make sure the default bitrates are set to 10 kbps, |
// and that we don't try to set the min bitrate to 0 from any applications. |
// The congestion controller should allow a min bitrate of 0. |
@@ -202,12 +189,11 @@ void CongestionController::SetBweBitrates(int min_bitrate_bps, |
bitrate_controller_->SetStartBitrate(start_bitrate_bps); |
} |
bitrate_controller_->SetMinMaxBitrate(min_bitrate_bps, max_bitrate_bps); |
- if (remote_bitrate_estimator_.get()) |
+ if (remote_bitrate_estimator_) |
remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps); |
- if (transport_feedback_adapter_.get()) |
- transport_feedback_adapter_->GetBitrateEstimator()->SetMinBitrate( |
- min_bitrate_bps); |
min_bitrate_bps_ = min_bitrate_bps; |
+ transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( |
+ min_bitrate_bps_); |
} |
BitrateController* CongestionController::GetBitrateController() const { |
@@ -215,27 +201,18 @@ BitrateController* CongestionController::GetBitrateController() const { |
} |
RemoteBitrateEstimator* CongestionController::GetRemoteBitrateEstimator( |
- bool send_side_bwe) const { |
- |
- if (send_side_bwe) |
- return remote_estimator_proxy_.get(); |
- else |
+ bool send_side_bwe) { |
+ if (send_side_bwe) { |
+ return &remote_estimator_proxy_; |
+ } else { |
return remote_bitrate_estimator_.get(); |
+ } |
} |
TransportFeedbackObserver* |
CongestionController::GetTransportFeedbackObserver() { |
- if (transport_feedback_adapter_.get() == nullptr) { |
- transport_feedback_adapter_.reset(new TransportFeedbackAdapter( |
- bitrate_controller_.get(), clock_, process_thread_)); |
- transport_feedback_adapter_->SetBitrateEstimator( |
- new RemoteBitrateEstimatorAbsSendTime(transport_feedback_adapter_.get(), |
- clock_)); |
- transport_feedback_adapter_->GetBitrateEstimator()->SetMinBitrate( |
- min_bitrate_bps_); |
- call_stats_->RegisterStatsObserver(transport_feedback_adapter_.get()); |
- } |
- return transport_feedback_adapter_.get(); |
+ RTC_DCHECK(config_thread_checker_.CalledOnValidThread()); |
+ return &transport_feedback_adapter_; |
} |
void CongestionController::UpdatePacerBitrate(int bitrate_kbps, |
@@ -257,9 +234,24 @@ void CongestionController::SignalNetworkState(NetworkState state) { |
} |
void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) { |
- if (transport_feedback_adapter_) { |
- transport_feedback_adapter_->OnSentPacket(sent_packet.packet_id, |
- sent_packet.send_time_ms); |
- } |
+ transport_feedback_adapter_.OnSentPacket(sent_packet.packet_id, |
+ sent_packet.send_time_ms); |
} |
+ |
+void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
+ remote_bitrate_estimator_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
+ transport_feedback_adapter_.OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
+} |
+ |
+int64_t CongestionController::TimeUntilNextProcess() { |
+ return std::min(bitrate_controller_->TimeUntilNextProcess(), |
+ remote_bitrate_estimator_->TimeUntilNextProcess()); |
+} |
+ |
+int32_t CongestionController::Process() { |
+ bitrate_controller_->Process(); |
+ remote_bitrate_estimator_->Process(); |
+ return 0; |
+} |
+ |
} // namespace webrtc |