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

Side by Side Diff: webrtc/modules/pacing/paced_sender.cc

Issue 2949553002: Wire up experiment for improved screenshare bwe. (Closed)
Patch Set: Created 3 years, 6 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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 padding_budget_(new paced_sender::IntervalBudget(0)), 257 padding_budget_(new paced_sender::IntervalBudget(0)),
258 prober_(new BitrateProber(event_log)), 258 prober_(new BitrateProber(event_log)),
259 probing_send_failure_(false), 259 probing_send_failure_(false),
260 estimated_bitrate_bps_(0), 260 estimated_bitrate_bps_(0),
261 min_send_bitrate_kbps_(0u), 261 min_send_bitrate_kbps_(0u),
262 max_padding_bitrate_kbps_(0u), 262 max_padding_bitrate_kbps_(0u),
263 pacing_bitrate_kbps_(0), 263 pacing_bitrate_kbps_(0),
264 time_last_update_us_(clock->TimeInMicroseconds()), 264 time_last_update_us_(clock->TimeInMicroseconds()),
265 first_sent_packet_ms_(-1), 265 first_sent_packet_ms_(-1),
266 packets_(new paced_sender::PacketQueue(clock)), 266 packets_(new paced_sender::PacketQueue(clock)),
267 packet_counter_(0) { 267 packet_counter_(0),
268 pacing_factor_(kDefaultPaceMultiplier),
269 queue_time_limit(kMaxQueueLengthMs) {
268 UpdateBudgetWithElapsedTime(kMinPacketLimitMs); 270 UpdateBudgetWithElapsedTime(kMinPacketLimitMs);
269 } 271 }
270 272
271 PacedSender::~PacedSender() {} 273 PacedSender::~PacedSender() {}
272 274
273 void PacedSender::CreateProbeCluster(int bitrate_bps) { 275 void PacedSender::CreateProbeCluster(int bitrate_bps) {
274 rtc::CritScope cs(&critsect_); 276 rtc::CritScope cs(&critsect_);
275 prober_->CreateProbeCluster(bitrate_bps, clock_->TimeInMilliseconds()); 277 prober_->CreateProbeCluster(bitrate_bps, clock_->TimeInMilliseconds());
276 } 278 }
277 279
(...skipping 29 matching lines...) Expand all
307 309
308 void PacedSender::SetEstimatedBitrate(uint32_t bitrate_bps) { 310 void PacedSender::SetEstimatedBitrate(uint32_t bitrate_bps) {
309 if (bitrate_bps == 0) 311 if (bitrate_bps == 0)
310 LOG(LS_ERROR) << "PacedSender is not designed to handle 0 bitrate."; 312 LOG(LS_ERROR) << "PacedSender is not designed to handle 0 bitrate.";
311 rtc::CritScope cs(&critsect_); 313 rtc::CritScope cs(&critsect_);
312 estimated_bitrate_bps_ = bitrate_bps; 314 estimated_bitrate_bps_ = bitrate_bps;
313 padding_budget_->set_target_rate_kbps( 315 padding_budget_->set_target_rate_kbps(
314 std::min(estimated_bitrate_bps_ / 1000, max_padding_bitrate_kbps_)); 316 std::min(estimated_bitrate_bps_ / 1000, max_padding_bitrate_kbps_));
315 pacing_bitrate_kbps_ = 317 pacing_bitrate_kbps_ =
316 std::max(min_send_bitrate_kbps_, estimated_bitrate_bps_ / 1000) * 318 std::max(min_send_bitrate_kbps_, estimated_bitrate_bps_ / 1000) *
317 kDefaultPaceMultiplier; 319 pacing_factor_;
318 alr_detector_->SetEstimatedBitrate(bitrate_bps); 320 alr_detector_->SetEstimatedBitrate(bitrate_bps);
319 } 321 }
320 322
321 void PacedSender::SetSendBitrateLimits(int min_send_bitrate_bps, 323 void PacedSender::SetSendBitrateLimits(int min_send_bitrate_bps,
322 int padding_bitrate) { 324 int padding_bitrate) {
323 rtc::CritScope cs(&critsect_); 325 rtc::CritScope cs(&critsect_);
324 min_send_bitrate_kbps_ = min_send_bitrate_bps / 1000; 326 min_send_bitrate_kbps_ = min_send_bitrate_bps / 1000;
325 pacing_bitrate_kbps_ = 327 pacing_bitrate_kbps_ =
326 std::max(min_send_bitrate_kbps_, estimated_bitrate_bps_ / 1000) * 328 std::max(min_send_bitrate_kbps_, estimated_bitrate_bps_ / 1000) *
327 kDefaultPaceMultiplier; 329 pacing_factor_;
328 max_padding_bitrate_kbps_ = padding_bitrate / 1000; 330 max_padding_bitrate_kbps_ = padding_bitrate / 1000;
329 padding_budget_->set_target_rate_kbps( 331 padding_budget_->set_target_rate_kbps(
330 std::min(estimated_bitrate_bps_ / 1000, max_padding_bitrate_kbps_)); 332 std::min(estimated_bitrate_bps_ / 1000, max_padding_bitrate_kbps_));
331 } 333 }
332 334
333 void PacedSender::InsertPacket(RtpPacketSender::Priority priority, 335 void PacedSender::InsertPacket(RtpPacketSender::Priority priority,
334 uint32_t ssrc, 336 uint32_t ssrc,
335 uint16_t sequence_number, 337 uint16_t sequence_number,
336 int64_t capture_time_ms, 338 int64_t capture_time_ms,
337 size_t bytes, 339 size_t bytes,
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 time_last_update_us_ = now_us; 414 time_last_update_us_ = now_us;
413 int target_bitrate_kbps = pacing_bitrate_kbps_; 415 int target_bitrate_kbps = pacing_bitrate_kbps_;
414 if (!paused_ && elapsed_time_ms > 0) { 416 if (!paused_ && elapsed_time_ms > 0) {
415 size_t queue_size_bytes = packets_->SizeInBytes(); 417 size_t queue_size_bytes = packets_->SizeInBytes();
416 if (queue_size_bytes > 0) { 418 if (queue_size_bytes > 0) {
417 // Assuming equal size packets and input/output rate, the average packet 419 // Assuming equal size packets and input/output rate, the average packet
418 // has avg_time_left_ms left to get queue_size_bytes out of the queue, if 420 // has avg_time_left_ms left to get queue_size_bytes out of the queue, if
419 // time constraint shall be met. Determine bitrate needed for that. 421 // time constraint shall be met. Determine bitrate needed for that.
420 packets_->UpdateQueueTime(clock_->TimeInMilliseconds()); 422 packets_->UpdateQueueTime(clock_->TimeInMilliseconds());
421 int64_t avg_time_left_ms = std::max<int64_t>( 423 int64_t avg_time_left_ms = std::max<int64_t>(
422 1, kMaxQueueLengthMs - packets_->AverageQueueTimeMs()); 424 1, queue_time_limit - packets_->AverageQueueTimeMs());
423 int min_bitrate_needed_kbps = 425 int min_bitrate_needed_kbps =
424 static_cast<int>(queue_size_bytes * 8 / avg_time_left_ms); 426 static_cast<int>(queue_size_bytes * 8 / avg_time_left_ms);
425 if (min_bitrate_needed_kbps > target_bitrate_kbps) 427 if (min_bitrate_needed_kbps > target_bitrate_kbps)
426 target_bitrate_kbps = min_bitrate_needed_kbps; 428 target_bitrate_kbps = min_bitrate_needed_kbps;
427 } 429 }
428 430
429 media_budget_->set_target_rate_kbps(target_bitrate_kbps); 431 media_budget_->set_target_rate_kbps(target_bitrate_kbps);
430 432
431 elapsed_time_ms = std::min(kMaxIntervalTimeMs, elapsed_time_ms); 433 elapsed_time_ms = std::min(kMaxIntervalTimeMs, elapsed_time_ms);
432 UpdateBudgetWithElapsedTime(elapsed_time_ms); 434 UpdateBudgetWithElapsedTime(elapsed_time_ms);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 530
529 void PacedSender::UpdateBudgetWithElapsedTime(int64_t delta_time_ms) { 531 void PacedSender::UpdateBudgetWithElapsedTime(int64_t delta_time_ms) {
530 media_budget_->IncreaseBudget(delta_time_ms); 532 media_budget_->IncreaseBudget(delta_time_ms);
531 padding_budget_->IncreaseBudget(delta_time_ms); 533 padding_budget_->IncreaseBudget(delta_time_ms);
532 } 534 }
533 535
534 void PacedSender::UpdateBudgetWithBytesSent(size_t bytes_sent) { 536 void PacedSender::UpdateBudgetWithBytesSent(size_t bytes_sent) {
535 media_budget_->UseBudget(bytes_sent); 537 media_budget_->UseBudget(bytes_sent);
536 padding_budget_->UseBudget(bytes_sent); 538 padding_budget_->UseBudget(bytes_sent);
537 } 539 }
540
541 void PacedSender::SetPacingFactor(float pacing_factor) {
542 rtc::CritScope cs(&critsect_);
543 pacing_factor_ = pacing_factor;
544 }
545
546 void PacedSender::SetQueueTimeLimit(int limit_ms) {
547 rtc::CritScope cs(&critsect_);
548 queue_time_limit = limit_ms;
549 }
550
538 } // namespace webrtc 551 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698