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

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

Issue 2235373004: Probing: Add support for exponential startup probing (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@fix_probing2
Patch Set: Addressed comments Created 4 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
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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 last_reported_bitrate_bps_(0), 174 last_reported_bitrate_bps_(0),
175 last_reported_fraction_loss_(0), 175 last_reported_fraction_loss_(0),
176 last_reported_rtt_(0), 176 last_reported_rtt_(0),
177 network_state_(kNetworkUp) { 177 network_state_(kNetworkUp) {
178 Init(); 178 Init();
179 } 179 }
180 180
181 CongestionController::CongestionController( 181 CongestionController::CongestionController(
182 Clock* clock, 182 Clock* clock,
183 Observer* observer, 183 Observer* observer,
184 RemoteBitrateObserver* remote_bitrate_observer, 184 RemoteBitrateObserver* remote_bitrate_observer,
185 RtcEventLog* event_log, 185 RtcEventLog* event_log,
186 std::unique_ptr<PacketRouter> packet_router, 186 std::unique_ptr<PacketRouter> packet_router,
187 std::unique_ptr<PacedSender> pacer) 187 std::unique_ptr<PacedSender> pacer)
188 : clock_(clock), 188 : clock_(clock),
189 observer_(observer), 189 observer_(observer),
190 packet_router_(std::move(packet_router)), 190 packet_router_(std::move(packet_router)),
191 pacer_(std::move(pacer)), 191 pacer_(std::move(pacer)),
192 remote_bitrate_estimator_( 192 remote_bitrate_estimator_(
193 new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), 193 new WrappingBitrateEstimator(remote_bitrate_observer, clock_)),
194 // Constructed last as this object calls the provided callback on 194 // Constructed last as this object calls the provided callback on
195 // construction. 195 // construction.
196 bitrate_controller_( 196 bitrate_controller_(
197 BitrateController::CreateBitrateController(clock_, event_log)), 197 BitrateController::CreateBitrateController(clock_, event_log)),
198 retransmission_rate_limiter_( 198 retransmission_rate_limiter_(
199 new RateLimiter(clock, kRetransmitWindowSizeMs)), 199 new RateLimiter(clock, kRetransmitWindowSizeMs)),
200 remote_estimator_proxy_(clock_, packet_router_.get()), 200 remote_estimator_proxy_(clock_, packet_router_.get()),
201 transport_feedback_adapter_(bitrate_controller_.get(), clock_), 201 transport_feedback_adapter_(clock_),
202 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), 202 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps),
203 last_reported_bitrate_bps_(0), 203 last_reported_bitrate_bps_(0),
204 last_reported_fraction_loss_(0), 204 last_reported_fraction_loss_(0),
205 last_reported_rtt_(0), 205 last_reported_rtt_(0),
206 network_state_(kNetworkUp) { 206 network_state_(kNetworkUp) {
207 Init(); 207 Init();
208 } 208 }
209 209
210 CongestionController::~CongestionController() {} 210 CongestionController::~CongestionController() {}
211 211
212 void CongestionController::Init() { 212 void CongestionController::Init() {
213 transport_feedback_adapter_.SetBitrateEstimator( 213 transport_feedback_adapter_.SetBitrateEstimator(
214 new DelayBasedBwe(&transport_feedback_adapter_, clock_)); 214 new DelayBasedBwe(this, clock_));
215 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( 215 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate(
216 min_bitrate_bps_); 216 min_bitrate_bps_);
217 } 217 }
218 218
219 void CongestionController::SetBweBitrates(int min_bitrate_bps, 219 void CongestionController::SetBweBitrates(int min_bitrate_bps,
220 int start_bitrate_bps, 220 int start_bitrate_bps,
221 int max_bitrate_bps) { 221 int max_bitrate_bps) {
222 ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps); 222 ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
223 bitrate_controller_->SetBitrates(start_bitrate_bps, 223 bitrate_controller_->SetBitrates(start_bitrate_bps,
224 min_bitrate_bps, 224 min_bitrate_bps,
(...skipping 14 matching lines...) Expand all
239 // TODO(honghaiz): Recreate this object once the bitrate controller is 239 // TODO(honghaiz): Recreate this object once the bitrate controller is
240 // no longer exposed outside CongestionController. 240 // no longer exposed outside CongestionController.
241 bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps, 241 bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps,
242 max_bitrate_bps); 242 max_bitrate_bps);
243 min_bitrate_bps_ = min_bitrate_bps; 243 min_bitrate_bps_ = min_bitrate_bps;
244 // TODO(honghaiz): Recreate this object once the remote bitrate estimator is 244 // TODO(honghaiz): Recreate this object once the remote bitrate estimator is
245 // no longer exposed outside CongestionController. 245 // no longer exposed outside CongestionController.
246 if (remote_bitrate_estimator_) 246 if (remote_bitrate_estimator_)
247 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps); 247 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps);
248 248
249 RemoteBitrateEstimator* rbe = new DelayBasedBwe( 249 RemoteBitrateEstimator* rbe = new DelayBasedBwe(this, clock_);
250 &transport_feedback_adapter_, clock_);
251 transport_feedback_adapter_.SetBitrateEstimator(rbe); 250 transport_feedback_adapter_.SetBitrateEstimator(rbe);
252 rbe->SetMinBitrate(min_bitrate_bps); 251 rbe->SetMinBitrate(min_bitrate_bps);
253 // TODO(holmer): Trigger a new probe once mid-call probing is implemented. 252 // TODO(holmer): Trigger a new probe once mid-call probing is implemented.
254 MaybeTriggerOnNetworkChanged(); 253 MaybeTriggerOnNetworkChanged();
255 } 254 }
256 255
257 BitrateController* CongestionController::GetBitrateController() const { 256 BitrateController* CongestionController::GetBitrateController() const {
258 return bitrate_controller_.get(); 257 return bitrate_controller_.get();
259 } 258 }
260 259
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 network_state_ = state; 298 network_state_ = state;
300 } 299 }
301 MaybeTriggerOnNetworkChanged(); 300 MaybeTriggerOnNetworkChanged();
302 } 301 }
303 302
304 void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) { 303 void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) {
305 transport_feedback_adapter_.OnSentPacket(sent_packet.packet_id, 304 transport_feedback_adapter_.OnSentPacket(sent_packet.packet_id,
306 sent_packet.send_time_ms); 305 sent_packet.send_time_ms);
307 } 306 }
308 307
308 void CongestionController::OnDelayBasedBweChanged(int bitrate_bps) {
309 bitrate_controller_->UpdateDelayBasedEstimate(bitrate_bps);
310 }
311
312 bool CongestionController::IsExpectingProbingResults() {
313 return pacer_->IsExpectingProbingResults();
314 }
315
309 void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { 316 void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) {
310 remote_bitrate_estimator_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); 317 remote_bitrate_estimator_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
311 transport_feedback_adapter_.OnRttUpdate(avg_rtt_ms, max_rtt_ms); 318 transport_feedback_adapter_.OnRttUpdate(avg_rtt_ms, max_rtt_ms);
312 } 319 }
313 320
314 int64_t CongestionController::TimeUntilNextProcess() { 321 int64_t CongestionController::TimeUntilNextProcess() {
315 return std::min(bitrate_controller_->TimeUntilNextProcess(), 322 return std::min(bitrate_controller_->TimeUntilNextProcess(),
316 remote_bitrate_estimator_->TimeUntilNextProcess()); 323 remote_bitrate_estimator_->TimeUntilNextProcess());
317 } 324 }
318 325
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 bool CongestionController::IsSendQueueFull() const { 374 bool CongestionController::IsSendQueueFull() const {
368 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; 375 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs;
369 } 376 }
370 377
371 bool CongestionController::IsNetworkDown() const { 378 bool CongestionController::IsNetworkDown() const {
372 rtc::CritScope cs(&critsect_); 379 rtc::CritScope cs(&critsect_);
373 return network_state_ == kNetworkDown; 380 return network_state_ == kNetworkDown;
374 } 381 }
375 382
376 } // namespace webrtc 383 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698