Fix race / crash in OnNetworkRouteChanged().

To achieve this some refactoring was done to make it possible to synchronize
access to the DelayBasedBwe in TransportFeedbackAdapter:
- The callback was removed from DelayBasedBwe, it now instead returns its
  result.
- TransportFeedbackAdapter was moved to modules/congestion_controller to avoid
  unnecessary dependencies.

Reenables previously disabled flaky test. Can no longer reproduce flakiness with gtest-parallel and asan/tsan builds.

BUG=webrtc:6427, webrtc:6422

Review-Url: https://codereview.webrtc.org/2366333003
Cr-Commit-Position: refs/heads/master@{#14430}
diff --git a/webrtc/tools/event_log_visualizer/analyzer.cc b/webrtc/tools/event_log_visualizer/analyzer.cc
index 260975b..d1dec22 100644
--- a/webrtc/tools/event_log_visualizer/analyzer.cc
+++ b/webrtc/tools/event_log_visualizer/analyzer.cc
@@ -24,6 +24,7 @@
 #include "webrtc/base/rate_statistics.h"
 #include "webrtc/call.h"
 #include "webrtc/common_types.h"
+#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
 #include "webrtc/modules/congestion_controller/include/congestion_controller.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
@@ -1053,6 +1054,34 @@
   plot->SetTitle("Simulated BWE behavior");
 }
 
+// TODO(holmer): Remove once TransportFeedbackAdapter no longer needs a
+// BitrateController.
+class NullBitrateController : public BitrateController {
+ public:
+  ~NullBitrateController() override {}
+  RtcpBandwidthObserver* CreateRtcpBandwidthObserver() override {
+    return nullptr;
+  }
+  void SetStartBitrate(int start_bitrate_bps) override {}
+  void SetMinMaxBitrate(int min_bitrate_bps, int max_bitrate_bps) override {}
+  void SetBitrates(int start_bitrate_bps,
+                   int min_bitrate_bps,
+                   int max_bitrate_bps) override {}
+  void ResetBitrates(int bitrate_bps,
+                     int min_bitrate_bps,
+                     int max_bitrate_bps) override {}
+  void OnDelayBasedBweResult(const DelayBasedBwe::Result& result) override {}
+  bool AvailableBandwidth(uint32_t* bandwidth) const override { return false; }
+  void SetReservedBitrate(uint32_t reserved_bitrate_bps) override {}
+  bool GetNetworkParameters(uint32_t* bitrate,
+                            uint8_t* fraction_loss,
+                            int64_t* rtt) override {
+    return false;
+  }
+  int64_t TimeUntilNextProcess() override { return 0; }
+  void Process() override {}
+};
+
 void EventLogAnalyzer::CreateNetworkDelayFeedbackGraph(Plot* plot) {
   std::map<uint64_t, const LoggedRtpPacket*> outgoing_rtp;
   std::map<uint64_t, const LoggedRtcpPacket*> incoming_rtcp;
@@ -1073,7 +1102,8 @@
   }
 
   SimulatedClock clock(0);
-  TransportFeedbackAdapter feedback_adapter(&clock);
+  NullBitrateController null_controller;
+  TransportFeedbackAdapter feedback_adapter(&clock, &null_controller);
 
   TimeSeries time_series;
   time_series.label = "Network Delay Change";