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

Unified Diff: webrtc/modules/pacing/paced_sender.cc

Issue 2347023002: BitrateProber: Support higher probing bitrates (Closed)
Patch Set: Rebased Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/pacing/paced_sender.h ('k') | webrtc/modules/pacing/paced_sender_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/pacing/paced_sender.cc
diff --git a/webrtc/modules/pacing/paced_sender.cc b/webrtc/modules/pacing/paced_sender.cc
index b0b86ee40e73cce3af346a12876613484059cce4..fe918bbbb345221e32007db84b89e6e6753210c7 100644
--- a/webrtc/modules/pacing/paced_sender.cc
+++ b/webrtc/modules/pacing/paced_sender.cc
@@ -402,8 +402,13 @@ void PacedSender::Process() {
}
bool is_probing = prober_->IsProbing();
- int probe_cluster_id = is_probing ? prober_->CurrentClusterId()
- : PacketInfo::kNotAProbe;
+ int probe_cluster_id = PacketInfo::kNotAProbe;
+ size_t bytes_sent = 0;
+ size_t recommended_probe_size = 0;
+ if (is_probing) {
+ probe_cluster_id = prober_->CurrentClusterId();
+ recommended_probe_size = prober_->RecommendedMinProbeSize();
+ }
while (!packets_->Empty()) {
// Since we need to release the lock in order to send, we first pop the
// element from the priority queue but keep it in storage, so that we can
@@ -412,30 +417,32 @@ void PacedSender::Process() {
if (SendPacket(packet, probe_cluster_id)) {
// Send succeeded, remove it from the queue.
+ bytes_sent += packet.bytes;
packets_->FinalizePop(packet);
- if (is_probing)
- return;
+ if (is_probing && bytes_sent > recommended_probe_size)
+ break;
} else {
// Send failed, put it back into the queue.
packets_->CancelPop(packet);
- return;
+ break;
}
}
- RTC_DCHECK(packets_->Empty());
// TODO(holmer): Remove the paused_ check when issue 5307 has been fixed.
- if (paused_)
- return;
-
- // We can not send padding unless a normal packet has first been sent. If we
- // do, timestamps get messed up.
- if (packet_counter_ > 0) {
- size_t padding_needed = is_probing ? prober_->RecommendedPacketSize()
- : padding_budget_->bytes_remaining();
-
- if (padding_needed > 0)
- SendPadding(padding_needed, probe_cluster_id);
+ if (packets_->Empty() && !paused_) {
+ // We can not send padding unless a normal packet has first been sent. If we
+ // do, timestamps get messed up.
+ if (packet_counter_ > 0) {
+ int padding_needed =
+ static_cast<int>(is_probing ? (recommended_probe_size - bytes_sent)
+ : padding_budget_->bytes_remaining());
+
+ if (padding_needed > 0)
+ bytes_sent += SendPadding(padding_needed, probe_cluster_id);
+ }
}
+ if (is_probing && bytes_sent > 0)
+ prober_->ProbeSent(clock_->TimeInMilliseconds(), bytes_sent);
}
bool PacedSender::SendPacket(const paced_sender::Packet& packet,
@@ -458,7 +465,6 @@ bool PacedSender::SendPacket(const paced_sender::Packet& packet,
critsect_->Enter();
if (success) {
- prober_->PacketSent(clock_->TimeInMilliseconds(), packet.bytes);
// TODO(holmer): High priority packets should only be accounted for if we
// are allocating bandwidth for audio.
if (packet.priority != kHighPriority) {
@@ -471,17 +477,17 @@ bool PacedSender::SendPacket(const paced_sender::Packet& packet,
return success;
}
-void PacedSender::SendPadding(size_t padding_needed, int probe_cluster_id) {
+size_t PacedSender::SendPadding(size_t padding_needed, int probe_cluster_id) {
critsect_->Leave();
size_t bytes_sent =
packet_sender_->TimeToSendPadding(padding_needed, probe_cluster_id);
critsect_->Enter();
if (bytes_sent > 0) {
- prober_->PacketSent(clock_->TimeInMilliseconds(), bytes_sent);
media_budget_->UseBudget(bytes_sent);
padding_budget_->UseBudget(bytes_sent);
}
+ return bytes_sent;
}
void PacedSender::UpdateBytesPerInterval(int64_t delta_time_ms) {
« no previous file with comments | « webrtc/modules/pacing/paced_sender.h ('k') | webrtc/modules/pacing/paced_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698