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

Unified Diff: webrtc/modules/congestion_controller/probe_bitrate_estimator.cc

Issue 2997883002: Video/Screenshare loopback tool.
Patch Set: Rebase Created 3 years, 4 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
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 8fa22e7dcd6edfc9f379d5df0c0c225537eac1b5..7babf80de2b4db61a6f569d2fe2875ecdc785e06 100644
--- a/webrtc/modules/congestion_controller/probe_bitrate_estimator.cc
+++ b/webrtc/modules/congestion_controller/probe_bitrate_estimator.cc
@@ -11,10 +11,12 @@
#include "webrtc/modules/congestion_controller/probe_bitrate_estimator.h"
#include <algorithm>
+#include <sstream>
#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
#include "webrtc/rtc_base/checks.h"
#include "webrtc/rtc_base/logging.h"
+#include "webrtc/rtc_base/timeutils.h"
namespace {
// The minumum number of probes we need to receive feedback about in percent
@@ -61,6 +63,14 @@ int ProbeBitrateEstimator::HandleProbeAndEstimateBitrate(
RTC_DCHECK_NE(cluster_id, PacedPacketInfo::kNotAProbe);
EraseOldClusters(packet_feedback.arrival_time_ms - kMaxClusterHistoryMs);
+ if (start_ == 0)
+ start_ = packet_feedback.send_time_ms;
+
+ Print("Feedback:%5u id:%3d send:%8ld receive:%8ld size:%4lu",
+ packet_feedback.sequence_number,
+ packet_feedback.pacing_info.probe_cluster_id,
+ packet_feedback.send_time_ms - start_,
+ packet_feedback.arrival_time_ms - start_, packet_feedback.payload_size);
int payload_size_bits = packet_feedback.payload_size * 8;
AggregatedCluster* cluster = &clusters_[cluster_id];
@@ -98,10 +108,16 @@ int ProbeBitrateEstimator::HandleProbeAndEstimateBitrate(
if (send_interval_ms <= 0 || send_interval_ms > kMaxProbeIntervalMs ||
receive_interval_ms <= 0 || receive_interval_ms > kMaxProbeIntervalMs) {
+ std::stringstream ss1;
+ ss1 << "Probing unsuccessful, invalid send/receive interval"
+ << " [cluster id: " << cluster_id
+ << "] [send interval: " << send_interval_ms << " ms]"
+ << " [receive interval: " << receive_interval_ms << " ms]";
LOG(LS_INFO) << "Probing unsuccessful, invalid send/receive interval"
<< " [cluster id: " << cluster_id
<< "] [send interval: " << send_interval_ms << " ms]"
<< " [receive interval: " << receive_interval_ms << " ms]";
+ Print("%s", ss1.str().c_str());
if (event_log_) {
event_log_->LogProbeResultFailure(cluster_id,
kInvalidSendReceiveInterval);
@@ -112,23 +128,33 @@ int ProbeBitrateEstimator::HandleProbeAndEstimateBitrate(
// send the last packet the size of the last sent packet should not be
// included when calculating the send bitrate.
RTC_DCHECK_GT(cluster->size_total, cluster->size_last_send);
- float send_size = cluster->size_total - cluster->size_last_send;
- float send_bps = send_size / send_interval_ms * 1000;
+ float send_size_bits = cluster->size_total - cluster->size_last_send;
+ float send_bps = send_size_bits / 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.
RTC_DCHECK_GT(cluster->size_total, cluster->size_first_receive);
- float receive_size = cluster->size_total - cluster->size_first_receive;
- float receive_bps = receive_size / receive_interval_ms * 1000;
+ float receive_size_bits = cluster->size_total - cluster->size_first_receive;
+ float receive_bps = receive_size_bits / receive_interval_ms * 1000;
float ratio = receive_bps / send_bps;
if (ratio > kMaxValidRatio) {
+ std::stringstream ss2;
+ ss2 << "Probing unsuccessful, receive/send ratio too high"
+ << " [cluster id: " << cluster_id << "] [send: " << send_size_bits / 8
+ << " bytes / " << send_interval_ms << " ms = " << send_bps / 1000
+ << " kb/s]"
+ << " [receive: " << receive_size_bits / 8 << " bytes / "
+ << receive_interval_ms << " ms = " << receive_bps / 1000 << " kb/s]"
+ << " [ratio: " << receive_bps / 1000 << " / " << send_bps / 1000
+ << " = " << ratio << " > kMaxValidRatio (" << kMaxValidRatio << ")]";
+ Print("%s", ss2.str().c_str());
LOG(LS_INFO) << "Probing unsuccessful, receive/send ratio too high"
- << " [cluster id: " << cluster_id << "] [send: " << send_size
- << " bytes / " << send_interval_ms
- << " ms = " << send_bps / 1000 << " kb/s]"
- << " [receive: " << receive_size << " bytes / "
+ << " [cluster id: " << cluster_id
+ << "] [send: " << send_size_bits / 8 << " bytes / "
+ << send_interval_ms << " ms = " << send_bps / 1000 << " kb/s]"
+ << " [receive: " << receive_size_bits / 8 << " bytes / "
<< receive_interval_ms << " ms = " << receive_bps / 1000
<< " kb/s]"
<< " [ratio: " << receive_bps / 1000 << " / "
@@ -138,11 +164,18 @@ int ProbeBitrateEstimator::HandleProbeAndEstimateBitrate(
event_log_->LogProbeResultFailure(cluster_id, kInvalidSendReceiveRatio);
return -1;
}
+ std::stringstream ss3;
+ ss3 << "Probing successful"
+ << " [cluster id: " << cluster_id << "] [send: " << send_size_bits / 8
+ << " bytes / " << send_interval_ms << " ms = " << send_bps / 1000
+ << " kb/s]"
+ << " [receive: " << receive_size_bits / 8 << " bytes / "
+ << receive_interval_ms << " ms = " << receive_bps / 1000 << " kb/s]";
LOG(LS_INFO) << "Probing successful"
- << " [cluster id: " << cluster_id << "] [send: " << send_size
- << " bytes / " << send_interval_ms << " ms = " << send_bps / 1000
- << " kb/s]"
- << " [receive: " << receive_size << " bytes / "
+ << " [cluster id: " << cluster_id
+ << "] [send: " << send_size_bits / 8 << " bytes / "
+ << send_interval_ms << " ms = " << send_bps / 1000 << " kb/s]"
+ << " [receive: " << receive_size_bits / 8 << " bytes / "
<< receive_interval_ms << " ms = " << receive_bps / 1000
<< " kb/s]";
@@ -154,15 +187,27 @@ int ProbeBitrateEstimator::HandleProbeAndEstimateBitrate(
RTC_DCHECK_GT(send_bps, receive_bps);
res = kTargetUtilizationFraction * receive_bps;
}
- if (event_log_)
- event_log_->LogProbeResultSuccess(cluster_id, res);
estimated_bitrate_bps_ = rtc::Optional<int>(res);
+ last_estimate_update_ms_ = rtc::TimeMillis();
+ cluster_id_ = cluster_id;
+ Print("%s, estimated kbps: %d", ss3.str().c_str(),
+ *estimated_bitrate_bps_ / 1000);
return *estimated_bitrate_bps_;
}
-rtc::Optional<int>
-ProbeBitrateEstimator::FetchAndResetLastEstimatedBitrateBps() {
+rtc::Optional<int> ProbeBitrateEstimator::FetchAndResetLastEstimatedBitrateBps(
+ int64_t timeout) {
+ int64_t now_ms = rtc::TimeMillis();
rtc::Optional<int> estimated_bitrate_bps = estimated_bitrate_bps_;
+
+ if (!estimated_bitrate_bps || now_ms < last_estimate_update_ms_ + timeout)
+ return rtc::Optional<int>();
+
+ Print("Probe result %d kbps", *estimated_bitrate_bps / 1000);
+
+ if (event_log_)
+ event_log_->LogProbeResultSuccess(cluster_id_, *estimated_bitrate_bps);
+
estimated_bitrate_bps_.reset();
return estimated_bitrate_bps;
}

Powered by Google App Engine
This is Rietveld 408576698