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),