Chromium Code Reviews| 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..4c0df4d271457b8efb48c554b237806b6608fa58 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,31 @@ 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; |
|
stefan-webrtc
2016/09/19 07:24:56
Is this because you want to be able to fill up wit
Irfan
2016/09/19 18:23:30
I restructured this to ensure there is a single ca
|
| } 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 = is_probing ? (recommended_probe_size - bytes_sent) |
| + : padding_budget_->bytes_remaining(); |
| + |
| + if (padding_needed > 0) |
| + bytes_sent += SendPadding(padding_needed, probe_cluster_id); |
|
stefan-webrtc
2016/09/19 07:24:56
I'm starting to think that we may want a higher le
Irfan
2016/09/19 18:23:30
Yes, I did want to add a test once the CL looks go
|
| + } |
| } |
| + if (is_probing) |
| + prober_->ProbeSent(clock_->TimeInMilliseconds(), bytes_sent); |
| } |
| bool PacedSender::SendPacket(const paced_sender::Packet& packet, |
| @@ -458,7 +464,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 +476,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) { |