diff --git a/logging/BUILD.gn b/logging/BUILD.gn index afee1946cd..a47c81d370 100644 --- a/logging/BUILD.gn +++ b/logging/BUILD.gn @@ -44,6 +44,7 @@ rtc_source_set("rtc_event_log_api") { deps = [ "../api:libjingle_logging_api", "../rtc_base:rtc_base_approved", + "../rtc_base:rtc_task_queue", ] } diff --git a/logging/rtc_event_log/rtc_event_log.h b/logging/rtc_event_log/rtc_event_log.h index 79fd39a449..a0714e0bdb 100644 --- a/logging/rtc_event_log/rtc_event_log.h +++ b/logging/rtc_event_log/rtc_event_log.h @@ -17,6 +17,7 @@ #include "api/rtceventlogoutput.h" #include "logging/rtc_event_log/events/rtc_event.h" +#include "rtc_base/task_queue.h" namespace webrtc { @@ -37,6 +38,12 @@ class RtcEventLog { // Factory method to create an RtcEventLog object. static std::unique_ptr Create(EncodingType encoding_type); + // Factory method to create an RtcEventLog object which uses the given + // rtc::TaskQueue for emitting output. + static std::unique_ptr Create( + EncodingType encoding_type, + std::unique_ptr task_queue); + // Create an RtcEventLog object that does nothing. static std::unique_ptr CreateNull(); diff --git a/logging/rtc_event_log/rtc_event_log_factory.cc b/logging/rtc_event_log/rtc_event_log_factory.cc index 566736c8b7..e9d983d96e 100644 --- a/logging/rtc_event_log/rtc_event_log_factory.cc +++ b/logging/rtc_event_log/rtc_event_log_factory.cc @@ -10,6 +10,8 @@ #include "logging/rtc_event_log/rtc_event_log_factory.h" +#include + #include "logging/rtc_event_log/rtc_event_log.h" namespace webrtc { @@ -19,6 +21,12 @@ std::unique_ptr RtcEventLogFactory::CreateRtcEventLog( return RtcEventLog::Create(encoding_type); } +std::unique_ptr RtcEventLogFactory::CreateRtcEventLog( + RtcEventLog::EncodingType encoding_type, + std::unique_ptr task_queue) { + return RtcEventLog::Create(encoding_type, std::move(task_queue)); +} + std::unique_ptr CreateRtcEventLogFactory() { return std::unique_ptr(new RtcEventLogFactory()); } diff --git a/logging/rtc_event_log/rtc_event_log_factory.h b/logging/rtc_event_log/rtc_event_log_factory.h index 1b75d66c10..7f61ca92a7 100644 --- a/logging/rtc_event_log/rtc_event_log_factory.h +++ b/logging/rtc_event_log/rtc_event_log_factory.h @@ -14,6 +14,7 @@ #include #include "logging/rtc_event_log/rtc_event_log_factory_interface.h" +#include "rtc_base/task_queue.h" namespace webrtc { @@ -23,6 +24,10 @@ class RtcEventLogFactory : public RtcEventLogFactoryInterface { std::unique_ptr CreateRtcEventLog( RtcEventLog::EncodingType encoding_type) override; + + std::unique_ptr CreateRtcEventLog( + RtcEventLog::EncodingType encoding_type, + std::unique_ptr task_queue) override; }; std::unique_ptr CreateRtcEventLogFactory(); 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 a28002d782..395f2dc9a0 100644 --- a/logging/rtc_event_log/rtc_event_log_factory_interface.h +++ b/logging/rtc_event_log/rtc_event_log_factory_interface.h @@ -14,6 +14,7 @@ #include #include "logging/rtc_event_log/rtc_event_log.h" +#include "rtc_base/task_queue.h" namespace webrtc { @@ -26,6 +27,10 @@ class RtcEventLogFactoryInterface { virtual std::unique_ptr CreateRtcEventLog( RtcEventLog::EncodingType encoding_type) = 0; + + virtual std::unique_ptr CreateRtcEventLog( + RtcEventLog::EncodingType encoding_type, + std::unique_ptr task_queue) = 0; }; std::unique_ptr CreateRtcEventLogFactory(); diff --git a/logging/rtc_event_log/rtc_event_log_impl.cc b/logging/rtc_event_log/rtc_event_log_impl.cc index 77d3822c5a..943d90b63e 100644 --- a/logging/rtc_event_log/rtc_event_log_impl.cc +++ b/logging/rtc_event_log/rtc_event_log_impl.cc @@ -81,10 +81,9 @@ std::unique_ptr CreateEncoder( class RtcEventLogImpl final : public RtcEventLog { public: - explicit RtcEventLogImpl( - std::unique_ptr event_encoder, - std::unique_ptr task_queue = - rtc::MakeUnique("rtc_event_log")); + RtcEventLogImpl(std::unique_ptr event_encoder, + std::unique_ptr task_queue); + ~RtcEventLogImpl() override; // TODO(eladalon): We should change these name to reflect that what we're @@ -363,6 +362,13 @@ void RtcEventLogImpl::WriteToOutput(const std::string& output_string) { // RtcEventLog member functions. std::unique_ptr RtcEventLog::Create(EncodingType encoding_type) { + return Create(encoding_type, + rtc::MakeUnique("rtc_event_log")); +} + +std::unique_ptr RtcEventLog::Create( + EncodingType encoding_type, + std::unique_ptr task_queue) { #ifdef ENABLE_RTC_EVENT_LOG // TODO(eladalon): Known issue - there's a race over |rtc_event_log_count|. constexpr int kMaxLogCount = 5; @@ -374,7 +380,8 @@ std::unique_ptr RtcEventLog::Create(EncodingType encoding_type) { return CreateNull(); } auto encoder = CreateEncoder(encoding_type); - return rtc::MakeUnique(std::move(encoder)); + return rtc::MakeUnique(std::move(encoder), + std::move(task_queue)); #else return CreateNull(); #endif // ENABLE_RTC_EVENT_LOG