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); |