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

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

Issue 2996643002: BWE allocation strategy
Patch Set: BWE allocation strategy Created 3 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 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 probing_send_failure_(false), 249 probing_send_failure_(false),
250 estimated_bitrate_bps_(0), 250 estimated_bitrate_bps_(0),
251 min_send_bitrate_kbps_(0u), 251 min_send_bitrate_kbps_(0u),
252 max_padding_bitrate_kbps_(0u), 252 max_padding_bitrate_kbps_(0u),
253 pacing_bitrate_kbps_(0), 253 pacing_bitrate_kbps_(0),
254 time_last_update_us_(clock->TimeInMicroseconds()), 254 time_last_update_us_(clock->TimeInMicroseconds()),
255 first_sent_packet_ms_(-1), 255 first_sent_packet_ms_(-1),
256 packets_(new paced_sender::PacketQueue(clock)), 256 packets_(new paced_sender::PacketQueue(clock)),
257 packet_counter_(0), 257 packet_counter_(0),
258 pacing_factor_(kDefaultPaceMultiplier), 258 pacing_factor_(kDefaultPaceMultiplier),
259 queue_time_limit(kMaxQueueLengthMs) { 259 queue_time_limit(kMaxQueueLengthMs),
260 account_for_audio_(false) {
260 UpdateBudgetWithElapsedTime(kMinPacketLimitMs); 261 UpdateBudgetWithElapsedTime(kMinPacketLimitMs);
261 } 262 }
262 263
263 PacedSender::~PacedSender() {} 264 PacedSender::~PacedSender() {}
264 265
265 void PacedSender::CreateProbeCluster(int bitrate_bps) { 266 void PacedSender::CreateProbeCluster(int bitrate_bps) {
266 rtc::CritScope cs(&critsect_); 267 rtc::CritScope cs(&critsect_);
267 prober_->CreateProbeCluster(bitrate_bps, clock_->TimeInMilliseconds()); 268 prober_->CreateProbeCluster(bitrate_bps, clock_->TimeInMilliseconds());
268 } 269 }
269 270
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 prober_->OnIncomingPacket(bytes); 341 prober_->OnIncomingPacket(bytes);
341 342
342 if (capture_time_ms < 0) 343 if (capture_time_ms < 0)
343 capture_time_ms = now_ms; 344 capture_time_ms = now_ms;
344 345
345 packets_->Push(paced_sender::Packet(priority, ssrc, sequence_number, 346 packets_->Push(paced_sender::Packet(priority, ssrc, sequence_number,
346 capture_time_ms, now_ms, bytes, 347 capture_time_ms, now_ms, bytes,
347 retransmission, packet_counter_++)); 348 retransmission, packet_counter_++));
348 } 349 }
349 350
351 void PacedSender::SetAccountForAudioPackets(bool account_for_audio) {
352 rtc::CritScope cs(&critsect_);
353 account_for_audio_ = account_for_audio;
354 }
355
350 int64_t PacedSender::ExpectedQueueTimeMs() const { 356 int64_t PacedSender::ExpectedQueueTimeMs() const {
351 rtc::CritScope cs(&critsect_); 357 rtc::CritScope cs(&critsect_);
352 RTC_DCHECK_GT(pacing_bitrate_kbps_, 0); 358 RTC_DCHECK_GT(pacing_bitrate_kbps_, 0);
353 return static_cast<int64_t>(packets_->SizeInBytes() * 8 / 359 return static_cast<int64_t>(packets_->SizeInBytes() * 8 /
354 pacing_bitrate_kbps_); 360 pacing_bitrate_kbps_);
355 } 361 }
356 362
357 rtc::Optional<int64_t> PacedSender::GetApplicationLimitedRegionStartTime() 363 rtc::Optional<int64_t> PacedSender::GetApplicationLimitedRegionStartTime()
358 const { 364 const {
359 rtc::CritScope cs(&critsect_); 365 rtc::CritScope cs(&critsect_);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 return false; 511 return false;
506 } 512 }
507 513
508 critsect_.Leave(); 514 critsect_.Leave();
509 const bool success = packet_sender_->TimeToSendPacket( 515 const bool success = packet_sender_->TimeToSendPacket(
510 packet.ssrc, packet.sequence_number, packet.capture_time_ms, 516 packet.ssrc, packet.sequence_number, packet.capture_time_ms,
511 packet.retransmission, pacing_info); 517 packet.retransmission, pacing_info);
512 critsect_.Enter(); 518 critsect_.Enter();
513 519
514 if (success) { 520 if (success) {
515 // TODO(holmer): High priority packets should only be accounted for if we 521 if (packet.priority != kHighPriority || account_for_audio_) {
516 // are allocating bandwidth for audio.
517 if (packet.priority != kHighPriority) {
518 // Update media bytes sent. 522 // Update media bytes sent.
519 // TODO(eladalon): TimeToSendPacket() can also return |true| in some 523 // TODO(eladalon): TimeToSendPacket() can also return |true| in some
520 // situations where nothing actually ended up being sent to the network, 524 // situations where nothing actually ended up being sent to the network,
521 // and we probably don't want to update the budget in such cases. 525 // and we probably don't want to update the budget in such cases.
522 // https://bugs.chromium.org/p/webrtc/issues/detail?id=8052 526 // https://bugs.chromium.org/p/webrtc/issues/detail?id=8052
523 UpdateBudgetWithBytesSent(packet.bytes); 527 UpdateBudgetWithBytesSent(packet.bytes);
524 } 528 }
525 } 529 }
526 530
527 return success; 531 return success;
(...skipping 27 matching lines...) Expand all
555 rtc::CritScope cs(&critsect_); 559 rtc::CritScope cs(&critsect_);
556 pacing_factor_ = pacing_factor; 560 pacing_factor_ = pacing_factor;
557 } 561 }
558 562
559 void PacedSender::SetQueueTimeLimit(int limit_ms) { 563 void PacedSender::SetQueueTimeLimit(int limit_ms) {
560 rtc::CritScope cs(&critsect_); 564 rtc::CritScope cs(&critsect_);
561 queue_time_limit = limit_ms; 565 queue_time_limit = limit_ms;
562 } 566 }
563 567
564 } // namespace webrtc 568 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698