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_;
diff --git a/webrtc/call.h b/webrtc/call.h
index 193124e..9855b60 100644
--- a/webrtc/call.h
+++ b/webrtc/call.h
@@ -26,6 +26,7 @@
 namespace webrtc {
 
 class AudioProcessing;
+class RtcEventLog;
 
 const char* Version();
 
@@ -72,6 +73,10 @@
 class Call {
  public:
   struct Config {
+    explicit Config(RtcEventLog* event_log) : event_log(event_log) {
+      RTC_DCHECK(event_log);
+    }
+
     static const int kDefaultStartBitrateBps;
 
     // Bitrate config used until valid bitrate estimates are calculated. Also
@@ -89,6 +94,10 @@
     // Audio Processing Module to be used in this call.
     // TODO(solenberg): Change this to a shared_ptr once we can use C++11.
     AudioProcessing* audio_processing = nullptr;
+
+    // RtcEventLog to use for this call. Required.
+    // Use webrtc::RtcEventLog::CreateNull() for a null implementation.
+    RtcEventLog* event_log = nullptr;
   };
 
   struct Stats {
@@ -151,10 +160,6 @@
 
   virtual void OnSentPacket(const rtc::SentPacket& sent_packet) = 0;
 
-  virtual bool StartEventLog(rtc::PlatformFile log_file,
-                             int64_t max_size_bytes) = 0;
-  virtual void StopEventLog() = 0;
-
   virtual ~Call() {}
 };
 
diff --git a/webrtc/call/bitrate_estimator_tests.cc b/webrtc/call/bitrate_estimator_tests.cc
index 60e1d8c..80949ba 100644
--- a/webrtc/call/bitrate_estimator_tests.cc
+++ b/webrtc/call/bitrate_estimator_tests.cc
@@ -109,7 +109,7 @@
   virtual void SetUp() {
     AudioState::Config audio_state_config;
     audio_state_config.voice_engine = &mock_voice_engine_;
-    Call::Config config;
+    Call::Config config(&event_log_);
     config.audio_state = AudioState::Create(audio_state_config);
     receiver_call_.reset(Call::Create(config));
     sender_call_.reset(Call::Create(config));
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc
index dd08d77..5d6bbab 100644
--- a/webrtc/call/call.cc
+++ b/webrtc/call/call.cc
@@ -109,13 +109,6 @@
   void OnAllocationLimitsChanged(uint32_t min_send_bitrate_bps,
                                  uint32_t max_padding_bitrate_bps) override;
 
-  bool StartEventLog(rtc::PlatformFile log_file,
-                     int64_t max_size_bytes) override {
-    return event_log_->StartLogging(log_file, max_size_bytes);
-  }
-
-  void StopEventLog() override { event_log_->StopLogging(); }
-
  private:
   DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet,
                              size_t length);
@@ -171,8 +164,7 @@
   std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_);
 
   VideoSendStream::RtpStateMap suspended_video_send_ssrcs_;
-
-  std::unique_ptr<webrtc::RtcEventLog> event_log_;
+  webrtc::RtcEventLog* event_log_;
 
   // The following members are only accessed (exclusively) from one thread and
   // from the destructor, and therefore doesn't need any explicit
@@ -237,7 +229,7 @@
       video_network_state_(kNetworkUp),
       receive_crit_(RWLockWrapper::CreateRWLock()),
       send_crit_(RWLockWrapper::CreateRWLock()),
-      event_log_(RtcEventLog::Create(webrtc::Clock::GetRealTimeClock())),
+      event_log_(config.event_log),
       first_packet_sent_ms_(-1),
       received_bytes_per_second_counter_(clock_, nullptr, true),
       received_audio_bytes_per_second_counter_(clock_, nullptr, true),
@@ -249,11 +241,12 @@
       pacer_bitrate_kbps_counter_(clock_, nullptr, true),
       remb_(clock_),
       congestion_controller_(
-          new CongestionController(clock_, this, &remb_, event_log_.get())),
+          new CongestionController(clock_, this, &remb_, event_log_)),
       video_send_delay_stats_(new SendDelayStats(clock_)),
       start_ms_(clock_->TimeInMilliseconds()),
       worker_queue_("call_worker_queue") {
   RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(config.event_log != nullptr);
   RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0);
   RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps,
                 config.bitrate_config.min_bitrate_bps);
@@ -261,7 +254,6 @@
     RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps,
                   config.bitrate_config.start_bitrate_bps);
   }
-
   Trace::CreateTrace();
   call_stats_->RegisterStatsObserver(congestion_controller_.get());
 
@@ -380,7 +372,7 @@
   RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
   AudioSendStream* send_stream = new AudioSendStream(
       config, config_.audio_state, &worker_queue_, congestion_controller_.get(),
-      bitrate_allocator_.get(), event_log_.get());
+      bitrate_allocator_.get(), event_log_);
   {
     WriteLockScoped write_lock(*send_crit_);
     RTC_DCHECK(audio_send_ssrcs_.find(config.rtp.ssrc) ==
@@ -415,9 +407,8 @@
     const webrtc::AudioReceiveStream::Config& config) {
   TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream");
   RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
-  AudioReceiveStream* receive_stream =
-      new AudioReceiveStream(congestion_controller_.get(), config,
-                             config_.audio_state, event_log_.get());
+  AudioReceiveStream* receive_stream = new AudioReceiveStream(
+      congestion_controller_.get(), config, config_.audio_state, event_log_);
   {
     WriteLockScoped write_lock(*receive_crit_);
     RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) ==
@@ -470,9 +461,8 @@
   VideoSendStream* send_stream = new VideoSendStream(
       num_cpu_cores_, module_process_thread_.get(), &worker_queue_,
       call_stats_.get(), congestion_controller_.get(), bitrate_allocator_.get(),
-      video_send_delay_stats_.get(), &remb_, event_log_.get(),
-      std::move(config), std::move(encoder_config),
-      suspended_video_send_ssrcs_);
+      video_send_delay_stats_.get(), &remb_, event_log_, std::move(config),
+      std::move(encoder_config), suspended_video_send_ssrcs_);
 
   {
     WriteLockScoped write_lock(*send_crit_);
@@ -887,7 +877,7 @@
     }
   }
 
-  if (event_log_ && rtcp_delivered)
+  if (rtcp_delivered)
     event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet, length);
 
   return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR;
diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc
index 4324d81..43d7aa5 100644
--- a/webrtc/call/call_perf_tests.cc
+++ b/webrtc/call/call_perf_tests.cc
@@ -19,6 +19,7 @@
 #include "webrtc/call.h"
 #include "webrtc/call/transport_adapter.h"
 #include "webrtc/config.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/modules/audio_coding/include/audio_coding_module.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
@@ -165,9 +166,9 @@
 
   AudioState::Config send_audio_state_config;
   send_audio_state_config.voice_engine = voice_engine;
-  Call::Config sender_config;
+  Call::Config sender_config(&event_log_);
   sender_config.audio_state = AudioState::Create(send_audio_state_config);
-  Call::Config receiver_config;
+  Call::Config receiver_config(&event_log_);
   receiver_config.audio_state = sender_config.audio_state;
   CreateCalls(sender_config, receiver_config);
 
@@ -685,6 +686,7 @@
 
     Call::Config GetSenderCallConfig() override {
       Call::Config config = EndToEndTest::GetSenderCallConfig();
+      config.event_log = &event_log_;
       config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000;
       return config;
     }
diff --git a/webrtc/call/call_unittest.cc b/webrtc/call/call_unittest.cc
index 2fe4fde..d452927 100644
--- a/webrtc/call/call_unittest.cc
+++ b/webrtc/call/call_unittest.cc
@@ -13,6 +13,7 @@
 
 #include "webrtc/api/call/audio_state.h"
 #include "webrtc/call.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/modules/audio_coding/codecs/mock/mock_audio_decoder_factory.h"
 #include "webrtc/test/gtest.h"
 #include "webrtc/test/mock_voice_engine.h"
@@ -25,7 +26,7 @@
       : voice_engine_(decoder_factory) {
     webrtc::AudioState::Config audio_state_config;
     audio_state_config.voice_engine = &voice_engine_;
-    webrtc::Call::Config config;
+    webrtc::Call::Config config(&event_log_);
     config.audio_state = webrtc::AudioState::Create(audio_state_config);
     call_.reset(webrtc::Call::Create(config));
   }
@@ -34,6 +35,7 @@
 
  private:
   testing::NiceMock<webrtc::test::MockVoiceEngine> voice_engine_;
+  webrtc::RtcEventLogNullImpl event_log_;
   std::unique_ptr<webrtc::Call> call_;
 };
 }  // namespace
diff --git a/webrtc/call/packet_injection_tests.cc b/webrtc/call/packet_injection_tests.cc
index 42f4fae..df19cf3 100644
--- a/webrtc/call/packet_injection_tests.cc
+++ b/webrtc/call/packet_injection_tests.cc
@@ -10,6 +10,7 @@
 
 #include <memory>
 
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/test/call_test.h"
 #include "webrtc/test/gtest.h"
 #include "webrtc/test/null_transport.h"
@@ -37,8 +38,8 @@
                                                 uint8_t payload_type,
                                                 const uint8_t* packet,
                                                 size_t length) {
-  CreateSenderCall(Call::Config());
-  CreateReceiverCall(Call::Config());
+  CreateSenderCall(Call::Config(&event_log_));
+  CreateReceiverCall(Call::Config(&event_log_));
 
   test::NullTransport null_transport;
   CreateSendConfig(1, 0, &null_transport);
diff --git a/webrtc/call/rampup_tests.cc b/webrtc/call/rampup_tests.cc
index 0199cc8..df64f41 100644
--- a/webrtc/call/rampup_tests.cc
+++ b/webrtc/call/rampup_tests.cc
@@ -68,7 +68,7 @@
 }
 
 Call::Config RampUpTester::GetSenderCallConfig() {
-  Call::Config call_config;
+  Call::Config call_config(&event_log_);
   if (start_bitrate_bps_ != 0) {
     call_config.bitrate_config.start_bitrate_bps = start_bitrate_bps_;
   }
@@ -382,7 +382,7 @@
 }
 
 Call::Config RampUpDownUpTester::GetReceiverCallConfig() {
-  Call::Config config;
+  Call::Config config(&event_log_);
   config.bitrate_config.min_bitrate_bps = 10000;
   return config;
 }
diff --git a/webrtc/call/rampup_tests.h b/webrtc/call/rampup_tests.h
index f3779e2..da1ca74 100644
--- a/webrtc/call/rampup_tests.h
+++ b/webrtc/call/rampup_tests.h
@@ -17,6 +17,7 @@
 
 #include "webrtc/base/event.h"
 #include "webrtc/call.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/test/call_test.h"
 
 namespace webrtc {
@@ -57,6 +58,7 @@
                     const std::string& units) const;
   void TriggerTestDone();
 
+  webrtc::RtcEventLogNullImpl event_log_;
   rtc::Event event_;
   Clock* const clock_;
   FakeNetworkPipe::Config forward_transport_config_;
diff --git a/webrtc/media/DEPS b/webrtc/media/DEPS
index e444563..580ac5c 100644
--- a/webrtc/media/DEPS
+++ b/webrtc/media/DEPS
@@ -3,6 +3,7 @@
   "+webrtc/base",
   "+webrtc/call",
   "+webrtc/common_video",
+  "+webrtc/logging/rtc_event_log",
   "+webrtc/modules/audio_coding",
   "+webrtc/modules/audio_device",
   "+webrtc/modules/audio_processing",
diff --git a/webrtc/media/base/videoengine_unittest.h b/webrtc/media/base/videoengine_unittest.h
index ac8ed47..6b281bb 100644
--- a/webrtc/media/base/videoengine_unittest.h
+++ b/webrtc/media/base/videoengine_unittest.h
@@ -19,6 +19,7 @@
 #include "webrtc/base/gunit.h"
 #include "webrtc/base/timeutils.h"
 #include "webrtc/call.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakenetworkinterface.h"
 #include "webrtc/media/base/fakevideocapturer.h"
 #include "webrtc/media/base/fakevideorenderer.h"
@@ -79,7 +80,7 @@
                               public sigslot::has_slots<> {
  protected:
   VideoMediaChannelTest<E, C>()
-      : call_(webrtc::Call::Create(webrtc::Call::Config())) {}
+      : call_(webrtc::Call::Create(webrtc::Call::Config(&event_log_))) {}
 
   virtual cricket::VideoCodec DefaultCodec() = 0;
 
@@ -1076,6 +1077,7 @@
     EXPECT_EQ(1, renderer2_.num_rendered_frames());
   }
 
+  webrtc::RtcEventLogNullImpl event_log_;
   const std::unique_ptr<webrtc::Call> call_;
   E engine_;
   std::unique_ptr<cricket::FakeVideoCapturer> video_capturer_;
diff --git a/webrtc/media/engine/fakewebrtccall.cc b/webrtc/media/engine/fakewebrtccall.cc
index 88f9927..d021eca 100644
--- a/webrtc/media/engine/fakewebrtccall.cc
+++ b/webrtc/media/engine/fakewebrtccall.cc
@@ -510,11 +510,4 @@
   }
 }
 
-bool FakeCall::StartEventLog(rtc::PlatformFile log_file,
-                             int64_t max_size_bytes) {
-  return false;
-}
-
-void FakeCall::StopEventLog() {}
-
 }  // namespace cricket
diff --git a/webrtc/media/engine/fakewebrtccall.h b/webrtc/media/engine/fakewebrtccall.h
index 5719070..db3db18 100644
--- a/webrtc/media/engine/fakewebrtccall.h
+++ b/webrtc/media/engine/fakewebrtccall.h
@@ -245,10 +245,6 @@
                                  webrtc::NetworkState state) override;
   void OnSentPacket(const rtc::SentPacket& sent_packet) override;
 
-  bool StartEventLog(rtc::PlatformFile log_file,
-                     int64_t max_size_bytes) override;
-  void StopEventLog() override;
-
   webrtc::Call::Config config_;
   webrtc::NetworkState audio_network_state_;
   webrtc::NetworkState video_network_state_;
diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
index fd41640..a447956 100644
--- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc
+++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
@@ -16,6 +16,7 @@
 #include "webrtc/base/arraysize.h"
 #include "webrtc/base/gunit.h"
 #include "webrtc/base/stringutils.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/testutils.h"
 #include "webrtc/media/base/videoengine_unittest.h"
 #include "webrtc/media/engine/fakewebrtccall.h"
@@ -96,7 +97,7 @@
   WebRtcVideoEngine2Test() : WebRtcVideoEngine2Test("") {}
   explicit WebRtcVideoEngine2Test(const char* field_trials)
       : override_field_trials_(field_trials),
-        call_(webrtc::Call::Create(webrtc::Call::Config())),
+        call_(webrtc::Call::Create(webrtc::Call::Config(&event_log_))),
         engine_() {
     std::vector<VideoCodec> engine_codecs = engine_.codecs();
     RTC_DCHECK(!engine_codecs.empty());
@@ -133,6 +134,7 @@
   void TestExtendedEncoderOveruse(bool use_external_encoder);
 
   webrtc::test::ScopedFieldTrials override_field_trials_;
+  webrtc::RtcEventLogNullImpl event_log_;
   // Used in WebRtcVideoEngine2VoiceTest, but defined here so it's properly
   // initialized when the constructor is called.
   std::unique_ptr<webrtc::Call> call_;
@@ -412,7 +414,7 @@
   cricket::VideoSendParameters parameters;
   parameters.codecs.push_back(kVp8Codec);
   std::unique_ptr<VideoMediaChannel> channel;
-  FakeCall* fake_call = new FakeCall(webrtc::Call::Config());
+  FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_));
   call_.reset(fake_call);
   if (use_external_encoder) {
     channel.reset(
@@ -462,8 +464,7 @@
   encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
   std::vector<cricket::VideoCodec> codecs;
   codecs.push_back(kVp8Codec);
-
-  FakeCall* fake_call = new FakeCall(webrtc::Call::Config());
+  FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_));
   call_.reset(fake_call);
   std::unique_ptr<VideoMediaChannel> channel(
       SetUpForExternalEncoderFactory(&encoder_factory, codecs));
@@ -880,7 +881,7 @@
   explicit WebRtcVideoChannel2Test(const char* field_trials)
       : WebRtcVideoEngine2Test(field_trials), last_ssrc_(0) {}
   void SetUp() override {
-    fake_call_.reset(new FakeCall(webrtc::Call::Config()));
+    fake_call_.reset(new FakeCall(webrtc::Call::Config(&event_log_)));
     engine_.Init();
     channel_.reset(
         engine_.CreateChannel(fake_call_.get(), MediaConfig(), VideoOptions()));
@@ -3724,7 +3725,8 @@
 
 class WebRtcVideoChannel2SimulcastTest : public testing::Test {
  public:
-  WebRtcVideoChannel2SimulcastTest() : fake_call_(webrtc::Call::Config()) {}
+  WebRtcVideoChannel2SimulcastTest()
+      : fake_call_(webrtc::Call::Config(&event_log_)) {}
 
   void SetUp() override {
     engine_.Init();
@@ -3839,6 +3841,7 @@
     return streams[streams.size() - 1];
   }
 
+  webrtc::RtcEventLogNullImpl event_log_;
   FakeCall fake_call_;
   WebRtcVideoEngine2 engine_;
   std::unique_ptr<VideoMediaChannel> channel_;
diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
index 8be3b9d..80c3fda 100644
--- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc
+++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
@@ -17,6 +17,7 @@
 #include "webrtc/call.h"
 #include "webrtc/p2p/base/faketransportcontroller.h"
 #include "webrtc/test/field_trial.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakemediaengine.h"
 #include "webrtc/media/base/fakenetworkinterface.h"
 #include "webrtc/media/base/fakertp.h"
@@ -62,6 +63,7 @@
                             engine) {  // volume
   }
 };
+
 }  // namespace
 
 // Tests that our stub library "works".
@@ -97,7 +99,8 @@
   WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {}
 
   explicit WebRtcVoiceEngineTestFake(const char* field_trials)
-      : call_(webrtc::Call::Config()), override_field_trials_(field_trials) {
+      : call_(webrtc::Call::Config(&event_log_)),
+        override_field_trials_(field_trials) {
     auto factory = webrtc::MockAudioDecoderFactory::CreateUnusedFactory();
     EXPECT_CALL(adm_, AddRef()).WillOnce(Return(0));
     EXPECT_CALL(adm_, Release()).WillOnce(Return(0));
@@ -492,6 +495,7 @@
 
  protected:
   StrictMock<webrtc::test::MockAudioDeviceModule> adm_;
+  webrtc::RtcEventLogNullImpl event_log_;
   cricket::FakeCall call_;
   cricket::FakeWebRtcVoiceEngine voe_;
   std::unique_ptr<cricket::WebRtcVoiceEngine> engine_;
@@ -3361,8 +3365,9 @@
   // we never want it to create a decoder at this stage.
   cricket::WebRtcVoiceEngine engine(
       nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
+  webrtc::RtcEventLogNullImpl event_log;
   std::unique_ptr<webrtc::Call> call(
-      webrtc::Call::Create(webrtc::Call::Config()));
+      webrtc::Call::Create(webrtc::Call::Config(&event_log)));
   cricket::VoiceMediaChannel* channel = engine.CreateChannel(
       call.get(), cricket::MediaConfig(), cricket::AudioOptions());
   EXPECT_TRUE(channel != nullptr);
@@ -3377,8 +3382,9 @@
   {
     cricket::WebRtcVoiceEngine engine(
         &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
+    webrtc::RtcEventLogNullImpl event_log;
     std::unique_ptr<webrtc::Call> call(
-        webrtc::Call::Create(webrtc::Call::Config()));
+        webrtc::Call::Create(webrtc::Call::Config(&event_log)));
     cricket::VoiceMediaChannel* channel = engine.CreateChannel(
         call.get(), cricket::MediaConfig(), cricket::AudioOptions());
     EXPECT_TRUE(channel != nullptr);
@@ -3475,8 +3481,9 @@
 TEST(WebRtcVoiceEngineTest, Has32Channels) {
   cricket::WebRtcVoiceEngine engine(
       nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
+  webrtc::RtcEventLogNullImpl event_log;
   std::unique_ptr<webrtc::Call> call(
-      webrtc::Call::Create(webrtc::Call::Config()));
+      webrtc::Call::Create(webrtc::Call::Config(&event_log)));
 
   cricket::VoiceMediaChannel* channels[32];
   int num_channels = 0;
@@ -3507,8 +3514,9 @@
   // I think it will become clear once audio decoder injection is completed.
   cricket::WebRtcVoiceEngine engine(
       nullptr, webrtc::CreateBuiltinAudioDecoderFactory());
+  webrtc::RtcEventLogNullImpl event_log;
   std::unique_ptr<webrtc::Call> call(
-      webrtc::Call::Create(webrtc::Call::Config()));
+      webrtc::Call::Create(webrtc::Call::Config(&event_log)));
   cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(),
                                            cricket::AudioOptions(), call.get());
   cricket::AudioRecvParameters parameters;
diff --git a/webrtc/pc/DEPS b/webrtc/pc/DEPS
index ca4f789..e1c9e39 100644
--- a/webrtc/pc/DEPS
+++ b/webrtc/pc/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+webrtc/api",
   "+webrtc/base",
+  "+webrtc/logging/rtc_event_log",
   "+webrtc/media",
   "+webrtc/p2p",
   "+third_party/libsrtp"
diff --git a/webrtc/pc/channelmanager_unittest.cc b/webrtc/pc/channelmanager_unittest.cc
index e4e243c..0beb940 100644
--- a/webrtc/pc/channelmanager_unittest.cc
+++ b/webrtc/pc/channelmanager_unittest.cc
@@ -12,6 +12,7 @@
 #include "webrtc/base/gunit.h"
 #include "webrtc/base/logging.h"
 #include "webrtc/base/thread.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakemediaengine.h"
 #include "webrtc/media/base/fakevideocapturer.h"
 #include "webrtc/media/base/testutils.h"
@@ -35,10 +36,8 @@
   ChannelManagerTest()
       : fme_(new cricket::FakeMediaEngine()),
         fdme_(new cricket::FakeDataEngine()),
-        cm_(new cricket::ChannelManager(fme_,
-                                        fdme_,
-                                        rtc::Thread::Current())),
-        fake_call_(webrtc::Call::Config()),
+        cm_(new cricket::ChannelManager(fme_, fdme_, rtc::Thread::Current())),
+        fake_call_(webrtc::Call::Config(&event_log_)),
         fake_mc_(cm_, &fake_call_),
         transport_controller_(
             new cricket::FakeTransportController(ICEROLE_CONTROLLING)) {}
@@ -56,6 +55,7 @@
     fme_ = NULL;
   }
 
+  webrtc::RtcEventLogNullImpl event_log_;
   rtc::Thread network_;
   rtc::Thread worker_;
   cricket::FakeMediaEngine* fme_;
diff --git a/webrtc/test/DEPS b/webrtc/test/DEPS
index 969a10c..ccf57d0 100644
--- a/webrtc/test/DEPS
+++ b/webrtc/test/DEPS
@@ -2,6 +2,7 @@
   "+webrtc/base",
   "+webrtc/call",
   "+webrtc/common_video",
+  "+webrtc/logging/rtc_event_log",
   "+webrtc/media/base",
   "+webrtc/modules/audio_coding",
   "+webrtc/modules/audio_device",
diff --git a/webrtc/test/call_test.cc b/webrtc/test/call_test.cc
index 8c6ac45..57aca89 100644
--- a/webrtc/test/call_test.cc
+++ b/webrtc/test/call_test.cc
@@ -382,11 +382,11 @@
 }
 
 Call::Config BaseTest::GetSenderCallConfig() {
-  return Call::Config();
+  return Call::Config(&event_log_);
 }
 
 Call::Config BaseTest::GetReceiverCallConfig() {
-  return Call::Config();
+  return Call::Config(&event_log_);
 }
 
 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {
diff --git a/webrtc/test/call_test.h b/webrtc/test/call_test.h
index 29bdbf2..ff84782 100644
--- a/webrtc/test/call_test.h
+++ b/webrtc/test/call_test.h
@@ -14,6 +14,7 @@
 #include <vector>
 
 #include "webrtc/call.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/test/encoder_settings.h"
 #include "webrtc/test/fake_audio_device.h"
 #include "webrtc/test/fake_decoder.h"
@@ -90,6 +91,7 @@
 
   Clock* const clock_;
 
+  webrtc::RtcEventLogNullImpl event_log_;
   std::unique_ptr<Call> sender_call_;
   std::unique_ptr<PacketTransport> send_transport_;
   VideoSendStream::Config video_send_config_;
@@ -179,6 +181,8 @@
 
   virtual void OnFrameGeneratorCapturerCreated(
       FrameGeneratorCapturer* frame_generator_capturer);
+
+  webrtc::RtcEventLogNullImpl event_log_;
 };
 
 class SendTest : public BaseTest {
diff --git a/webrtc/video/DEPS b/webrtc/video/DEPS
index 7e53144..fafad7b 100644
--- a/webrtc/video/DEPS
+++ b/webrtc/video/DEPS
@@ -2,6 +2,7 @@
   "+webrtc/base",
   "+webrtc/call",
   "+webrtc/common_video",
+  "+webrtc/logging/rtc_event_log",
   "+webrtc/media/base",
   "+webrtc/modules/bitrate_controller",
   "+webrtc/modules/congestion_controller",
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index 631f4d9..ce05dcf 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -23,6 +23,7 @@
 #include "webrtc/call.h"
 #include "webrtc/call/transport_adapter.h"
 #include "webrtc/common_video/include/frame_callback.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/media/base/fakevideorenderer.h"
 #include "webrtc/modules/include/module_common_types.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
@@ -131,7 +132,7 @@
 };
 
 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) {
-  CreateCalls(Call::Config(), Call::Config());
+  CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
 
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
@@ -146,7 +147,7 @@
 }
 
 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) {
-  CreateCalls(Call::Config(), Call::Config());
+  CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
 
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
@@ -194,7 +195,7 @@
     rtc::Event event_;
   };
 
-  CreateCalls(Call::Config(), Call::Config());
+  CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
 
   test::DirectTransport sender_transport(sender_call_.get());
   test::DirectTransport receiver_transport(receiver_call_.get());
@@ -244,7 +245,7 @@
     rtc::Event event_;
   } renderer;
 
-  CreateCalls(Call::Config(), Call::Config());
+  CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
 
   test::DirectTransport sender_transport(sender_call_.get());
   test::DirectTransport receiver_transport(receiver_call_.get());
@@ -771,7 +772,7 @@
     // TODO(holmer): Investigate why we don't send FEC packets when the bitrate
     // is 10 kbps.
     Call::Config GetSenderCallConfig() override {
-      Call::Config config;
+      Call::Config config(&event_log_);
       const int kMinBitrateBps = 30000;
       config.bitrate_config.min_bitrate_bps = kMinBitrateBps;
       return config;
@@ -1102,7 +1103,7 @@
     rtc::Event delivered_packet_;
   };
 
-  CreateCalls(Call::Config(), Call::Config());
+  CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
 
   test::DirectTransport send_transport(sender_call_.get());
   test::DirectTransport receive_transport(receiver_call_.get());
@@ -1243,8 +1244,10 @@
   virtual ~MultiStreamTest() {}
 
   void RunTest() {
-    std::unique_ptr<Call> sender_call(Call::Create(Call::Config()));
-    std::unique_ptr<Call> receiver_call(Call::Create(Call::Config()));
+    webrtc::RtcEventLogNullImpl event_log;
+    Call::Config config(&event_log);
+    std::unique_ptr<Call> sender_call(Call::Create(config));
+    std::unique_ptr<Call> receiver_call(Call::Create(config));
     std::unique_ptr<test::DirectTransport> sender_transport(
         CreateSendTransport(sender_call.get()));
     std::unique_ptr<test::DirectTransport> receiver_transport(
@@ -1739,7 +1742,7 @@
   EncodedFrameTestObserver post_encode_observer;
   EncodedFrameTestObserver pre_decode_observer;
 
-  CreateCalls(Call::Config(), Call::Config());
+  CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
 
   test::DirectTransport sender_transport(sender_call_.get());
   test::DirectTransport receiver_transport(receiver_call_.get());
@@ -1890,7 +1893,7 @@
     }
 
     Call::Config GetSenderCallConfig() override {
-      Call::Config config;
+      Call::Config config(&event_log_);
       // Set a high start bitrate to reduce the test completion time.
       config.bitrate_config.start_bitrate_bps = remb_bitrate_bps_;
       return config;
@@ -3269,7 +3272,8 @@
     std::map<uint32_t, bool> ssrc_observed_ GUARDED_BY(crit_);
   } observer(use_rtx);
 
-  CreateCalls(Call::Config(), Call::Config());
+  Call::Config config(&event_log_);
+  CreateCalls(config, config);
 
   test::PacketTransport send_transport(sender_call_.get(), &observer,
                                        test::PacketTransport::kSender,
@@ -3564,8 +3568,7 @@
 TEST_F(EndToEndTest, CallReportsRttForSender) {
   static const int kSendDelayMs = 30;
   static const int kReceiveDelayMs = 70;
-
-  CreateCalls(Call::Config(), Call::Config());
+  CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
 
   FakeNetworkPipe::Config config;
   config.queue_delay_ms = kSendDelayMs;
@@ -3607,7 +3610,7 @@
     MediaType network_to_bring_down,
     VideoEncoder* encoder,
     Transport* transport) {
-  CreateSenderCall(Call::Config());
+  CreateSenderCall(Call::Config(&event_log_));
   sender_call_->SignalChannelNetworkState(network_to_bring_down, kNetworkDown);
 
   CreateSendConfig(1, 0, transport);
@@ -3626,7 +3629,8 @@
 void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState(
     MediaType network_to_bring_down,
     Transport* transport) {
-  CreateCalls(Call::Config(), Call::Config());
+  Call::Config config(&event_log_);
+  CreateCalls(config, config);
   receiver_call_->SignalChannelNetworkState(network_to_bring_down,
                                             kNetworkDown);
 
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc
index 9adcc16..dabe500 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -25,6 +25,7 @@
 #include "webrtc/base/timeutils.h"
 #include "webrtc/call.h"
 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
+#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
 #include "webrtc/system_wrappers/include/cpu_info.h"
@@ -1151,7 +1152,8 @@
         << "!";
   }
 
-  Call::Config call_config;
+  webrtc::RtcEventLogNullImpl event_log;
+  Call::Config call_config(&event_log_);
   call_config.bitrate_config = params.common.call_bitrate_config;
   CreateCalls(call_config, call_config);
 
@@ -1261,7 +1263,8 @@
 
   // TODO(ivica): Remove bitrate_config and use the default Call::Config(), to
   // match the full stack tests.
-  Call::Config call_config;
+  webrtc::RtcEventLogNullImpl event_log;
+  Call::Config call_config(&event_log_);
   call_config.bitrate_config = params_.common.call_bitrate_config;
 
   ::VoiceEngineState voe;
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc
index dd8513f..d138893 100644
--- a/webrtc/video/video_send_stream_tests.cc
+++ b/webrtc/video/video_send_stream_tests.cc
@@ -60,8 +60,7 @@
 };
 
 TEST_F(VideoSendStreamTest, CanStartStartedStream) {
-  Call::Config call_config;
-  CreateSenderCall(call_config);
+  CreateSenderCall(Call::Config(&event_log_));
 
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
@@ -72,8 +71,7 @@
 }
 
 TEST_F(VideoSendStreamTest, CanStopStoppedStream) {
-  Call::Config call_config;
-  CreateSenderCall(call_config);
+  CreateSenderCall(Call::Config(&event_log_));
 
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
@@ -735,7 +733,7 @@
     }
 
     Call::Config GetSenderCallConfig() override {
-      Call::Config config;
+      Call::Config config(&event_log_);
       const int kMinBitrateBps = 30000;
       config.bitrate_config.min_bitrate_bps = kMinBitrateBps;
       return config;
@@ -1438,7 +1436,7 @@
     int last_initialized_frame_height_ GUARDED_BY(&crit_);
   };
 
-  CreateSenderCall(Call::Config());
+  CreateSenderCall(Call::Config(&event_log_));
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
   EncoderObserver encoder;
@@ -1494,7 +1492,7 @@
     int start_bitrate_kbps_ GUARDED_BY(crit_);
   };
 
-  CreateSenderCall(Call::Config());
+  CreateSenderCall(Call::Config(&event_log_));
 
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
@@ -1575,7 +1573,7 @@
     int bitrate_kbps_ GUARDED_BY(crit_);
   };
 
-  CreateSenderCall(Call::Config());
+  CreateSenderCall(Call::Config(&event_log_));
 
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
@@ -1630,7 +1628,7 @@
   };
 
   // Initialize send stream.
-  CreateSenderCall(Call::Config());
+  CreateSenderCall(Call::Config(&event_log_));
 
   test::NullTransport transport;
   CreateSendConfig(1, 0, &transport);
@@ -2269,7 +2267,7 @@
     }
 
     Call::Config GetSenderCallConfig() override {
-      Call::Config config;
+      Call::Config config(&event_log_);
       config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000;
       config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000;
       config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000;