Set send side bitrate estimate on successful probing attempt.

BUG=webrtc:5859

Review-Url: https://codereview.webrtc.org/2263973004
Cr-Commit-Position: refs/heads/master@{#13887}
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
index d283796..1231c78 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
@@ -182,6 +182,14 @@
   MaybeTriggerOnNetworkChanged();
 }
 
+void BitrateControllerImpl::UpdateProbeBitrate(uint32_t bitrate_bps) {
+  {
+    rtc::CritScope cs(&critsect_);
+    bandwidth_estimation_.SetSendBitrate(bitrate_bps);
+  }
+  MaybeTriggerOnNetworkChanged();
+}
+
 void BitrateControllerImpl::UpdateDelayBasedEstimate(uint32_t bitrate_bps) {
   {
     rtc::CritScope cs(&critsect_);
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
index 114e1a6..e5f595d 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
@@ -61,6 +61,8 @@
                             uint8_t* fraction_loss,
                             int64_t* rtt) override;
 
+  void UpdateProbeBitrate(uint32_t bitrate_bps) override;
+
   int64_t TimeUntilNextProcess() override;
   void Process() override;
 
diff --git a/webrtc/modules/bitrate_controller/include/bitrate_controller.h b/webrtc/modules/bitrate_controller/include/bitrate_controller.h
index f06314c..4c4578a 100644
--- a/webrtc/modules/bitrate_controller/include/bitrate_controller.h
+++ b/webrtc/modules/bitrate_controller/include/bitrate_controller.h
@@ -79,6 +79,8 @@
 
   virtual void UpdateDelayBasedEstimate(uint32_t bitrate_bps) = 0;
 
+  virtual void UpdateProbeBitrate(uint32_t bitrate_bps) = 0;
+
   // Gets the available payload bandwidth in bits per second. Note that
   // this bandwidth excludes packet headers.
   virtual bool AvailableBandwidth(uint32_t* bandwidth) const = 0;
diff --git a/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h b/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h
index 7e9b4ec..dc7e286 100644
--- a/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h
+++ b/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h
@@ -38,6 +38,7 @@
   MOCK_METHOD3(ResetBitrates,
                void(int bitrate_bps, int min_bitrate_bps, int max_bitrate_bps));
   MOCK_METHOD1(UpdateDelayBasedEstimate, void(uint32_t bitrate_bps));
+  MOCK_METHOD1(UpdateProbeBitrate, void(uint32_t bitrate_bps));
   MOCK_METHOD1(SetEventLog, void(RtcEventLog* event_log));
   MOCK_CONST_METHOD1(AvailableBandwidth, bool(uint32_t* bandwidth));
   MOCK_METHOD1(SetReservedBitrate, void(uint32_t reserved_bitrate_bps));
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe.cc b/webrtc/modules/congestion_controller/delay_based_bwe.cc
index 641f15d..86ef6f2 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe.cc
+++ b/webrtc/modules/congestion_controller/delay_based_bwe.cc
@@ -95,6 +95,7 @@
       int bps = probe_bitrate_estimator_.HandleProbeAndEstimateBitrate(info);
       if (bps > 0) {
         remote_rate_.SetEstimate(bps, info.arrival_time_ms);
+        observer_->OnProbeBitrate(bps);
         update_estimate = true;
       }
     }
diff --git a/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h b/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h
index d7d8d2c..738570c 100644
--- a/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h
+++ b/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h
@@ -35,6 +35,8 @@
   virtual void OnReceiveBitrateChanged(const std::vector<uint32_t>& ssrcs,
                                        uint32_t bitrate) = 0;
 
+  virtual void OnProbeBitrate(uint32_t bitrate) {}
+
   virtual ~RemoteBitrateObserver() {}
 };
 
diff --git a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc
index 94ea9dd..217307b 100644
--- a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc
+++ b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc
@@ -142,6 +142,10 @@
   bitrate_controller_->UpdateDelayBasedEstimate(bitrate);
 }
 
+void TransportFeedbackAdapter::OnProbeBitrate(uint32_t bitrate) {
+  bitrate_controller_->UpdateProbeBitrate(bitrate);
+}
+
 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms,
                                            int64_t max_rtt_ms) {
   RTC_DCHECK(bitrate_estimator_.get() != nullptr);
diff --git a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h
index b15185f..2150110 100644
--- a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h
+++ b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h
@@ -56,6 +56,8 @@
   void OnReceiveBitrateChanged(const std::vector<uint32_t>& ssrcs,
                                uint32_t bitrate) override;
 
+  void OnProbeBitrate(uint32_t bitrate) override;
+
   rtc::CriticalSection lock_;
   SendTimeHistory send_time_history_ GUARDED_BY(&lock_);
   BitrateController* bitrate_controller_;