Index: webrtc/modules/congestion_controller/probe_bitrate_estimator.cc |
diff --git a/webrtc/modules/congestion_controller/probe_bitrate_estimator.cc b/webrtc/modules/congestion_controller/probe_bitrate_estimator.cc |
index 561fde939180b74e0cad8b606952487c984eabbd..98efb623587d23a2fc9ccf4ca7edd88583a34c87 100644 |
--- a/webrtc/modules/congestion_controller/probe_bitrate_estimator.cc |
+++ b/webrtc/modules/congestion_controller/probe_bitrate_estimator.cc |
@@ -47,16 +47,23 @@ ProbingResult ProbeBitrateEstimator::PacketFeedback( |
return ProbingResult(); |
} |
+ int payload_size = packet_info.payload_size * 8; |
danilchap
2016/08/22 13:53:35
may be call it payload_size_bits
philipel
2016/08/22 14:06:40
Done.
|
AggregatedCluster* cluster = &clusters_[packet_info.probe_cluster_id]; |
- cluster->first_send_ms = |
- std::min(cluster->first_send_ms, packet_info.send_time_ms); |
- cluster->last_send_ms = |
- std::max(cluster->last_send_ms, packet_info.send_time_ms); |
- cluster->first_receive_ms = |
- std::min(cluster->first_receive_ms, packet_info.arrival_time_ms); |
- cluster->last_receive_ms = |
- std::max(cluster->last_receive_ms, packet_info.arrival_time_ms); |
- cluster->size += packet_info.payload_size * 8; |
+ if (packet_info.send_time_ms < cluster->first_send_ms) { |
+ cluster->first_send_ms = packet_info.send_time_ms; |
+ } |
+ if (packet_info.send_time_ms > cluster->last_send_ms) { |
+ cluster->last_send_ms = packet_info.send_time_ms; |
+ cluster->size_last_send = payload_size; |
+ } |
+ if (packet_info.arrival_time_ms < cluster->first_receive_ms) { |
+ cluster->first_receive_ms = packet_info.arrival_time_ms; |
+ cluster->size_first_receive = payload_size; |
+ } |
+ if (packet_info.arrival_time_ms > cluster->last_receive_ms) { |
+ cluster->last_receive_ms = packet_info.arrival_time_ms; |
+ } |
+ cluster->size_total += payload_size; |
cluster->num_probes += 1; |
// Clean up old clusters. |
@@ -70,14 +77,6 @@ ProbingResult ProbeBitrateEstimator::PacketFeedback( |
float receive_interval_ms = |
cluster->last_receive_ms - cluster->first_receive_ms; |
- // Since the send/receive interval does not include the send/receive time of |
- // the last/first packet we expand the interval by the average inverval |
- // between the probing packets. |
- float interval_correction = |
- static_cast<float>(cluster->num_probes) / (cluster->num_probes - 1); |
- send_interval_ms *= interval_correction; |
- receive_interval_ms *= interval_correction; |
- |
if (send_interval_ms == 0 || receive_interval_ms == 0) { |
LOG(LS_INFO) << "Probing unsuccessful, invalid send/receive interval" |
<< " [cluster id: " << packet_info.probe_cluster_id |
@@ -86,16 +85,25 @@ ProbingResult ProbeBitrateEstimator::PacketFeedback( |
return ProbingResult(); |
} |
- float send_bps = static_cast<float>(cluster->size) / send_interval_ms * 1000; |
- float receive_bps = |
- static_cast<float>(cluster->size) / receive_interval_ms * 1000; |
+ // Since the |send_interval_ms| does not include the time it takes to actually |
+ // send the last packet the size of the last sent packet should not be |
+ // included when calculating the send bitrate. |
+ float send_size = cluster->size_total - cluster->size_last_send; |
danilchap
2016/08/22 13:53:35
probably RTC_DCHECK_GT(cluster->size_total - clust
philipel
2016/08/22 14:06:40
Done.
|
+ float send_bps = send_size / send_interval_ms * 1000; |
+ |
+ // Since the |receive_interval_ms| does not include the time it takes to |
+ // actually receive the first packet the size of the first received packet |
+ // should not be included when calculating the receive bitrate. |
+ float receive_size = cluster->size_total - cluster->size_first_receive; |
+ float receive_bps = receive_size / receive_interval_ms * 1000; |
+ |
float ratio = receive_bps / send_bps; |
if (ratio > kValidRatio) { |
LOG(LS_INFO) << "Probing unsuccessful, receive/send ratio too high" |
<< " [cluster id: " << packet_info.probe_cluster_id |
- << "] [send: " << cluster->size << " bytes / " |
- << send_interval_ms << " ms = " << send_bps / 1000 << " kb/s]" |
- << " [receive: " << cluster->size << " bytes / " |
+ << "] [send: " << send_size << " bytes / " << send_interval_ms |
+ << " ms = " << send_bps / 1000 << " kb/s]" |
+ << " [receive: " << receive_size << " bytes / " |
<< receive_interval_ms << " ms = " << receive_bps / 1000 |
<< " kb/s]" |
<< " [ratio: " << receive_bps / 1000 << " / " |
@@ -109,9 +117,9 @@ ProbingResult ProbeBitrateEstimator::PacketFeedback( |
last_valid_cluster_id_ = packet_info.probe_cluster_id; |
LOG(LS_INFO) << "Probing successful" |
<< " [cluster id: " << packet_info.probe_cluster_id |
- << "] [send: " << cluster->size << " bytes / " |
- << send_interval_ms << " ms = " << send_bps / 1000 << " kb/s]" |
- << " [receive: " << cluster->size << " bytes / " |
+ << "] [send: " << send_size << " bytes / " << send_interval_ms |
+ << " ms = " << send_bps / 1000 << " kb/s]" |
+ << " [receive: " << receive_size << " bytes / " |
<< receive_interval_ms << " ms = " << receive_bps / 1000 |
<< " kb/s]"; |