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..f8ca07720ab46ec5b9a402270651f6844bbcb7d4 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_->RecommendedProbeSize(); |
| + } |
| 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,9 +417,12 @@ 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) |
| + if (is_probing && bytes_sent > recommended_probe_size) { |
|
stefan-webrtc
2016/09/16 07:42:53
This may look like a bug to the reader as it seems
Irfan
2016/09/19 06:05:11
Not sure I follow. The is_probing flag indicates w
stefan-webrtc
2016/09/19 07:24:56
I'm thinking of the case where we have paced out,
Irfan
2016/09/19 18:23:30
We report once the aggregate bytes is above the re
|
| + prober_->ProbeSent(clock_->TimeInMilliseconds(), bytes_sent); |
| return; |
| + } |
| } else { |
| // Send failed, put it back into the queue. |
| packets_->CancelPop(packet); |
| @@ -430,12 +438,14 @@ void PacedSender::Process() { |
| // 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() |
| + size_t padding_needed = is_probing ? (recommended_probe_size - bytes_sent) |
| : padding_budget_->bytes_remaining(); |
| if (padding_needed > 0) |
| - SendPadding(padding_needed, probe_cluster_id); |
| + bytes_sent += SendPadding(padding_needed, probe_cluster_id); |
| } |
| + if (is_probing) |
| + prober_->ProbeSent(clock_->TimeInMilliseconds(), bytes_sent); |
| } |
| bool PacedSender::SendPacket(const paced_sender::Packet& packet, |
| @@ -458,7 +468,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 +480,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) { |