OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 observer_(observer), | 162 observer_(observer), |
163 packet_router_(new PacketRouter()), | 163 packet_router_(new PacketRouter()), |
164 pacer_(new PacedSender(clock_, packet_router_.get())), | 164 pacer_(new PacedSender(clock_, packet_router_.get())), |
165 remote_bitrate_estimator_( | 165 remote_bitrate_estimator_( |
166 new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), | 166 new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), |
167 bitrate_controller_( | 167 bitrate_controller_( |
168 BitrateController::CreateBitrateController(clock_, event_log)), | 168 BitrateController::CreateBitrateController(clock_, event_log)), |
169 retransmission_rate_limiter_( | 169 retransmission_rate_limiter_( |
170 new RateLimiter(clock, kRetransmitWindowSizeMs)), | 170 new RateLimiter(clock, kRetransmitWindowSizeMs)), |
171 remote_estimator_proxy_(clock_, packet_router_.get()), | 171 remote_estimator_proxy_(clock_, packet_router_.get()), |
172 transport_feedback_adapter_(bitrate_controller_.get(), clock_), | 172 transport_feedback_adapter_(clock_), |
173 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), | 173 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), |
174 max_bitrate_bps_(0), | 174 max_bitrate_bps_(0), |
175 last_reported_bitrate_bps_(0), | 175 last_reported_bitrate_bps_(0), |
176 last_reported_fraction_loss_(0), | 176 last_reported_fraction_loss_(0), |
177 last_reported_rtt_(0), | 177 last_reported_rtt_(0), |
178 network_state_(kNetworkUp) { | 178 network_state_(kNetworkUp) { |
179 Init(); | 179 Init(); |
180 } | 180 } |
181 | 181 |
182 CongestionController::CongestionController( | 182 CongestionController::CongestionController( |
183 Clock* clock, | 183 Clock* clock, |
184 Observer* observer, | 184 Observer* observer, |
185 RemoteBitrateObserver* remote_bitrate_observer, | 185 RemoteBitrateObserver* remote_bitrate_observer, |
186 RtcEventLog* event_log, | 186 RtcEventLog* event_log, |
187 std::unique_ptr<PacketRouter> packet_router, | 187 std::unique_ptr<PacketRouter> packet_router, |
188 std::unique_ptr<PacedSender> pacer) | 188 std::unique_ptr<PacedSender> pacer) |
189 : clock_(clock), | 189 : clock_(clock), |
190 observer_(observer), | 190 observer_(observer), |
191 packet_router_(std::move(packet_router)), | 191 packet_router_(std::move(packet_router)), |
192 pacer_(std::move(pacer)), | 192 pacer_(std::move(pacer)), |
193 remote_bitrate_estimator_( | 193 remote_bitrate_estimator_( |
194 new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), | 194 new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), |
195 // Constructed last as this object calls the provided callback on | 195 // Constructed last as this object calls the provided callback on |
196 // construction. | 196 // construction. |
197 bitrate_controller_( | 197 bitrate_controller_( |
198 BitrateController::CreateBitrateController(clock_, event_log)), | 198 BitrateController::CreateBitrateController(clock_, event_log)), |
199 retransmission_rate_limiter_( | 199 retransmission_rate_limiter_( |
200 new RateLimiter(clock, kRetransmitWindowSizeMs)), | 200 new RateLimiter(clock, kRetransmitWindowSizeMs)), |
201 remote_estimator_proxy_(clock_, packet_router_.get()), | 201 remote_estimator_proxy_(clock_, packet_router_.get()), |
202 transport_feedback_adapter_(bitrate_controller_.get(), clock_), | 202 transport_feedback_adapter_(clock_), |
203 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), | 203 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), |
204 max_bitrate_bps_(0), | 204 max_bitrate_bps_(0), |
205 last_reported_bitrate_bps_(0), | 205 last_reported_bitrate_bps_(0), |
206 last_reported_fraction_loss_(0), | 206 last_reported_fraction_loss_(0), |
207 last_reported_rtt_(0), | 207 last_reported_rtt_(0), |
208 network_state_(kNetworkUp) { | 208 network_state_(kNetworkUp) { |
209 Init(); | 209 Init(); |
210 } | 210 } |
211 | 211 |
212 CongestionController::~CongestionController() {} | 212 CongestionController::~CongestionController() {} |
213 | 213 |
214 void CongestionController::Init() { | 214 void CongestionController::Init() { |
215 transport_feedback_adapter_.SetBitrateEstimator( | 215 transport_feedback_adapter_.SetBitrateEstimator( |
216 new DelayBasedBwe(&transport_feedback_adapter_, clock_)); | 216 new DelayBasedBwe(this, clock_)); |
217 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( | 217 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( |
218 min_bitrate_bps_); | 218 min_bitrate_bps_); |
219 pacer_->CreateProbeCluster(900000, 6); | |
220 pacer_->CreateProbeCluster(1800000, 5); | |
221 } | 219 } |
222 | 220 |
223 void CongestionController::SetBweBitrates(int min_bitrate_bps, | 221 void CongestionController::SetBweBitrates(int min_bitrate_bps, |
224 int start_bitrate_bps, | 222 int start_bitrate_bps, |
225 int max_bitrate_bps) { | 223 int max_bitrate_bps) { |
226 ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps); | 224 ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps); |
227 bitrate_controller_->SetBitrates(start_bitrate_bps, | 225 bitrate_controller_->SetBitrates(start_bitrate_bps, |
228 min_bitrate_bps, | 226 min_bitrate_bps, |
229 max_bitrate_bps); | 227 max_bitrate_bps); |
230 | 228 |
(...skipping 28 matching lines...) Expand all Loading... |
259 // no longer exposed outside CongestionController. | 257 // no longer exposed outside CongestionController. |
260 bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps, | 258 bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps, |
261 max_bitrate_bps); | 259 max_bitrate_bps); |
262 min_bitrate_bps_ = min_bitrate_bps; | 260 min_bitrate_bps_ = min_bitrate_bps; |
263 max_bitrate_bps_ = max_bitrate_bps; | 261 max_bitrate_bps_ = max_bitrate_bps; |
264 // TODO(honghaiz): Recreate this object once the remote bitrate estimator is | 262 // TODO(honghaiz): Recreate this object once the remote bitrate estimator is |
265 // no longer exposed outside CongestionController. | 263 // no longer exposed outside CongestionController. |
266 if (remote_bitrate_estimator_) | 264 if (remote_bitrate_estimator_) |
267 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps); | 265 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps); |
268 | 266 |
269 RemoteBitrateEstimator* rbe = new DelayBasedBwe( | 267 RemoteBitrateEstimator* rbe = new DelayBasedBwe(this, clock_); |
270 &transport_feedback_adapter_, clock_); | |
271 transport_feedback_adapter_.SetBitrateEstimator(rbe); | 268 transport_feedback_adapter_.SetBitrateEstimator(rbe); |
272 rbe->SetMinBitrate(min_bitrate_bps); | 269 rbe->SetMinBitrate(min_bitrate_bps); |
273 // TODO(holmer): Trigger a new probe once mid-call probing is implemented. | 270 // TODO(holmer): Trigger a new probe once mid-call probing is implemented. |
274 MaybeTriggerOnNetworkChanged(); | 271 MaybeTriggerOnNetworkChanged(); |
275 } | 272 } |
276 | 273 |
277 BitrateController* CongestionController::GetBitrateController() const { | 274 BitrateController* CongestionController::GetBitrateController() const { |
278 return bitrate_controller_.get(); | 275 return bitrate_controller_.get(); |
279 } | 276 } |
280 | 277 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 network_state_ = state; | 316 network_state_ = state; |
320 } | 317 } |
321 MaybeTriggerOnNetworkChanged(); | 318 MaybeTriggerOnNetworkChanged(); |
322 } | 319 } |
323 | 320 |
324 void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) { | 321 void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) { |
325 transport_feedback_adapter_.OnSentPacket(sent_packet.packet_id, | 322 transport_feedback_adapter_.OnSentPacket(sent_packet.packet_id, |
326 sent_packet.send_time_ms); | 323 sent_packet.send_time_ms); |
327 } | 324 } |
328 | 325 |
| 326 void CongestionController::OnDelayBasedBweChanged(int bitrate_bps) { |
| 327 bitrate_controller_->UpdateDelayBasedEstimate(bitrate_bps); |
| 328 } |
| 329 |
| 330 bool CongestionController::IsExpectingProbingResults() { |
| 331 return pacer_->IsExpectingProbingResults(); |
| 332 } |
| 333 |
329 void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { | 334 void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
330 remote_bitrate_estimator_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); | 335 remote_bitrate_estimator_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
331 transport_feedback_adapter_.OnRttUpdate(avg_rtt_ms, max_rtt_ms); | 336 transport_feedback_adapter_.OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
332 } | 337 } |
333 | 338 |
334 int64_t CongestionController::TimeUntilNextProcess() { | 339 int64_t CongestionController::TimeUntilNextProcess() { |
335 return std::min(bitrate_controller_->TimeUntilNextProcess(), | 340 return std::min(bitrate_controller_->TimeUntilNextProcess(), |
336 remote_bitrate_estimator_->TimeUntilNextProcess()); | 341 remote_bitrate_estimator_->TimeUntilNextProcess()); |
337 } | 342 } |
338 | 343 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 bool CongestionController::IsSendQueueFull() const { | 392 bool CongestionController::IsSendQueueFull() const { |
388 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; | 393 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; |
389 } | 394 } |
390 | 395 |
391 bool CongestionController::IsNetworkDown() const { | 396 bool CongestionController::IsNetworkDown() const { |
392 rtc::CritScope cs(&critsect_); | 397 rtc::CritScope cs(&critsect_); |
393 return network_state_ == kNetworkDown; | 398 return network_state_ == kNetworkDown; |
394 } | 399 } |
395 | 400 |
396 } // namespace webrtc | 401 } // namespace webrtc |
OLD | NEW |