| Index: webrtc/modules/congestion_controller/congestion_controller.cc
|
| diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/congestion_controller.cc
|
| index f7e7e5625a2984500bbb8a8231935181c3f42dc5..ac166164c9ef2b3b0901738ff4478d1a97408da9 100644
|
| --- a/webrtc/modules/congestion_controller/congestion_controller.cc
|
| +++ b/webrtc/modules/congestion_controller/congestion_controller.cc
|
| @@ -17,6 +17,7 @@
|
| #include "webrtc/base/checks.h"
|
| #include "webrtc/base/constructormagic.h"
|
| #include "webrtc/base/logging.h"
|
| +#include "webrtc/base/networkroute.h"
|
| #include "webrtc/base/rate_limiter.h"
|
| #include "webrtc/base/socket.h"
|
| #include "webrtc/base/thread_annotations.h"
|
| @@ -171,12 +172,13 @@ CongestionController::CongestionController(
|
| new RateLimiter(clock, kRetransmitWindowSizeMs)),
|
| remote_estimator_proxy_(clock_, packet_router_.get()),
|
| transport_feedback_adapter_(clock_, bitrate_controller_.get()),
|
| + start_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps),
|
| min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps),
|
| max_bitrate_bps_(0),
|
| last_reported_bitrate_bps_(0),
|
| last_reported_fraction_loss_(0),
|
| last_reported_rtt_(0),
|
| - network_state_(kNetworkUp) {
|
| + network_state_(kNetworkDown) {
|
| Init();
|
| }
|
|
|
| @@ -202,12 +204,13 @@ CongestionController::CongestionController(
|
| new RateLimiter(clock, kRetransmitWindowSizeMs)),
|
| remote_estimator_proxy_(clock_, packet_router_.get()),
|
| transport_feedback_adapter_(clock_, bitrate_controller_.get()),
|
| + start_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps),
|
| min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps),
|
| max_bitrate_bps_(0),
|
| last_reported_bitrate_bps_(0),
|
| last_reported_fraction_loss_(0),
|
| last_reported_rtt_(0),
|
| - network_state_(kNetworkUp) {
|
| + network_state_(kNetworkDown) {
|
| Init();
|
| }
|
|
|
| @@ -218,42 +221,53 @@ void CongestionController::Init() {
|
| transport_feedback_adapter_.SetMinBitrate(min_bitrate_bps_);
|
| }
|
|
|
| -void CongestionController::SetBweBitrates(int min_bitrate_bps,
|
| - int start_bitrate_bps,
|
| +void CongestionController::SetBweBitrates(int start_bitrate_bps,
|
| + int min_bitrate_bps,
|
| int max_bitrate_bps) {
|
| ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
|
| - bitrate_controller_->SetBitrates(start_bitrate_bps,
|
| - min_bitrate_bps,
|
| + bitrate_controller_->SetBitrates(start_bitrate_bps, min_bitrate_bps,
|
| max_bitrate_bps);
|
|
|
| - probe_controller_->SetBitrates(min_bitrate_bps, start_bitrate_bps,
|
| + probe_controller_->SetBitrates(start_bitrate_bps, min_bitrate_bps,
|
| max_bitrate_bps);
|
| +
|
| + start_bitrate_bps_ = start_bitrate_bps;
|
| + min_bitrate_bps_ = min_bitrate_bps;
|
| max_bitrate_bps_ = max_bitrate_bps;
|
|
|
| if (remote_bitrate_estimator_)
|
| - remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps);
|
| - min_bitrate_bps_ = min_bitrate_bps;
|
| + remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps_);
|
| transport_feedback_adapter_.SetMinBitrate(min_bitrate_bps_);
|
| MaybeTriggerOnNetworkChanged();
|
| }
|
|
|
| -void CongestionController::ResetBweAndBitrates(int bitrate_bps,
|
| - int min_bitrate_bps,
|
| - int max_bitrate_bps) {
|
| - ClampBitrates(&bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
|
| +void CongestionController::OnNetworkRouteChanged(
|
| + const rtc::NetworkRoute& route) {
|
| + LOG(LS_INFO) << "OnNetworkRouteChanged, " << (route.connected ? "" : "not ")
|
| + << "connected.";
|
| +
|
| + if (route.connected) {
|
| + pacer_->Resume();
|
| + } else {
|
| + pacer_->Pause();
|
| + }
|
| + {
|
| + rtc::CritScope cs(&critsect_);
|
| + network_state_ = route.connected ? kNetworkUp : kNetworkDown;
|
| + }
|
| +
|
| // TODO(honghaiz): Recreate this object once the bitrate controller is
|
| // no longer exposed outside CongestionController.
|
| - bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps,
|
| - max_bitrate_bps);
|
| - min_bitrate_bps_ = min_bitrate_bps;
|
| - max_bitrate_bps_ = max_bitrate_bps;
|
| - // TODO(honghaiz): Recreate this object once the remote bitrate estimator is
|
| - // no longer exposed outside CongestionController.
|
| - if (remote_bitrate_estimator_)
|
| - remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps);
|
| + bitrate_controller_->ResetBitrates(start_bitrate_bps_, min_bitrate_bps_,
|
| + max_bitrate_bps_);
|
| +
|
| + // TODO(honghaiz): Recreate |remote_bitrate_estimator_| once the remote
|
| + // bitrate estimator is no longer exposed outside CongestionController.
|
|
|
| transport_feedback_adapter_.InitBwe();
|
| - transport_feedback_adapter_.SetMinBitrate(min_bitrate_bps);
|
| +
|
| + probe_controller_->OnNetworkRouteChanged(route);
|
| +
|
| // TODO(holmer): Trigger a new probe once mid-call probing is implemented.
|
| MaybeTriggerOnNetworkChanged();
|
| }
|
| @@ -290,21 +304,6 @@ int64_t CongestionController::GetPacerQueuingDelayMs() const {
|
| return IsNetworkDown() ? 0 : pacer_->QueueInMs();
|
| }
|
|
|
| -void CongestionController::SignalNetworkState(NetworkState state) {
|
| - LOG(LS_INFO) << "SignalNetworkState "
|
| - << (state == kNetworkUp ? "Up" : "Down");
|
| - if (state == kNetworkUp) {
|
| - pacer_->Resume();
|
| - } else {
|
| - pacer_->Pause();
|
| - }
|
| - {
|
| - rtc::CritScope cs(&critsect_);
|
| - network_state_ = state;
|
| - }
|
| - MaybeTriggerOnNetworkChanged();
|
| -}
|
| -
|
| void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) {
|
| transport_feedback_adapter_.OnSentPacket(sent_packet.packet_id,
|
| sent_packet.send_time_ms);
|
|
|