Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: webrtc/modules/congestion_controller/send_side_congestion_controller.cc

Issue 2986563002: Add probing to recover faster from large bitrate drops. (Closed)
Patch Set: Move drop detection to ProbeController. Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/congestion_controller/probe_controller_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 void SendSideCongestionController::OnTransportFeedback( 276 void SendSideCongestionController::OnTransportFeedback(
277 const rtcp::TransportFeedback& feedback) { 277 const rtcp::TransportFeedback& feedback) {
278 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_); 278 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_);
279 transport_feedback_adapter_.OnTransportFeedback(feedback); 279 transport_feedback_adapter_.OnTransportFeedback(feedback);
280 std::vector<PacketFeedback> feedback_vector = ReceivedPacketFeedbackVector( 280 std::vector<PacketFeedback> feedback_vector = ReceivedPacketFeedbackVector(
281 transport_feedback_adapter_.GetTransportFeedbackVector()); 281 transport_feedback_adapter_.GetTransportFeedbackVector());
282 SortPacketFeedbackVector(&feedback_vector); 282 SortPacketFeedbackVector(&feedback_vector);
283 283
284 bool currently_in_alr = 284 bool currently_in_alr =
285 pacer_->GetApplicationLimitedRegionStartTime().has_value(); 285 pacer_->GetApplicationLimitedRegionStartTime().has_value();
286 if (!currently_in_alr && was_in_alr_) { 286 if (was_in_alr_ && !currently_in_alr) {
287 acknowledged_bitrate_estimator_->SetAlrEndedTimeMs(rtc::TimeMillis()); 287 int64_t now_ms = rtc::TimeMillis();
288 acknowledged_bitrate_estimator_->SetAlrEndedTimeMs(now_ms);
289 probe_controller_->SetAlrEndedTimeMs(now_ms);
288 } 290 }
289 was_in_alr_ = currently_in_alr; 291 was_in_alr_ = currently_in_alr;
290 292
291 acknowledged_bitrate_estimator_->IncomingPacketFeedbackVector( 293 acknowledged_bitrate_estimator_->IncomingPacketFeedbackVector(
292 feedback_vector); 294 feedback_vector);
293 DelayBasedBwe::Result result; 295 DelayBasedBwe::Result result;
294 { 296 {
295 rtc::CritScope cs(&bwe_lock_); 297 rtc::CritScope cs(&bwe_lock_);
296 result = delay_based_bwe_->IncomingPacketFeedbackVector( 298 result = delay_based_bwe_->IncomingPacketFeedbackVector(
297 feedback_vector, acknowledged_bitrate_estimator_->bitrate_bps()); 299 feedback_vector, acknowledged_bitrate_estimator_->bitrate_bps());
298 } 300 }
299 if (result.updated) 301 if (result.updated) {
300 bitrate_controller_->OnDelayBasedBweResult(result); 302 bitrate_controller_->OnDelayBasedBweResult(result);
303 // Update the estimate in the ProbeController, in case we want to probe.
304 MaybeTriggerOnNetworkChanged();
305 }
306 if (result.recovered_from_overuse)
307 probe_controller_->RequestProbe();
301 } 308 }
302 309
303 std::vector<PacketFeedback> 310 std::vector<PacketFeedback>
304 SendSideCongestionController::GetTransportFeedbackVector() const { 311 SendSideCongestionController::GetTransportFeedbackVector() const {
305 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_); 312 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_);
306 return transport_feedback_adapter_.GetTransportFeedbackVector(); 313 return transport_feedback_adapter_.GetTransportFeedbackVector();
307 } 314 }
308 315
309 void SendSideCongestionController::MaybeTriggerOnNetworkChanged() { 316 void SendSideCongestionController::MaybeTriggerOnNetworkChanged() {
310 uint32_t bitrate_bps; 317 uint32_t bitrate_bps;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 bool SendSideCongestionController::IsSendQueueFull() const { 365 bool SendSideCongestionController::IsSendQueueFull() const {
359 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; 366 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs;
360 } 367 }
361 368
362 bool SendSideCongestionController::IsNetworkDown() const { 369 bool SendSideCongestionController::IsNetworkDown() const {
363 rtc::CritScope cs(&network_state_lock_); 370 rtc::CritScope cs(&network_state_lock_);
364 return network_state_ == kNetworkDown; 371 return network_state_ == kNetworkDown;
365 } 372 }
366 373
367 } // namespace webrtc 374 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/congestion_controller/probe_controller_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698