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

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, 3 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698