Don't reset RTT Backoff timeout on route change.

Bug: webrtc:9718
Change-Id: I536733b33c40838cdfc473988581147bec6a358a
Reviewed-on: https://webrtc-review.googlesource.com/c/109927
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Christoffer Rodbro <crodbro@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25638}
diff --git a/modules/bitrate_controller/send_side_bandwidth_estimation.h b/modules/bitrate_controller/send_side_bandwidth_estimation.h
index 9ee43bb..83efe92 100644
--- a/modules/bitrate_controller/send_side_bandwidth_estimation.h
+++ b/modules/bitrate_controller/send_side_bandwidth_estimation.h
@@ -29,14 +29,22 @@
 
 class RtcEventLog;
 
-struct RttBasedBackoffConfig {
-  RttBasedBackoffConfig();
-  RttBasedBackoffConfig(const RttBasedBackoffConfig&);
-  RttBasedBackoffConfig& operator=(const RttBasedBackoffConfig&) = default;
-  ~RttBasedBackoffConfig();
-  FieldTrialParameter<TimeDelta> rtt_limit;
-  FieldTrialParameter<double> drop_fraction;
-  FieldTrialParameter<TimeDelta> drop_interval;
+class RttBasedBackoff {
+ public:
+  RttBasedBackoff();
+  ~RttBasedBackoff();
+  void OnRouteChange();
+  void UpdatePropagationRtt(Timestamp at_time, TimeDelta propagation_rtt);
+  TimeDelta RttLowerBound(Timestamp at_time) const;
+
+  FieldTrialParameter<TimeDelta> rtt_limit_;
+  FieldTrialParameter<double> drop_fraction_;
+  FieldTrialParameter<TimeDelta> drop_interval_;
+  FieldTrialFlag persist_on_route_change_;
+
+ public:
+  Timestamp last_propagation_rtt_update_;
+  TimeDelta last_propagation_rtt_;
 };
 
 class SendSideBandwidthEstimation {
@@ -45,12 +53,13 @@
   explicit SendSideBandwidthEstimation(RtcEventLog* event_log);
   ~SendSideBandwidthEstimation();
 
+  void OnRouteChange();
   void CurrentEstimate(int* bitrate, uint8_t* loss, int64_t* rtt) const;
 
   // Call periodically to update estimate.
   void UpdateEstimate(Timestamp at_time);
   void OnSentPacket(SentPacket sent_packet);
-  void UpdatePropagationRtt(Timestamp at_time, TimeDelta feedback_rtt);
+  void UpdatePropagationRtt(Timestamp at_time, TimeDelta propagation_rtt);
 
   // Call when we receive a RTCP message with TMMBR or REMB.
   void UpdateReceiverEstimate(Timestamp at_time, DataRate bandwidth);
@@ -96,7 +105,7 @@
   // set |current_bitrate_| to the capped value and updates the event log.
   void CapBitrateToThresholds(Timestamp at_time, DataRate bitrate);
 
-  RttBasedBackoffConfig rtt_backoff_config_;
+  RttBasedBackoff rtt_backoff_;
 
   std::deque<std::pair<Timestamp, DataRate> > min_bitrate_history_;
 
@@ -117,9 +126,6 @@
   uint8_t last_logged_fraction_loss_;
   TimeDelta last_round_trip_time_;
 
-  Timestamp last_propagation_rtt_update_;
-  TimeDelta last_propagation_rtt_;
-
   DataRate bwe_incoming_;
   DataRate delay_based_bitrate_;
   Timestamp time_last_decrease_;