Publish rtc event log api and default factory for it in api/
Bug: webrtc:10206
Change-Id: I34194ddb6fd2b0a3d7c553fadc9ddc1ea9740da0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137500
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28023}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 6700a95..dc83db9 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -151,6 +151,7 @@
":scoped_refptr",
"audio:audio_mixer_api",
"audio_codecs:audio_codecs_api",
+ "rtc_event_log",
"task_queue",
"transport:bitrate_settings",
"transport:network_control",
@@ -167,7 +168,6 @@
# targets like pnacl. API should not depend on anything outside of this
# file, really. All these should arguably go away in time.
"..:webrtc_common",
- "../logging:rtc_event_log_api",
"../media:rtc_media_config",
"../modules/audio_processing:audio_processing_statistics",
"../rtc_base",
@@ -361,10 +361,10 @@
deps = [
":libjingle_logging_api",
- "../logging:rtc_event_log_api",
"../rtc_base:checks",
"../rtc_base:rtc_base_approved",
"../rtc_base/system:file_wrapper",
+ "rtc_event_log",
]
}
diff --git a/api/DEPS b/api/DEPS
index 9c174a1..32440b1 100644
--- a/api/DEPS
+++ b/api/DEPS
@@ -117,7 +117,6 @@
],
"peer_connection_interface\.h": [
- "+logging/rtc_event_log/rtc_event_log_factory_interface.h",
"+media/base/media_config.h",
"+media/base/media_engine.h",
"+p2p/base/port_allocator.h",
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h
index 7cb0e8f..bdada31 100644
--- a/api/peer_connection_interface.h
+++ b/api/peer_connection_interface.h
@@ -85,6 +85,7 @@
#include "api/media_transport_interface.h"
#include "api/network_state_predictor.h"
#include "api/rtc_error.h"
+#include "api/rtc_event_log/rtc_event_log_factory_interface.h"
#include "api/rtc_event_log_output.h"
#include "api/rtp_receiver_interface.h"
#include "api/rtp_sender_interface.h"
@@ -96,7 +97,6 @@
#include "api/transport/bitrate_settings.h"
#include "api/transport/network_control.h"
#include "api/turn_customizer.h"
-#include "logging/rtc_event_log/rtc_event_log_factory_interface.h"
#include "media/base/media_config.h"
// TODO(bugs.webrtc.org/7447): We plan to provide a way to let applications
// inject a PacketSocketFactory and/or NetworkManager, and not expose
diff --git a/api/rtc_event_log/BUILD.gn b/api/rtc_event_log/BUILD.gn
new file mode 100644
index 0000000..7007493
--- /dev/null
+++ b/api/rtc_event_log/BUILD.gn
@@ -0,0 +1,49 @@
+# Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS. All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+import("../../webrtc.gni")
+
+rtc_source_set("rtc_event_log") {
+ visibility = [ "*" ]
+ sources = [
+ "rtc_event.cc",
+ "rtc_event.h",
+ "rtc_event_log.cc",
+ "rtc_event_log.h",
+ "rtc_event_log_factory_interface.h",
+ ]
+
+ deps = [
+ "..:libjingle_logging_api",
+ "../../rtc_base:checks",
+ "../../rtc_base:deprecation",
+ "../../rtc_base:timeutils",
+ "../task_queue",
+ "//third_party/abseil-cpp/absl/memory",
+ ]
+}
+
+rtc_source_set("rtc_event_log_factory") {
+ visibility = [ "*" ]
+ sources = [
+ "rtc_event_log_factory.cc",
+ "rtc_event_log_factory.h",
+ ]
+
+ deps = [
+ ":rtc_event_log",
+ "../../rtc_base:checks",
+ "../task_queue",
+ "//third_party/abseil-cpp/absl/memory",
+ ]
+
+ if (rtc_enable_protobuf) {
+ defines = [ "ENABLE_RTC_EVENT_LOG" ]
+ deps += [ "../../logging:rtc_event_log_impl" ]
+ }
+}
diff --git a/api/rtc_event_log/rtc_event.cc b/api/rtc_event_log/rtc_event.cc
new file mode 100644
index 0000000..81e6a4e
--- /dev/null
+++ b/api/rtc_event_log/rtc_event.cc
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "api/rtc_event_log/rtc_event.h"
+
+#include "rtc_base/time_utils.h"
+
+namespace webrtc {
+
+RtcEvent::RtcEvent() : timestamp_us_(rtc::TimeMicros()) {}
+
+} // namespace webrtc
diff --git a/api/rtc_event_log/rtc_event.h b/api/rtc_event_log/rtc_event.h
new file mode 100644
index 0000000..1b7fa55
--- /dev/null
+++ b/api/rtc_event_log/rtc_event.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_RTC_EVENT_LOG_RTC_EVENT_H_
+#define API_RTC_EVENT_LOG_RTC_EVENT_H_
+
+#include <cstdint>
+
+namespace webrtc {
+
+// This class allows us to store unencoded RTC events. Subclasses of this class
+// store the actual information. This allows us to keep all unencoded events,
+// even when their type and associated information differ, in the same buffer.
+// Additionally, it prevents dependency leaking - a module that only logs
+// events of type RtcEvent_A doesn't need to know about anything associated
+// with events of type RtcEvent_B.
+class RtcEvent {
+ public:
+ // Subclasses of this class have to associate themselves with a unique value
+ // of Type. This leaks the information of existing subclasses into the
+ // superclass, but the *actual* information - rtclog::StreamConfig, etc. -
+ // is kept separate.
+ enum class Type {
+ AlrStateEvent,
+ RouteChangeEvent,
+ AudioNetworkAdaptation,
+ AudioPlayout,
+ AudioReceiveStreamConfig,
+ AudioSendStreamConfig,
+ BweUpdateDelayBased,
+ BweUpdateLossBased,
+ DtlsTransportState,
+ DtlsWritableState,
+ IceCandidatePairConfig,
+ IceCandidatePairEvent,
+ ProbeClusterCreated,
+ ProbeResultFailure,
+ ProbeResultSuccess,
+ RtcpPacketIncoming,
+ RtcpPacketOutgoing,
+ RtpPacketIncoming,
+ RtpPacketOutgoing,
+ VideoReceiveStreamConfig,
+ VideoSendStreamConfig,
+ GenericPacketSent,
+ GenericPacketReceived,
+ GenericAckReceived
+ };
+
+ RtcEvent();
+ virtual ~RtcEvent() = default;
+
+ virtual Type GetType() const = 0;
+
+ virtual bool IsConfigEvent() const = 0;
+
+ int64_t timestamp_ms() const { return timestamp_us_ / 1000; }
+ int64_t timestamp_us() const { return timestamp_us_; }
+
+ protected:
+ explicit RtcEvent(int64_t timestamp_us) : timestamp_us_(timestamp_us) {}
+
+ const int64_t timestamp_us_;
+};
+
+} // namespace webrtc
+
+#endif // API_RTC_EVENT_LOG_RTC_EVENT_H_
diff --git a/logging/rtc_event_log/rtc_event_log.cc b/api/rtc_event_log/rtc_event_log.cc
similarity index 60%
rename from logging/rtc_event_log/rtc_event_log.cc
rename to api/rtc_event_log/rtc_event_log.cc
index b48fe92..56189c0 100644
--- a/logging/rtc_event_log/rtc_event_log.cc
+++ b/api/rtc_event_log/rtc_event_log.cc
@@ -8,19 +8,13 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "logging/rtc_event_log/rtc_event_log.h"
-
-#include "absl/memory/memory.h"
+#include "api/rtc_event_log/rtc_event_log.h"
namespace webrtc {
-std::unique_ptr<RtcEventLog> RtcEventLog::CreateNull() {
- return absl::make_unique<RtcEventLogNullImpl>();
-}
-
-bool RtcEventLogNullImpl::StartLogging(
- std::unique_ptr<RtcEventLogOutput> output,
- int64_t output_period_ms) {
+bool RtcEventLogNull::StartLogging(
+ std::unique_ptr<RtcEventLogOutput> /*output*/,
+ int64_t /*output_period_ms*/) {
return false;
}
diff --git a/api/rtc_event_log/rtc_event_log.h b/api/rtc_event_log/rtc_event_log.h
new file mode 100644
index 0000000..5839f4b
--- /dev/null
+++ b/api/rtc_event_log/rtc_event_log.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_RTC_EVENT_LOG_RTC_EVENT_LOG_H_
+#define API_RTC_EVENT_LOG_RTC_EVENT_LOG_H_
+
+#include <cstddef>
+#include <cstdint>
+#include <memory>
+
+#include "absl/memory/memory.h"
+#include "api/rtc_event_log/rtc_event.h"
+#include "api/rtc_event_log_output.h"
+#include "api/task_queue/task_queue_factory.h"
+#include "rtc_base/deprecation.h"
+
+namespace webrtc {
+
+class RtcEventLog {
+ public:
+ enum : size_t { kUnlimitedOutput = 0 };
+ enum : int64_t { kImmediateOutput = 0 };
+
+ // TODO(eladalon): Get rid of the legacy encoding and this enum once all
+ // clients have migrated to the new format.
+ enum class EncodingType { Legacy, NewFormat };
+
+ // Factory method to create an RtcEventLog object.
+ // Create RtcEventLog with an RtcEventLogFactory instead.
+ RTC_DEPRECATED
+ static std::unique_ptr<RtcEventLog> Create(
+ EncodingType encoding_type,
+ TaskQueueFactory* task_queue_factory);
+
+ // Create an RtcEventLog object that does nothing.
+ RTC_DEPRECATED
+ static std::unique_ptr<RtcEventLog> CreateNull();
+
+ virtual ~RtcEventLog() = default;
+
+ // Starts logging to a given output. The output might be limited in size,
+ // and may close itself once it has reached the maximum size.
+ virtual bool StartLogging(std::unique_ptr<RtcEventLogOutput> output,
+ int64_t output_period_ms) = 0;
+
+ // Stops logging to file and waits until the file has been closed, after
+ // which it would be permissible to read and/or modify it.
+ virtual void StopLogging() = 0;
+
+ // Log an RTC event (the type of event is determined by the subclass).
+ virtual void Log(std::unique_ptr<RtcEvent> event) = 0;
+};
+
+// No-op implementation is used if flag is not set, or in tests.
+class RtcEventLogNull final : public RtcEventLog {
+ public:
+ bool StartLogging(std::unique_ptr<RtcEventLogOutput> output,
+ int64_t output_period_ms) override;
+ void StopLogging() override {}
+ void Log(std::unique_ptr<RtcEvent> event) override {}
+};
+
+inline std::unique_ptr<RtcEventLog> RtcEventLog::CreateNull() {
+ return absl::make_unique<RtcEventLogNull>();
+}
+
+} // namespace webrtc
+
+#endif // API_RTC_EVENT_LOG_RTC_EVENT_LOG_H_
diff --git a/api/rtc_event_log/rtc_event_log_factory.cc b/api/rtc_event_log/rtc_event_log_factory.cc
new file mode 100644
index 0000000..188de15
--- /dev/null
+++ b/api/rtc_event_log/rtc_event_log_factory.cc
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "api/rtc_event_log/rtc_event_log_factory.h"
+
+#include <utility>
+
+#include "absl/memory/memory.h"
+#include "rtc_base/checks.h"
+
+#ifdef ENABLE_RTC_EVENT_LOG
+#include "logging/rtc_event_log/rtc_event_log_impl.h"
+#endif
+
+namespace webrtc {
+
+RtcEventLogFactory::RtcEventLogFactory(TaskQueueFactory* task_queue_factory)
+ : task_queue_factory_(task_queue_factory) {
+ RTC_DCHECK(task_queue_factory_);
+}
+
+std::unique_ptr<RtcEventLog> RtcEventLogFactory::CreateRtcEventLog(
+ RtcEventLog::EncodingType encoding_type) {
+#ifdef ENABLE_RTC_EVENT_LOG
+ return absl::make_unique<RtcEventLogImpl>(encoding_type, task_queue_factory_);
+#else
+ return absl::make_unique<RtcEventLogNull>();
+#endif
+}
+
+std::unique_ptr<RtcEventLog> RtcEventLog::Create(
+ RtcEventLog::EncodingType encoding_type,
+ TaskQueueFactory* task_queue_factory) {
+ return RtcEventLogFactory(task_queue_factory)
+ .CreateRtcEventLog(encoding_type);
+}
+} // namespace webrtc
diff --git a/api/rtc_event_log/rtc_event_log_factory.h b/api/rtc_event_log/rtc_event_log_factory.h
new file mode 100644
index 0000000..0efb1e5
--- /dev/null
+++ b/api/rtc_event_log/rtc_event_log_factory.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_H_
+#define API_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_H_
+
+#include <memory>
+
+#include "api/rtc_event_log/rtc_event_log.h"
+#include "api/rtc_event_log/rtc_event_log_factory_interface.h"
+#include "api/task_queue/task_queue_factory.h"
+
+namespace webrtc {
+
+class RtcEventLogFactory : public RtcEventLogFactoryInterface {
+ public:
+ explicit RtcEventLogFactory(TaskQueueFactory* task_queue_factory);
+ ~RtcEventLogFactory() override {}
+
+ std::unique_ptr<RtcEventLog> CreateRtcEventLog(
+ RtcEventLog::EncodingType encoding_type) override;
+
+ private:
+ TaskQueueFactory* const task_queue_factory_;
+};
+
+} // namespace webrtc
+
+#endif // API_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_H_
diff --git a/api/rtc_event_log/rtc_event_log_factory_interface.h b/api/rtc_event_log/rtc_event_log_factory_interface.h
new file mode 100644
index 0000000..acc5bcb
--- /dev/null
+++ b/api/rtc_event_log/rtc_event_log_factory_interface.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_INTERFACE_H_
+#define API_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_INTERFACE_H_
+
+#include <memory>
+
+#include "api/rtc_event_log/rtc_event_log.h"
+
+namespace webrtc {
+
+// This interface exists to allow webrtc to be optionally built without
+// RtcEventLog support. A PeerConnectionFactory is constructed with an
+// RtcEventLogFactoryInterface, which may or may not be null.
+class RtcEventLogFactoryInterface {
+ public:
+ virtual ~RtcEventLogFactoryInterface() = default;
+
+ virtual std::unique_ptr<RtcEventLog> CreateRtcEventLog(
+ RtcEventLog::EncodingType encoding_type) = 0;
+};
+
+} // namespace webrtc
+
+#endif // API_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_INTERFACE_H_
diff --git a/api/rtc_event_log_output_file.cc b/api/rtc_event_log_output_file.cc
index 3845071..c300a54 100644
--- a/api/rtc_event_log_output_file.cc
+++ b/api/rtc_event_log_output_file.cc
@@ -11,8 +11,8 @@
#include <limits>
#include <utility>
+#include "api/rtc_event_log/rtc_event_log.h"
#include "api/rtc_event_log_output_file.h"
-#include "logging/rtc_event_log/rtc_event_log.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
diff --git a/audio/test/media_transport_test.cc b/audio/test/media_transport_test.cc
index 4594c3e..5b2c554 100644
--- a/audio/test/media_transport_test.cc
+++ b/audio/test/media_transport_test.cc
@@ -75,7 +75,7 @@
MediaTransportPair transport_pair(transport_thread.get());
NiceMock<MockTransport> rtcp_send_transport;
NiceMock<MockTransport> send_transport;
- std::unique_ptr<RtcEventLog> null_event_log = RtcEventLog::CreateNull();
+ RtcEventLogNull null_event_log;
NiceMock<MockBitrateAllocator> bitrate_allocator;
rtc::scoped_refptr<TestAudioDeviceModule> audio_device =
@@ -114,7 +114,7 @@
Clock::GetRealTimeClock(),
/*receiver_controller=*/nullptr,
/*packet_router=*/nullptr, receive_process_thread.get(), receive_config,
- audio_state, null_event_log.get());
+ audio_state, &null_event_log);
// TODO(nisse): Update AudioSendStream to not require send_transport when a
// MediaTransport is provided.
@@ -128,13 +128,13 @@
std::unique_ptr<TaskQueueFactory> task_queue_factory =
CreateDefaultTaskQueueFactory();
RtpTransportControllerSend rtp_transport(
- Clock::GetRealTimeClock(), null_event_log.get(), nullptr, nullptr,
+ Clock::GetRealTimeClock(), &null_event_log, nullptr, nullptr,
BitrateConstraints(), ProcessThread::Create("Pacer"),
task_queue_factory.get());
webrtc::internal::AudioSendStream send_stream(
Clock::GetRealTimeClock(), send_config, audio_state,
task_queue_factory.get(), send_process_thread.get(), &rtp_transport,
- &bitrate_allocator, null_event_log.get(),
+ &bitrate_allocator, &null_event_log,
/*rtcp_rtt_stats=*/nullptr, absl::optional<RtpState>());
audio_device->Init(); // Starts thread.
diff --git a/logging/BUILD.gn b/logging/BUILD.gn
index 13f3f34..ca1d2c9 100644
--- a/logging/BUILD.gn
+++ b/logging/BUILD.gn
@@ -31,7 +31,6 @@
sources = [
"rtc_event_log/encoder/rtc_event_log_encoder.h",
"rtc_event_log/events/rtc_event.h",
- "rtc_event_log/rtc_event_log.cc",
"rtc_event_log/rtc_event_log.h",
"rtc_event_log/rtc_event_log_factory_interface.h",
]
@@ -39,6 +38,7 @@
deps = [
"../api:libjingle_logging_api",
"../api:scoped_refptr",
+ "../api/rtc_event_log",
"../api/task_queue",
"../rtc_base:rtc_base_approved",
"//third_party/abseil-cpp/absl/memory",
@@ -129,7 +129,9 @@
]
deps = [
":rtc_event_log_api",
+ "../rtc_base:timeutils",
"//third_party/abseil-cpp/absl/memory",
+ "//third_party/abseil-cpp/absl/types:optional",
]
}
@@ -239,37 +241,46 @@
]
}
+if (rtc_enable_protobuf) {
+ rtc_source_set("rtc_event_log_impl") {
+ visibility = [ "../api/rtc_event_log:rtc_event_log_factory" ]
+ sources = [
+ "rtc_event_log/rtc_event_log_impl.cc",
+ "rtc_event_log/rtc_event_log_impl.h",
+ ]
+ deps = [
+ ":ice_log",
+ ":rtc_event_log_api",
+ ":rtc_event_log_impl_encoder",
+ "../api:libjingle_logging_api",
+ "../api/rtc_event_log",
+ "../api/task_queue",
+ "../rtc_base:checks",
+ "../rtc_base:rtc_base_approved",
+ "../rtc_base:rtc_task_queue",
+ "../rtc_base:safe_minmax",
+ "../rtc_base/synchronization:sequence_checker",
+ "//third_party/abseil-cpp/absl/memory",
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+ }
+}
+
rtc_static_library("rtc_event_log_impl_base") {
- # TODO(terelius): Should this really be visible? Currently used to instantiate
- # the default event log factory.
+ # TODO(bugs.webrtc.org/10206): Remove this target when all users switch to
+ # using target api/rtc_event_log:rtc_event_log_factory directly.
visibility = [ "*" ]
sources = [
"rtc_event_log/rtc_event_log_factory.cc",
"rtc_event_log/rtc_event_log_factory.h",
- "rtc_event_log/rtc_event_log_impl.cc",
]
- defines = []
-
deps = [
- ":ice_log",
- ":rtc_event_log_api",
- "../api:libjingle_logging_api",
- "../api/task_queue",
+ "../api/rtc_event_log",
+ "../api/rtc_event_log:rtc_event_log_factory",
"../api/task_queue:global_task_queue_factory",
- "../rtc_base:checks",
- "../rtc_base:rtc_base_approved",
- "../rtc_base:rtc_task_queue",
- "../rtc_base:safe_minmax",
- "../rtc_base/synchronization:sequence_checker",
"//third_party/abseil-cpp/absl/memory",
- "//third_party/abseil-cpp/absl/types:optional",
]
-
- if (rtc_enable_protobuf) {
- defines += [ "ENABLE_RTC_EVENT_LOG" ]
- deps += [ ":rtc_event_log_impl_encoder" ]
- }
}
rtc_source_set("fake_rtc_event_log") {
diff --git a/logging/rtc_event_log/events/rtc_event.h b/logging/rtc_event_log/events/rtc_event.h
index c288bf3..23a2624 100644
--- a/logging/rtc_event_log/events/rtc_event.h
+++ b/logging/rtc_event_log/events/rtc_event.h
@@ -11,67 +11,9 @@
#ifndef LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_H_
#define LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_H_
-#include <memory>
+// TODO(bugs.webrtc.org/10206): For backwards compatibility; Delete as soon as
+// dependencies are updated.
-#include "rtc_base/time_utils.h"
-
-namespace webrtc {
-
-// This class allows us to store unencoded RTC events. Subclasses of this class
-// store the actual information. This allows us to keep all unencoded events,
-// even when their type and associated information differ, in the same buffer.
-// Additionally, it prevents dependency leaking - a module that only logs
-// events of type RtcEvent_A doesn't need to know about anything associated
-// with events of type RtcEvent_B.
-class RtcEvent {
- public:
- // Subclasses of this class have to associate themselves with a unique value
- // of Type. This leaks the information of existing subclasses into the
- // superclass, but the *actual* information - rtclog::StreamConfig, etc. -
- // is kept separate.
- enum class Type {
- AlrStateEvent,
- RouteChangeEvent,
- AudioNetworkAdaptation,
- AudioPlayout,
- AudioReceiveStreamConfig,
- AudioSendStreamConfig,
- BweUpdateDelayBased,
- BweUpdateLossBased,
- DtlsTransportState,
- DtlsWritableState,
- IceCandidatePairConfig,
- IceCandidatePairEvent,
- ProbeClusterCreated,
- ProbeResultFailure,
- ProbeResultSuccess,
- RtcpPacketIncoming,
- RtcpPacketOutgoing,
- RtpPacketIncoming,
- RtpPacketOutgoing,
- VideoReceiveStreamConfig,
- VideoSendStreamConfig,
- GenericPacketSent,
- GenericPacketReceived,
- GenericAckReceived
- };
-
- RtcEvent() : timestamp_us_(rtc::TimeMicros()) {}
- virtual ~RtcEvent() = default;
-
- virtual Type GetType() const = 0;
-
- virtual bool IsConfigEvent() const = 0;
-
- int64_t timestamp_ms() const { return timestamp_us_ / 1000; }
- int64_t timestamp_us() const { return timestamp_us_; }
-
- protected:
- explicit RtcEvent(int64_t timestamp_us) : timestamp_us_(timestamp_us) {}
-
- const int64_t timestamp_us_;
-};
-
-} // namespace webrtc
+#include "api/rtc_event_log/rtc_event.h"
#endif // LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_H_
diff --git a/logging/rtc_event_log/events/rtc_event_generic_ack_received.cc b/logging/rtc_event_log/events/rtc_event_generic_ack_received.cc
index bfdf278..0ffe622 100644
--- a/logging/rtc_event_log/events/rtc_event_generic_ack_received.cc
+++ b/logging/rtc_event_log/events/rtc_event_generic_ack_received.cc
@@ -13,6 +13,7 @@
#include <vector>
#include "absl/memory/memory.h"
+#include "rtc_base/time_utils.h"
namespace webrtc {
diff --git a/logging/rtc_event_log/events/rtc_event_generic_ack_received.h b/logging/rtc_event_log/events/rtc_event_generic_ack_received.h
index 79bcd34..59d75db 100644
--- a/logging/rtc_event_log/events/rtc_event_generic_ack_received.h
+++ b/logging/rtc_event_log/events/rtc_event_generic_ack_received.h
@@ -16,6 +16,8 @@
#include <memory>
#include <vector>
+#include "absl/types/optional.h"
+
namespace webrtc {
struct AckedPacket {
diff --git a/logging/rtc_event_log/rtc_event_log.h b/logging/rtc_event_log/rtc_event_log.h
index 08b5475..2a088f6 100644
--- a/logging/rtc_event_log/rtc_event_log.h
+++ b/logging/rtc_event_log/rtc_event_log.h
@@ -11,59 +11,13 @@
#ifndef LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_H_
#define LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_H_
-#include <stdint.h>
-#include <memory>
+// TODO(bugs.webrtc.org/10206): For backwards compatibility; Delete as soon as
+// dependencies are updated.
-#include "api/rtc_event_log_output.h"
-#include "api/task_queue/task_queue_factory.h"
-#include "logging/rtc_event_log/events/rtc_event.h"
+#include "api/rtc_event_log/rtc_event_log.h"
namespace webrtc {
-
-// TODO(terelius): Move this to the parser.
-enum PacketDirection { kIncomingPacket = 0, kOutgoingPacket };
-
-class RtcEventLog {
- public:
- enum : size_t { kUnlimitedOutput = 0 };
- enum : int64_t { kImmediateOutput = 0 };
-
- // TODO(eladalon): Get rid of the legacy encoding and this enum once all
- // clients have migrated to the new format.
- enum class EncodingType { Legacy, NewFormat };
-
- virtual ~RtcEventLog() {}
-
- // Factory method to create an RtcEventLog object.
- static std::unique_ptr<RtcEventLog> Create(
- EncodingType encoding_type,
- TaskQueueFactory* task_queue_factory);
-
- // Create an RtcEventLog object that does nothing.
- static std::unique_ptr<RtcEventLog> CreateNull();
-
- // Starts logging to a given output. The output might be limited in size,
- // and may close itself once it has reached the maximum size.
- virtual bool StartLogging(std::unique_ptr<RtcEventLogOutput> output,
- int64_t output_period_ms) = 0;
-
- // Stops logging to file and waits until the file has been closed, after
- // which it would be permissible to read and/or modify it.
- virtual void StopLogging() = 0;
-
- // Log an RTC event (the type of event is determined by the subclass).
- virtual void Log(std::unique_ptr<RtcEvent> event) = 0;
-};
-
-// No-op implementation is used if flag is not set, or in tests.
-class RtcEventLogNullImpl : public RtcEventLog {
- public:
- bool StartLogging(std::unique_ptr<RtcEventLogOutput> output,
- int64_t output_period_ms) override;
- void StopLogging() override {}
- void Log(std::unique_ptr<RtcEvent> event) override {}
-};
-
+using RtcEventLogNullImpl = ::webrtc::RtcEventLogNull;
} // namespace webrtc
#endif // LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_H_
diff --git a/logging/rtc_event_log/rtc_event_log_factory.cc b/logging/rtc_event_log/rtc_event_log_factory.cc
index b38b7bc..ff6e4e5 100644
--- a/logging/rtc_event_log/rtc_event_log_factory.cc
+++ b/logging/rtc_event_log/rtc_event_log_factory.cc
@@ -10,25 +10,11 @@
#include "logging/rtc_event_log/rtc_event_log_factory.h"
-#include <utility>
-
#include "absl/memory/memory.h"
#include "api/task_queue/global_task_queue_factory.h"
-#include "logging/rtc_event_log/rtc_event_log.h"
-#include "rtc_base/checks.h"
namespace webrtc {
-RtcEventLogFactory::RtcEventLogFactory(TaskQueueFactory* task_queue_factory)
- : task_queue_factory_(task_queue_factory) {
- RTC_DCHECK(task_queue_factory_);
-}
-
-std::unique_ptr<RtcEventLog> RtcEventLogFactory::CreateRtcEventLog(
- RtcEventLog::EncodingType encoding_type) {
- return RtcEventLog::Create(encoding_type, task_queue_factory_);
-}
-
std::unique_ptr<RtcEventLogFactoryInterface> CreateRtcEventLogFactory() {
return absl::make_unique<RtcEventLogFactory>(&GlobalTaskQueueFactory());
}
diff --git a/logging/rtc_event_log/rtc_event_log_factory.h b/logging/rtc_event_log/rtc_event_log_factory.h
index 01e3994..63b1b60 100644
--- a/logging/rtc_event_log/rtc_event_log_factory.h
+++ b/logging/rtc_event_log/rtc_event_log_factory.h
@@ -13,24 +13,11 @@
#include <memory>
-#include "api/task_queue/task_queue_factory.h"
-#include "logging/rtc_event_log/rtc_event_log.h"
-#include "logging/rtc_event_log/rtc_event_log_factory_interface.h"
+#include "api/rtc_event_log/rtc_event_log_factory.h"
+#include "api/rtc_event_log/rtc_event_log_factory_interface.h"
namespace webrtc {
-class RtcEventLogFactory : public RtcEventLogFactoryInterface {
- public:
- explicit RtcEventLogFactory(TaskQueueFactory* task_queue_factory);
- ~RtcEventLogFactory() override {}
-
- std::unique_ptr<RtcEventLog> CreateRtcEventLog(
- RtcEventLog::EncodingType encoding_type) override;
-
- private:
- TaskQueueFactory* const task_queue_factory_;
-};
-
// TODO(bugs.webrtc.org/10284): Stop using the RtcEventLogFactory factory.
std::unique_ptr<RtcEventLogFactoryInterface> CreateRtcEventLogFactory();
} // namespace webrtc
diff --git a/logging/rtc_event_log/rtc_event_log_factory_interface.h b/logging/rtc_event_log/rtc_event_log_factory_interface.h
index 48ea3e5..47078df 100644
--- a/logging/rtc_event_log/rtc_event_log_factory_interface.h
+++ b/logging/rtc_event_log/rtc_event_log_factory_interface.h
@@ -11,23 +11,8 @@
#ifndef LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_INTERFACE_H_
#define LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_INTERFACE_H_
-#include <memory>
-
-#include "logging/rtc_event_log/rtc_event_log.h"
-
-namespace webrtc {
-
-// This interface exists to allow webrtc to be optionally built without
-// RtcEventLog support. A PeerConnectionFactory is constructed with an
-// RtcEventLogFactoryInterface, which may or may not be null.
-class RtcEventLogFactoryInterface {
- public:
- virtual ~RtcEventLogFactoryInterface() {}
-
- virtual std::unique_ptr<RtcEventLog> CreateRtcEventLog(
- RtcEventLog::EncodingType encoding_type) = 0;
-};
-
-} // namespace webrtc
+// TODO(bugs.webrtc.org/10206): For backwards compatibility; Delete as soon as
+// dependencies are updated.
+#include "api/rtc_event_log/rtc_event_log_factory_interface.h"
#endif // LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_FACTORY_INTERFACE_H_
diff --git a/logging/rtc_event_log/rtc_event_log_impl.cc b/logging/rtc_event_log/rtc_event_log_impl.cc
index c8c7c62..38e2ee7 100644
--- a/logging/rtc_event_log/rtc_event_log_impl.cc
+++ b/logging/rtc_event_log/rtc_event_log_impl.cc
@@ -8,18 +8,15 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "logging/rtc_event_log/rtc_event_log.h"
+#include "logging/rtc_event_log/rtc_event_log_impl.h"
-#include <deque>
#include <functional>
#include <limits>
-#include <memory>
#include <utility>
#include <vector>
#include "absl/memory/memory.h"
#include "absl/types/optional.h"
-#include "api/rtc_event_log_output.h"
#include "api/task_queue/queued_task.h"
#include "api/task_queue/task_queue_base.h"
#include "logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.h"
@@ -30,15 +27,9 @@
#include "rtc_base/logging.h"
#include "rtc_base/numerics/safe_conversions.h"
#include "rtc_base/numerics/safe_minmax.h"
-#include "rtc_base/synchronization/sequence_checker.h"
-#include "rtc_base/task_queue.h"
-#include "rtc_base/thread_annotations.h"
#include "rtc_base/time_utils.h"
namespace webrtc {
-
-#ifdef ENABLE_RTC_EVENT_LOG
-
namespace {
constexpr size_t kMaxEventsInHistory = 10000;
// The config-history is supposed to be unbounded, but needs to have some bound
@@ -81,77 +72,20 @@
return std::unique_ptr<RtcEventLogEncoder>(nullptr);
}
}
+} // namespace
-class RtcEventLogImpl final : public RtcEventLog {
- public:
- RtcEventLogImpl(std::unique_ptr<RtcEventLogEncoder> event_encoder,
- std::unique_ptr<rtc::TaskQueue> task_queue);
-
- ~RtcEventLogImpl() override;
-
- // TODO(eladalon): We should change these name to reflect that what we're
- // actually starting/stopping is the output of the log, not the log itself.
- bool StartLogging(std::unique_ptr<RtcEventLogOutput> output,
- int64_t output_period_ms) override;
- void StopLogging() override;
-
- void Log(std::unique_ptr<RtcEvent> event) override;
-
- private:
- void LogToMemory(std::unique_ptr<RtcEvent> event) RTC_RUN_ON(task_queue_);
- void LogEventsFromMemoryToOutput() RTC_RUN_ON(task_queue_);
-
- void StopOutput() RTC_RUN_ON(task_queue_);
-
- void WriteConfigsAndHistoryToOutput(const std::string& encoded_configs,
- const std::string& encoded_history)
- RTC_RUN_ON(task_queue_);
- void WriteToOutput(const std::string& output_string) RTC_RUN_ON(task_queue_);
-
- void StopLoggingInternal() RTC_RUN_ON(task_queue_);
-
- void ScheduleOutput() RTC_RUN_ON(task_queue_);
-
- // History containing all past configuration events.
- std::deque<std::unique_ptr<RtcEvent>> config_history_
- RTC_GUARDED_BY(*task_queue_);
-
- // History containing the most recent (non-configuration) events (~10s).
- std::deque<std::unique_ptr<RtcEvent>> history_ RTC_GUARDED_BY(*task_queue_);
-
- size_t max_size_bytes_ RTC_GUARDED_BY(*task_queue_);
- size_t written_bytes_ RTC_GUARDED_BY(*task_queue_);
-
- std::unique_ptr<RtcEventLogEncoder> event_encoder_
- RTC_GUARDED_BY(*task_queue_);
- std::unique_ptr<RtcEventLogOutput> event_output_ RTC_GUARDED_BY(*task_queue_);
-
- size_t num_config_events_written_ RTC_GUARDED_BY(*task_queue_);
- absl::optional<int64_t> output_period_ms_ RTC_GUARDED_BY(*task_queue_);
- int64_t last_output_ms_ RTC_GUARDED_BY(*task_queue_);
- bool output_scheduled_ RTC_GUARDED_BY(*task_queue_);
-
- // Since we are posting tasks bound to |this|, it is critical that the event
- // log and it's members outlive the |task_queue_|. Keep the "task_queue_|
- // last to ensure it destructs first, or else tasks living on the queue might
- // access other members after they've been torn down.
- std::unique_ptr<rtc::TaskQueue> task_queue_;
-
- RTC_DISALLOW_COPY_AND_ASSIGN(RtcEventLogImpl);
-};
-
-RtcEventLogImpl::RtcEventLogImpl(
- std::unique_ptr<RtcEventLogEncoder> event_encoder,
- std::unique_ptr<rtc::TaskQueue> task_queue)
+RtcEventLogImpl::RtcEventLogImpl(RtcEventLog::EncodingType encoding_type,
+ TaskQueueFactory* task_queue_factory)
: max_size_bytes_(std::numeric_limits<decltype(max_size_bytes_)>::max()),
written_bytes_(0),
- event_encoder_(std::move(event_encoder)),
+ event_encoder_(CreateEncoder(encoding_type)),
num_config_events_written_(0),
last_output_ms_(rtc::TimeMillis()),
output_scheduled_(false),
- task_queue_(std::move(task_queue)) {
- RTC_DCHECK(task_queue_);
-}
+ task_queue_(
+ absl::make_unique<rtc::TaskQueue>(task_queue_factory->CreateTaskQueue(
+ "rtc_event_log",
+ TaskQueueFactory::Priority::NORMAL))) {}
RtcEventLogImpl::~RtcEventLogImpl() {
// If we're logging to the output, this will stop that. Blocking function.
@@ -361,22 +295,4 @@
written_bytes_ += output_string.size();
}
-} // namespace
-
-#endif // ENABLE_RTC_EVENT_LOG
-
-// RtcEventLog member functions.
-std::unique_ptr<RtcEventLog> RtcEventLog::Create(
- RtcEventLog::EncodingType encoding_type,
- TaskQueueFactory* task_queue_factory) {
-#ifdef ENABLE_RTC_EVENT_LOG
- return absl::make_unique<RtcEventLogImpl>(
- CreateEncoder(encoding_type),
- absl::make_unique<rtc::TaskQueue>(task_queue_factory->CreateTaskQueue(
- "rtc_event_log", TaskQueueFactory::Priority::NORMAL)));
-#else
- return CreateNull();
-#endif // ENABLE_RTC_EVENT_LOG
-}
-
} // namespace webrtc
diff --git a/logging/rtc_event_log/rtc_event_log_impl.h b/logging/rtc_event_log/rtc_event_log_impl.h
new file mode 100644
index 0000000..e1ba830
--- /dev/null
+++ b/logging/rtc_event_log/rtc_event_log_impl.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_IMPL_H_
+#define LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_IMPL_H_
+
+#include <cstddef>
+#include <cstdint>
+#include <deque>
+#include <memory>
+#include <string>
+
+#include "absl/types/optional.h"
+#include "api/rtc_event_log/rtc_event.h"
+#include "api/rtc_event_log/rtc_event_log.h"
+#include "api/rtc_event_log_output.h"
+#include "api/task_queue/task_queue_factory.h"
+#include "logging/rtc_event_log/encoder/rtc_event_log_encoder.h"
+#include "rtc_base/synchronization/sequence_checker.h"
+#include "rtc_base/task_queue.h"
+#include "rtc_base/thread_annotations.h"
+
+namespace webrtc {
+
+class RtcEventLogImpl final : public RtcEventLog {
+ public:
+ RtcEventLogImpl(EncodingType encoding_type,
+ TaskQueueFactory* task_queue_factory);
+ RtcEventLogImpl(const RtcEventLogImpl&) = delete;
+ RtcEventLogImpl& operator=(const RtcEventLogImpl&) = delete;
+
+ ~RtcEventLogImpl() override;
+
+ // TODO(eladalon): We should change these name to reflect that what we're
+ // actually starting/stopping is the output of the log, not the log itself.
+ bool StartLogging(std::unique_ptr<RtcEventLogOutput> output,
+ int64_t output_period_ms) override;
+ void StopLogging() override;
+
+ void Log(std::unique_ptr<RtcEvent> event) override;
+
+ private:
+ void LogToMemory(std::unique_ptr<RtcEvent> event) RTC_RUN_ON(task_queue_);
+ void LogEventsFromMemoryToOutput() RTC_RUN_ON(task_queue_);
+
+ void StopOutput() RTC_RUN_ON(task_queue_);
+
+ void WriteConfigsAndHistoryToOutput(const std::string& encoded_configs,
+ const std::string& encoded_history)
+ RTC_RUN_ON(task_queue_);
+ void WriteToOutput(const std::string& output_string) RTC_RUN_ON(task_queue_);
+
+ void StopLoggingInternal() RTC_RUN_ON(task_queue_);
+
+ void ScheduleOutput() RTC_RUN_ON(task_queue_);
+
+ // History containing all past configuration events.
+ std::deque<std::unique_ptr<RtcEvent>> config_history_
+ RTC_GUARDED_BY(*task_queue_);
+
+ // History containing the most recent (non-configuration) events (~10s).
+ std::deque<std::unique_ptr<RtcEvent>> history_ RTC_GUARDED_BY(*task_queue_);
+
+ size_t max_size_bytes_ RTC_GUARDED_BY(*task_queue_);
+ size_t written_bytes_ RTC_GUARDED_BY(*task_queue_);
+
+ std::unique_ptr<RtcEventLogEncoder> event_encoder_
+ RTC_GUARDED_BY(*task_queue_);
+ std::unique_ptr<RtcEventLogOutput> event_output_ RTC_GUARDED_BY(*task_queue_);
+
+ size_t num_config_events_written_ RTC_GUARDED_BY(*task_queue_);
+ absl::optional<int64_t> output_period_ms_ RTC_GUARDED_BY(*task_queue_);
+ int64_t last_output_ms_ RTC_GUARDED_BY(*task_queue_);
+ bool output_scheduled_ RTC_GUARDED_BY(*task_queue_);
+
+ // Since we are posting tasks bound to |this|, it is critical that the event
+ // log and its members outlive |task_queue_|. Keep the |task_queue_|
+ // last to ensure it destructs first, or else tasks living on the queue might
+ // access other members after they've been torn down.
+ std::unique_ptr<rtc::TaskQueue> task_queue_;
+};
+
+} // namespace webrtc
+
+#endif // LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_IMPL_H_
diff --git a/logging/rtc_event_log/rtc_event_log_parser.h b/logging/rtc_event_log/rtc_event_log_parser.h
index 763c086..03ea486 100644
--- a/logging/rtc_event_log/rtc_event_log_parser.h
+++ b/logging/rtc_event_log/rtc_event_log_parser.h
@@ -39,6 +39,8 @@
namespace webrtc {
+enum PacketDirection { kIncomingPacket = 0, kOutgoingPacket };
+
template <typename T>
class PacketView;
diff --git a/test/call_test.cc b/test/call_test.cc
index ffb7305..1dd4c80 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -32,8 +32,8 @@
CallTest::CallTest()
: clock_(Clock::GetRealTimeClock()),
task_queue_factory_(CreateDefaultTaskQueueFactory()),
- send_event_log_(RtcEventLog::CreateNull()),
- recv_event_log_(RtcEventLog::CreateNull()),
+ send_event_log_(absl::make_unique<RtcEventLogNull>()),
+ recv_event_log_(absl::make_unique<RtcEventLogNull>()),
audio_send_config_(/*send_transport=*/nullptr, MediaTransportConfig()),
audio_send_stream_(nullptr),
frame_generator_capturer_(nullptr),
diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn
index 16f841f..31c0db0 100644
--- a/test/scenario/BUILD.gn
+++ b/test/scenario/BUILD.gn
@@ -87,6 +87,8 @@
"../../api:transport_api",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../api/audio_codecs:builtin_audio_encoder_factory",
+ "../../api/rtc_event_log",
+ "../../api/rtc_event_log:rtc_event_log_factory",
"../../api/test/video:function_video_factory",
"../../api/transport:network_control",
"../../api/units:data_rate",
@@ -105,7 +107,6 @@
"../../call:video_stream_api",
"../../common_video",
"../../logging:rtc_event_log_api",
- "../../logging:rtc_event_log_impl_base",
"../../media:rtc_audio_video",
"../../media:rtc_internal_video_codecs",
"../../media:rtc_media_base",
diff --git a/test/scenario/call_client.cc b/test/scenario/call_client.cc
index bc93a49..a710ad1 100644
--- a/test/scenario/call_client.cc
+++ b/test/scenario/call_client.cc
@@ -12,6 +12,8 @@
#include <utility>
#include "absl/memory/memory.h"
+#include "api/rtc_event_log/rtc_event_log.h"
+#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "modules/audio_mixer/audio_mixer_impl.h"
namespace webrtc {
@@ -74,10 +76,10 @@
TaskQueueFactory* task_queue_factory,
LogWriterFactoryInterface* log_writer_factory) {
if (!log_writer_factory) {
- return RtcEventLog::CreateNull();
+ return absl::make_unique<RtcEventLogNull>();
}
- auto event_log = RtcEventLog::Create(RtcEventLog::EncodingType::NewFormat,
- task_queue_factory);
+ auto event_log = RtcEventLogFactory(task_queue_factory)
+ .CreateRtcEventLog(RtcEventLog::EncodingType::NewFormat);
bool success = event_log->StartLogging(log_writer_factory->Create(".rtc.dat"),
kEventLogOutputIntervalMs);
RTC_CHECK(success);
diff --git a/test/scenario/simulated_time.cc b/test/scenario/simulated_time.cc
index efee958..fa3ab39 100644
--- a/test/scenario/simulated_time.cc
+++ b/test/scenario/simulated_time.cc
@@ -15,7 +15,9 @@
#include <cstdint>
#include <utility>
+#include "absl/memory/memory.h"
#include "absl/types/optional.h"
+#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "rtc_base/checks.h"
#include "rtc_base/socket_address.h"
@@ -39,10 +41,10 @@
TaskQueueFactory* task_queue_factory,
LogWriterFactoryInterface* log_writer_factory) {
if (!log_writer_factory) {
- return RtcEventLog::CreateNull();
+ return absl::make_unique<RtcEventLogNull>();
}
- auto event_log = RtcEventLog::Create(RtcEventLog::EncodingType::NewFormat,
- task_queue_factory);
+ auto event_log = RtcEventLogFactory(task_queue_factory)
+ .CreateRtcEventLog(RtcEventLog::EncodingType::NewFormat);
bool success = event_log->StartLogging(log_writer_factory->Create(".rtc.dat"),
kEventLogOutputIntervalMs);
RTC_CHECK(success);
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index be29714..5415f96 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -1222,8 +1222,8 @@
RtcEventLog::kImmediateOutput);
RTC_DCHECK(event_log_started);
} else {
- send_event_log_ = RtcEventLog::CreateNull();
- recv_event_log_ = RtcEventLog::CreateNull();
+ send_event_log_ = absl::make_unique<RtcEventLogNull>();
+ recv_event_log_ = absl::make_unique<RtcEventLogNull>();
}
task_queue_.SendTask([this, ¶ms, &send_transport, &recv_transport]() {
@@ -1443,8 +1443,8 @@
/*output_period_ms=*/5000);
RTC_DCHECK(event_log_started);
} else {
- send_event_log_ = RtcEventLog::CreateNull();
- recv_event_log_ = RtcEventLog::CreateNull();
+ send_event_log_ = absl::make_unique<RtcEventLogNull>();
+ recv_event_log_ = absl::make_unique<RtcEventLogNull>();
}
task_queue_.SendTask([&]() {