Refactoring: move ownership of RtcEventLog from Call to PeerConnection

This CL is a pure refactoring which should not result in any functinal
changes. It moves ownership of the RtcEventLog from webrtc::Call to the
webrtc::PeerConnection object.

This is done so that we can add RtcEventLog support for ICE events -
which will require the TransportController to have a pointer to the
RtcEventLog. PeerConnection is the closest common owner of both Call and
TransportController (through WebRtcSession).

BUG=webrtc:6393

Review-Url: https://codereview.webrtc.org/2353033005
Cr-Commit-Position: refs/heads/master@{#14578}
diff --git a/webrtc/api/DEPS b/webrtc/api/DEPS
index fcb506d..ee97620 100644
--- a/webrtc/api/DEPS
+++ b/webrtc/api/DEPS
@@ -5,6 +5,7 @@
   "+webrtc/media",
   "+webrtc/p2p",
   "+webrtc/pc",
+  "+webrtc/logging/rtc_event_log",
   "+webrtc/modules/audio_device",
   "+webrtc/modules/rtp_rtcp",
   "+webrtc/modules/video_coding",
@@ -20,7 +21,7 @@
   "peerconnection_jni\.cc": [
     "+webrtc/voice_engine",
   ],
-  "peerconnectionfactory.\cc": [
+  "peerconnectionfactory\.cc": [
     "+webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory.h",
-  ]
+  ],
 }
diff --git a/webrtc/api/mediacontroller.cc b/webrtc/api/mediacontroller.cc
index e688e39..319dd1f 100644
--- a/webrtc/api/mediacontroller.cc
+++ b/webrtc/api/mediacontroller.cc
@@ -30,11 +30,14 @@
  public:
   MediaController(const cricket::MediaConfig& media_config,
                   rtc::Thread* worker_thread,
-                  cricket::ChannelManager* channel_manager)
+                  cricket::ChannelManager* channel_manager,
+                  webrtc::RtcEventLog* event_log)
       : worker_thread_(worker_thread),
         media_config_(media_config),
-        channel_manager_(channel_manager) {
+        channel_manager_(channel_manager),
+        call_config_(event_log) {
     RTC_DCHECK(worker_thread);
+    RTC_DCHECK(event_log);
     worker_thread_->Invoke<void>(RTC_FROM_HERE,
                                  rtc::Bind(&MediaController::Construct_w, this,
                                            channel_manager_->media_engine()));
@@ -89,7 +92,8 @@
 MediaControllerInterface* MediaControllerInterface::Create(
     const cricket::MediaConfig& config,
     rtc::Thread* worker_thread,
-    cricket::ChannelManager* channel_manager) {
-  return new MediaController(config, worker_thread, channel_manager);
+    cricket::ChannelManager* channel_manager,
+    webrtc::RtcEventLog* event_log) {
+  return new MediaController(config, worker_thread, channel_manager, event_log);
 }
 }  // namespace webrtc
diff --git a/webrtc/api/mediacontroller.h b/webrtc/api/mediacontroller.h
index d7c76ab..5ada20d 100644
--- a/webrtc/api/mediacontroller.h
+++ b/webrtc/api/mediacontroller.h
@@ -21,6 +21,7 @@
 namespace webrtc {
 class Call;
 class VoiceEngine;
+class RtcEventLog;
 
 // The MediaController currently owns shared state between media channels, but
 // in the future will create and own RtpSenders and RtpReceivers.
@@ -29,7 +30,8 @@
   static MediaControllerInterface* Create(
       const cricket::MediaConfig& config,
       rtc::Thread* worker_thread,
-      cricket::ChannelManager* channel_manager);
+      cricket::ChannelManager* channel_manager,
+      webrtc::RtcEventLog* event_log);
 
   virtual ~MediaControllerInterface() {}
   virtual void Close() = 0;
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
index 7cc5d00..dd99e36 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -37,8 +37,10 @@
 #include "webrtc/base/stringutils.h"
 #include "webrtc/base/trace_event.h"
 #include "webrtc/call.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/sctp/sctpdataengine.h"
 #include "webrtc/pc/channelmanager.h"
+#include "webrtc/system_wrappers/include/clock.h"
 #include "webrtc/system_wrappers/include/field_trial.h"
 
 namespace {
@@ -571,6 +573,7 @@
       ice_state_(kIceNew),
       ice_connection_state_(kIceConnectionNew),
       ice_gathering_state_(kIceGatheringNew),
+      event_log_(RtcEventLog::Create(webrtc::Clock::GetRealTimeClock())),
       rtcp_cname_(GenerateRtcpCname()),
       local_streams_(StreamCollection::Create()),
       remote_streams_(StreamCollection::Create()) {}
@@ -619,8 +622,8 @@
     return false;
   }
 
-  media_controller_.reset(
-      factory_->CreateMediaController(configuration.media_config));
+  media_controller_.reset(factory_->CreateMediaController(
+      configuration.media_config, event_log_.get()));
 
   session_.reset(new WebRtcSession(
       media_controller_.get(), factory_->network_thread(),
@@ -2343,10 +2346,10 @@
 
 bool PeerConnection::StartRtcEventLog_w(rtc::PlatformFile file,
                                         int64_t max_size_bytes) {
-  return media_controller_->call_w()->StartEventLog(file, max_size_bytes);
+  return event_log_->StartLogging(file, max_size_bytes);
 }
 
 void PeerConnection::StopRtcEventLog_w() {
-  media_controller_->call_w()->StopEventLog();
+  event_log_->StopLogging();
 }
 }  // namespace webrtc
diff --git a/webrtc/api/peerconnection.h b/webrtc/api/peerconnection.h
index 3087160..f5b0af8 100644
--- a/webrtc/api/peerconnection.h
+++ b/webrtc/api/peerconnection.h
@@ -29,6 +29,7 @@
 
 class MediaStreamObserver;
 class VideoRtpReceiver;
+class RtcEventLog;
 
 // Populates |session_options| from |rtc_options|, and returns true if options
 // are valid.
@@ -392,6 +393,8 @@
   IceGatheringState ice_gathering_state_;
 
   std::unique_ptr<cricket::PortAllocator> port_allocator_;
+  // The EventLog needs to outlive the media controller.
+  std::unique_ptr<RtcEventLog> event_log_;
   std::unique_ptr<MediaControllerInterface> media_controller_;
 
   // One PeerConnection has only one RTCP CNAME.
@@ -426,7 +429,6 @@
   std::vector<
       rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>>
       receivers_;
-
   std::unique_ptr<WebRtcSession> session_;
   std::unique_ptr<StatsCollector> stats_;
   rtc::scoped_refptr<RTCStatsCollector> stats_collector_;
diff --git a/webrtc/api/peerconnectionfactory.cc b/webrtc/api/peerconnectionfactory.cc
index f49c291..e76701e 100644
--- a/webrtc/api/peerconnectionfactory.cc
+++ b/webrtc/api/peerconnectionfactory.cc
@@ -302,10 +302,11 @@
 }
 
 webrtc::MediaControllerInterface* PeerConnectionFactory::CreateMediaController(
-    const cricket::MediaConfig& config) const {
+    const cricket::MediaConfig& config,
+    webrtc::RtcEventLog* event_log) const {
   RTC_DCHECK(signaling_thread_->IsCurrent());
   return MediaControllerInterface::Create(config, worker_thread_,
-                                          channel_manager_.get());
+                                          channel_manager_.get(), event_log);
 }
 
 cricket::TransportController* PeerConnectionFactory::CreateTransportController(
diff --git a/webrtc/api/peerconnectionfactory.h b/webrtc/api/peerconnectionfactory.h
index 7684b95..7a30ab4 100644
--- a/webrtc/api/peerconnectionfactory.h
+++ b/webrtc/api/peerconnectionfactory.h
@@ -29,6 +29,8 @@
 
 namespace webrtc {
 
+class RtcEventLog;
+
 class PeerConnectionFactory : public PeerConnectionFactoryInterface {
  public:
   void SetOptions(const Options& options) override;
@@ -89,7 +91,8 @@
   void StopRtcEventLog() override {}
 
   virtual webrtc::MediaControllerInterface* CreateMediaController(
-      const cricket::MediaConfig& config) const;
+      const cricket::MediaConfig& config,
+      RtcEventLog* event_log) const;
   virtual cricket::TransportController* CreateTransportController(
       cricket::PortAllocator* port_allocator,
       bool redetermine_role_on_ice_restart);
diff --git a/webrtc/api/peerconnectioninterface_unittest.cc b/webrtc/api/peerconnectioninterface_unittest.cc
index d91336c..a4a11e1 100644
--- a/webrtc/api/peerconnectioninterface_unittest.cc
+++ b/webrtc/api/peerconnectioninterface_unittest.cc
@@ -558,12 +558,13 @@
 class PeerConnectionFactoryForTest : public webrtc::PeerConnectionFactory {
  public:
   webrtc::MediaControllerInterface* CreateMediaController(
-      const cricket::MediaConfig& config) const override {
+      const cricket::MediaConfig& config,
+      webrtc::RtcEventLog* event_log) const override {
     create_media_controller_called_ = true;
     create_media_controller_config_ = config;
 
     webrtc::MediaControllerInterface* mc =
-        PeerConnectionFactory::CreateMediaController(config);
+        PeerConnectionFactory::CreateMediaController(config, event_log);
     EXPECT_TRUE(mc != nullptr);
     return mc;
   }
diff --git a/webrtc/api/rtcstatscollector_unittest.cc b/webrtc/api/rtcstatscollector_unittest.cc
index 7103864..0da772f 100644
--- a/webrtc/api/rtcstatscollector_unittest.cc
+++ b/webrtc/api/rtcstatscollector_unittest.cc
@@ -29,6 +29,7 @@
 #include "webrtc/base/thread_checker.h"
 #include "webrtc/base/timedelta.h"
 #include "webrtc/base/timeutils.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakemediaengine.h"
 #include "webrtc/p2p/base/port.h"
 
@@ -112,14 +113,15 @@
   RTCStatsCollectorTestHelper()
       : worker_thread_(rtc::Thread::Current()),
         network_thread_(rtc::Thread::Current()),
-        channel_manager_(new cricket::ChannelManager(
-            new cricket::FakeMediaEngine(),
-            worker_thread_,
-            network_thread_)),
+        channel_manager_(
+            new cricket::ChannelManager(new cricket::FakeMediaEngine(),
+                                        worker_thread_,
+                                        network_thread_)),
         media_controller_(
             MediaControllerInterface::Create(cricket::MediaConfig(),
                                              worker_thread_,
-                                             channel_manager_.get())),
+                                             channel_manager_.get(),
+                                             &event_log_)),
         session_(media_controller_.get()),
         pc_() {
     // Default return values for mocks.
@@ -148,6 +150,7 @@
 
  private:
   rtc::ScopedFakeClock fake_clock_;
+  webrtc::RtcEventLogNullImpl event_log_;
   rtc::Thread* const worker_thread_;
   rtc::Thread* const network_thread_;
   std::unique_ptr<cricket::ChannelManager> channel_manager_;
diff --git a/webrtc/api/rtpsenderreceiver_unittest.cc b/webrtc/api/rtpsenderreceiver_unittest.cc
index 3fccfb9..4e98f0c 100644
--- a/webrtc/api/rtpsenderreceiver_unittest.cc
+++ b/webrtc/api/rtpsenderreceiver_unittest.cc
@@ -24,6 +24,7 @@
 #include "webrtc/api/videotrack.h"
 #include "webrtc/api/videotracksource.h"
 #include "webrtc/base/gunit.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakemediaengine.h"
 #include "webrtc/media/base/mediachannel.h"
 #include "webrtc/media/engine/fakewebrtccall.h"
@@ -56,7 +57,7 @@
         channel_manager_(media_engine_,
                          rtc::Thread::Current(),
                          rtc::Thread::Current()),
-        fake_call_(webrtc::Call::Config()),
+        fake_call_(Call::Config(&event_log_)),
         fake_media_controller_(&channel_manager_, &fake_call_),
         stream_(MediaStream::Create(kStreamLabel1)) {
     // Create channels to be used by the RtpSenders and RtpReceivers.
@@ -218,6 +219,7 @@
   }
 
  protected:
+  webrtc::RtcEventLogNullImpl event_log_;
   cricket::FakeMediaEngine* media_engine_;
   cricket::FakeTransportController fake_transport_controller_;
   cricket::ChannelManager channel_manager_;
diff --git a/webrtc/api/statscollector_unittest.cc b/webrtc/api/statscollector_unittest.cc
index acef448..8d5978f 100644
--- a/webrtc/api/statscollector_unittest.cc
+++ b/webrtc/api/statscollector_unittest.cc
@@ -29,6 +29,7 @@
 #include "webrtc/base/fakesslidentity.h"
 #include "webrtc/base/gunit.h"
 #include "webrtc/base/network.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakemediaengine.h"
 #include "webrtc/media/base/test/mock_mediachannel.h"
 #include "webrtc/p2p/base/faketransportcontroller.h"
@@ -493,7 +494,8 @@
         media_controller_(
             webrtc::MediaControllerInterface::Create(cricket::MediaConfig(),
                                                      worker_thread_,
-                                                     channel_manager_.get())),
+                                                     channel_manager_.get(),
+                                                     &event_log_)),
         session_(media_controller_.get()) {
     // By default, we ignore session GetStats calls.
     EXPECT_CALL(session_, GetTransportStats(_)).WillRepeatedly(Return(false));
@@ -751,6 +753,7 @@
               srtp_crypto_suite);
   }
 
+  webrtc::RtcEventLogNullImpl event_log_;
   rtc::Thread* const worker_thread_;
   rtc::Thread* const network_thread_;
   cricket::FakeMediaEngine* media_engine_;
diff --git a/webrtc/api/webrtcsession_unittest.cc b/webrtc/api/webrtcsession_unittest.cc
index 6c0170e..ba9ea2b 100644
--- a/webrtc/api/webrtcsession_unittest.cc
+++ b/webrtc/api/webrtcsession_unittest.cc
@@ -35,6 +35,7 @@
 #include "webrtc/base/stringutils.h"
 #include "webrtc/base/thread.h"
 #include "webrtc/base/virtualsocketserver.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakemediaengine.h"
 #include "webrtc/media/base/fakevideorenderer.h"
 #include "webrtc/media/base/mediachannel.h"
@@ -331,15 +332,15 @@
   WebRtcSessionTest()
       : media_engine_(new cricket::FakeMediaEngine()),
         data_engine_(new cricket::FakeDataEngine()),
-        channel_manager_(
-            new cricket::ChannelManager(media_engine_,
-                                        data_engine_,
-                                        rtc::Thread::Current())),
-        fake_call_(webrtc::Call::Config()),
+        channel_manager_(new cricket::ChannelManager(media_engine_,
+                                                     data_engine_,
+                                                     rtc::Thread::Current())),
+        fake_call_(webrtc::Call::Config(&event_log_)),
         media_controller_(
             webrtc::MediaControllerInterface::Create(cricket::MediaConfig(),
                                                      rtc::Thread::Current(),
-                                                     channel_manager_.get())),
+                                                     channel_manager_.get(),
+                                                     &event_log_)),
         tdesc_factory_(new cricket::TransportDescriptionFactory()),
         desc_factory_(
             new cricket::MediaSessionDescriptionFactory(channel_manager_.get(),
@@ -1480,6 +1481,7 @@
     allocator_->set_flags(cricket::PORTALLOCATOR_DISABLE_TCP);
   }
 
+  webrtc::RtcEventLogNullImpl event_log_;
   cricket::FakeMediaEngine* media_engine_;
   cricket::FakeDataEngine* data_engine_;
   std::unique_ptr<cricket::ChannelManager> channel_manager_;