Add logging of delay-based bandwidth estimate.
BUG=webrtc:6423
Review-Url: https://codereview.webrtc.org/2695923004
Cr-Commit-Position: refs/heads/master@{#16663}
diff --git a/webrtc/modules/congestion_controller/BUILD.gn b/webrtc/modules/congestion_controller/BUILD.gn
index a20339c..787464a 100644
--- a/webrtc/modules/congestion_controller/BUILD.gn
+++ b/webrtc/modules/congestion_controller/BUILD.gn
@@ -47,6 +47,7 @@
"../../base:rtc_base",
"../../base:rtc_base_approved",
"../../base:rtc_numerics",
+ "../../logging:rtc_event_log_api",
"../../system_wrappers",
"../bitrate_controller",
"../pacing",
diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/congestion_controller.cc
index 81fe916..34b174e 100644
--- a/webrtc/modules/congestion_controller/congestion_controller.cc
+++ b/webrtc/modules/congestion_controller/congestion_controller.cc
@@ -169,7 +169,7 @@
new RateLimiter(clock, kRetransmitWindowSizeMs)),
remote_bitrate_estimator_(remote_bitrate_observer, clock_),
remote_estimator_proxy_(clock_, packet_router_),
- transport_feedback_adapter_(clock_, bitrate_controller_.get()),
+ transport_feedback_adapter_(event_log, clock_, bitrate_controller_.get()),
min_bitrate_bps_(congestion_controller::GetMinBitrateBps()),
max_bitrate_bps_(0),
last_reported_bitrate_bps_(0),
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe.cc b/webrtc/modules/congestion_controller/delay_based_bwe.cc
index fb91482..b89daab 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe.cc
+++ b/webrtc/modules/congestion_controller/delay_based_bwe.cc
@@ -18,6 +18,7 @@
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/logging.h"
#include "webrtc/base/thread_annotations.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
#include "webrtc/modules/congestion_controller/include/congestion_controller.h"
#include "webrtc/modules/pacing/paced_sender.h"
#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
@@ -208,9 +209,10 @@
return rtc::Optional<uint32_t>(bitrate_estimate_ * 1000);
}
-DelayBasedBwe::DelayBasedBwe(Clock* clock)
+DelayBasedBwe::DelayBasedBwe(RtcEventLog* event_log, Clock* clock)
: in_trendline_experiment_(TrendlineFilterExperimentIsEnabled()),
in_median_slope_experiment_(MedianSlopeFilterExperimentIsEnabled()),
+ event_log_(event_log),
clock_(clock),
inter_arrival_(),
kalman_estimator_(),
@@ -226,7 +228,9 @@
probing_interval_estimator_(&rate_control_),
median_slope_window_size_(kDefaultMedianSlopeWindowSize),
median_slope_threshold_gain_(kDefaultMedianSlopeThresholdGain),
- consecutive_delayed_feedbacks_(0) {
+ consecutive_delayed_feedbacks_(0),
+ last_logged_bitrate_(0),
+ last_logged_state_(kBwNormal) {
if (in_trendline_experiment_) {
ReadTrendlineFilterExperimentParameters(&trendline_window_size_,
&trendline_smoothing_coeff_,
@@ -389,6 +393,13 @@
last_update_ms_ = now_ms;
BWE_TEST_LOGGING_PLOT(1, "target_bitrate_bps", now_ms,
result.target_bitrate_bps);
+ if (event_log_ && (result.target_bitrate_bps != last_logged_bitrate_ ||
+ detector_.State() != last_logged_state_)) {
+ event_log_->LogBwePacketDelayEvent(result.target_bitrate_bps,
+ detector_.State());
+ last_logged_bitrate_ = result.target_bitrate_bps;
+ last_logged_state_ = detector_.State();
+ }
}
return result;
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe.h b/webrtc/modules/congestion_controller/delay_based_bwe.h
index d1a9676..c02182b 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe.h
+++ b/webrtc/modules/congestion_controller/delay_based_bwe.h
@@ -31,6 +31,8 @@
namespace webrtc {
+class RtcEventLog;
+
class DelayBasedBwe {
public:
static const int64_t kStreamTimeOutMs = 2000;
@@ -44,7 +46,7 @@
uint32_t target_bitrate_bps;
};
- explicit DelayBasedBwe(Clock* clock);
+ DelayBasedBwe(RtcEventLog* event_log, Clock* clock);
virtual ~DelayBasedBwe() {}
Result IncomingPacketFeedbackVector(
@@ -91,6 +93,7 @@
const bool in_median_slope_experiment_;
rtc::ThreadChecker network_thread_;
+ RtcEventLog* const event_log_;
Clock* const clock_;
std::unique_ptr<InterArrival> inter_arrival_;
std::unique_ptr<OveruseEstimator> kalman_estimator_;
@@ -110,6 +113,8 @@
size_t median_slope_window_size_;
double median_slope_threshold_gain_;
int consecutive_delayed_feedbacks_;
+ uint32_t last_logged_bitrate_;
+ BandwidthUsage last_logged_state_;
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(DelayBasedBwe);
};
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc b/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc
index 4f0829a..dd24b53 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc
+++ b/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc
@@ -174,7 +174,7 @@
public:
DelayBasedBweExperimentTest()
: override_field_trials_("WebRTC-ImprovedBitrateEstimate/Enabled/") {
- bitrate_estimator_.reset(new DelayBasedBwe(&clock_));
+ bitrate_estimator_.reset(new DelayBasedBwe(nullptr, &clock_));
}
private:
@@ -205,7 +205,7 @@
public:
DelayBasedBweTrendlineExperimentTest()
: override_field_trials_("WebRTC-BweTrendlineFilter/Enabled-15,0.9,4/") {
- bitrate_estimator_.reset(new DelayBasedBwe(&clock_));
+ bitrate_estimator_.reset(new DelayBasedBwe(nullptr, &clock_));
}
private:
@@ -236,7 +236,7 @@
public:
DelayBasedBweMedianSlopeExperimentTest()
: override_field_trials_("WebRTC-BweMedianSlopeFilter/Enabled-20,4/") {
- bitrate_estimator_.reset(new DelayBasedBwe(&clock_));
+ bitrate_estimator_.reset(new DelayBasedBwe(nullptr, &clock_));
}
private:
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe_unittest_helper.cc b/webrtc/modules/congestion_controller/delay_based_bwe_unittest_helper.cc
index 9aafc7b..4eaaad2 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe_unittest_helper.cc
+++ b/webrtc/modules/congestion_controller/delay_based_bwe_unittest_helper.cc
@@ -150,7 +150,7 @@
DelayBasedBweTest::DelayBasedBweTest()
: clock_(100000000),
- bitrate_estimator_(new DelayBasedBwe(&clock_)),
+ bitrate_estimator_(new DelayBasedBwe(nullptr, &clock_)),
stream_generator_(new test::StreamGenerator(1e6, // Capacity.
clock_.TimeInMicroseconds())),
arrival_time_offset_ms_(0),
diff --git a/webrtc/modules/congestion_controller/transport_feedback_adapter.cc b/webrtc/modules/congestion_controller/transport_feedback_adapter.cc
index c4be2b1..e0d7da0 100644
--- a/webrtc/modules/congestion_controller/transport_feedback_adapter.cc
+++ b/webrtc/modules/congestion_controller/transport_feedback_adapter.cc
@@ -15,6 +15,7 @@
#include "webrtc/base/checks.h"
#include "webrtc/base/logging.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
#include "webrtc/modules/congestion_controller/delay_based_bwe.h"
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
@@ -41,6 +42,7 @@
};
TransportFeedbackAdapter::TransportFeedbackAdapter(
+ RtcEventLog* event_log,
Clock* clock,
BitrateController* bitrate_controller)
: send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName(
@@ -48,6 +50,7 @@
"Enabled"),
transport_overhead_bytes_per_packet_(0),
send_time_history_(clock, kSendTimeHistoryWindowMs),
+ event_log_(event_log),
clock_(clock),
current_offset_ms_(kNoTimestamp),
last_timestamp_us_(kNoTimestamp),
@@ -57,7 +60,7 @@
void TransportFeedbackAdapter::InitBwe() {
rtc::CritScope cs(&bwe_lock_);
- delay_based_bwe_.reset(new DelayBasedBwe(clock_));
+ delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_));
}
void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number,
diff --git a/webrtc/modules/congestion_controller/transport_feedback_adapter.h b/webrtc/modules/congestion_controller/transport_feedback_adapter.h
index 632f125..f68d2af 100644
--- a/webrtc/modules/congestion_controller/transport_feedback_adapter.h
+++ b/webrtc/modules/congestion_controller/transport_feedback_adapter.h
@@ -24,12 +24,15 @@
namespace webrtc {
class BitrateController;
+class RtcEventLog;
class ProcessThread;
class TransportFeedbackAdapter : public TransportFeedbackObserver,
public CallStatsObserver {
public:
- TransportFeedbackAdapter(Clock* clock, BitrateController* bitrate_controller);
+ TransportFeedbackAdapter(RtcEventLog* event_log,
+ Clock* clock,
+ BitrateController* bitrate_controller);
virtual ~TransportFeedbackAdapter();
void InitBwe();
@@ -64,6 +67,7 @@
int transport_overhead_bytes_per_packet_ GUARDED_BY(&lock_);
SendTimeHistory send_time_history_ GUARDED_BY(&lock_);
std::unique_ptr<DelayBasedBwe> delay_based_bwe_ GUARDED_BY(&bwe_lock_);
+ RtcEventLog* const event_log_;
Clock* const clock_;
int64_t current_offset_ms_;
int64_t last_timestamp_us_;
diff --git a/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc b/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc
index 438a0fc..184b416 100644
--- a/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc
+++ b/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc
@@ -36,7 +36,8 @@
virtual ~TransportFeedbackAdapterTest() {}
virtual void SetUp() {
- adapter_.reset(new TransportFeedbackAdapter(&clock_, &bitrate_controller_));
+ adapter_.reset(
+ new TransportFeedbackAdapter(nullptr, &clock_, &bitrate_controller_));
adapter_->InitBwe();
adapter_->SetStartBitrate(300000);
}
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
index 0203a91..4a384a0 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
@@ -29,7 +29,7 @@
BitrateController::CreateBitrateController(clock,
observer,
&event_log_)),
- bwe_(new DelayBasedBwe(clock)),
+ bwe_(new DelayBasedBwe(nullptr, clock)),
feedback_observer_(bitrate_controller_->CreateRtcpBandwidthObserver()),
clock_(clock),
send_time_history_(clock_, 10000),