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

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

Issue 2996643002: BWE allocation strategy
Patch Set: BWE allocation strategy 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
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 account_for_audio_(false) {
268 UpdateBudgetWithElapsedTime(kMinPacketLimitMs); 269 UpdateBudgetWithElapsedTime(kMinPacketLimitMs);
269 } 270 }
270 271
271 PacedSender::~PacedSender() {} 272 PacedSender::~PacedSender() {}
272 273
273 void PacedSender::CreateProbeCluster(int bitrate_bps) { 274 void PacedSender::CreateProbeCluster(int bitrate_bps) {
274 rtc::CritScope cs(&critsect_); 275 rtc::CritScope cs(&critsect_);
275 prober_->CreateProbeCluster(bitrate_bps, clock_->TimeInMilliseconds()); 276 prober_->CreateProbeCluster(bitrate_bps, clock_->TimeInMilliseconds());
276 } 277 }
277 278
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 prober_->OnIncomingPacket(bytes); 345 prober_->OnIncomingPacket(bytes);
345 346
346 if (capture_time_ms < 0) 347 if (capture_time_ms < 0)
347 capture_time_ms = now_ms; 348 capture_time_ms = now_ms;
348 349
349 packets_->Push(paced_sender::Packet(priority, ssrc, sequence_number, 350 packets_->Push(paced_sender::Packet(priority, ssrc, sequence_number,
350 capture_time_ms, now_ms, bytes, 351 capture_time_ms, now_ms, bytes,
351 retransmission, packet_counter_++)); 352 retransmission, packet_counter_++));
352 } 353 }
353 354
355 void PacedSender::AccountForAudioPackets(bool account_for_audio) {
356 rtc::CritScope cs(&critsect_);
357 account_for_audio_ = account_for_audio;
358 }
359
354 int64_t PacedSender::ExpectedQueueTimeMs() const { 360 int64_t PacedSender::ExpectedQueueTimeMs() const {
355 rtc::CritScope cs(&critsect_); 361 rtc::CritScope cs(&critsect_);
356 RTC_DCHECK_GT(pacing_bitrate_kbps_, 0); 362 RTC_DCHECK_GT(pacing_bitrate_kbps_, 0);
357 return static_cast<int64_t>(packets_->SizeInBytes() * 8 / 363 return static_cast<int64_t>(packets_->SizeInBytes() * 8 /
358 pacing_bitrate_kbps_); 364 pacing_bitrate_kbps_);
359 } 365 }
360 366
361 rtc::Optional<int64_t> PacedSender::GetApplicationLimitedRegionStartTime() 367 rtc::Optional<int64_t> PacedSender::GetApplicationLimitedRegionStartTime()
362 const { 368 const {
363 rtc::CritScope cs(&critsect_); 369 rtc::CritScope cs(&critsect_);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 return false; 501 return false;
496 } 502 }
497 503
498 critsect_.Leave(); 504 critsect_.Leave();
499 const bool success = packet_sender_->TimeToSendPacket( 505 const bool success = packet_sender_->TimeToSendPacket(
500 packet.ssrc, packet.sequence_number, packet.capture_time_ms, 506 packet.ssrc, packet.sequence_number, packet.capture_time_ms,
501 packet.retransmission, pacing_info); 507 packet.retransmission, pacing_info);
502 critsect_.Enter(); 508 critsect_.Enter();
503 509
504 if (success) { 510 if (success) {
505 // TODO(holmer): High priority packets should only be accounted for if we 511 if (packet.priority != kHighPriority || account_for_audio_) {
506 // are allocating bandwidth for audio.
507 if (packet.priority != kHighPriority) {
508 // Update media bytes sent. 512 // Update media bytes sent.
509 UpdateBudgetWithBytesSent(packet.bytes); 513 UpdateBudgetWithBytesSent(packet.bytes);
510 } 514 }
511 } 515 }
512 516
513 return success; 517 return success;
514 } 518 }
515 519
516 size_t PacedSender::SendPadding(size_t padding_needed, 520 size_t PacedSender::SendPadding(size_t padding_needed,
517 const PacedPacketInfo& pacing_info) { 521 const PacedPacketInfo& pacing_info) {
(...skipping 11 matching lines...) Expand all
529 void PacedSender::UpdateBudgetWithElapsedTime(int64_t delta_time_ms) { 533 void PacedSender::UpdateBudgetWithElapsedTime(int64_t delta_time_ms) {
530 media_budget_->IncreaseBudget(delta_time_ms); 534 media_budget_->IncreaseBudget(delta_time_ms);
531 padding_budget_->IncreaseBudget(delta_time_ms); 535 padding_budget_->IncreaseBudget(delta_time_ms);
532 } 536 }
533 537
534 void PacedSender::UpdateBudgetWithBytesSent(size_t bytes_sent) { 538 void PacedSender::UpdateBudgetWithBytesSent(size_t bytes_sent) {
535 media_budget_->UseBudget(bytes_sent); 539 media_budget_->UseBudget(bytes_sent);
536 padding_budget_->UseBudget(bytes_sent); 540 padding_budget_->UseBudget(bytes_sent);
537 } 541 }
538 } // namespace webrtc 542 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698