Index: webrtc/logging/rtc_event_log/rtc_event_log.cc |
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log.cc b/webrtc/logging/rtc_event_log/rtc_event_log.cc |
index ae2052cac7ca0dec0952ed0777aaafe1d9e5fe26..f7812a7d9fe435e87bf17be283eb7e5bc7578479 100644 |
--- a/webrtc/logging/rtc_event_log/rtc_event_log.cc |
+++ b/webrtc/logging/rtc_event_log/rtc_event_log.cc |
@@ -18,6 +18,7 @@ |
#include <utility> |
#include <vector> |
+#include "webrtc/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.h" |
#include "webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h" |
#include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
@@ -96,7 +97,7 @@ class ResourceOwningTask final : public rtc::QueuedTask { |
} // namespace |
class RtcEventLogImpl final : public RtcEventLog { |
- friend std::unique_ptr<RtcEventLog> RtcEventLog::Create(); |
+ friend std::unique_ptr<RtcEventLog> RtcEventLog::Create(EncodingType); |
public: |
~RtcEventLogImpl() override; |
@@ -148,11 +149,12 @@ class RtcEventLogImpl final : public RtcEventLog { |
ProbeFailureReason failure_reason) override; |
private: |
+ // Creation is done by RtcEventLog::Create. |
+ explicit RtcEventLogImpl(std::unique_ptr<RtcEventLogEncoder> event_encoder); |
+ |
void StartLoggingInternal(std::unique_ptr<FileWrapper> file, |
int64_t max_size_bytes); |
- RtcEventLogImpl(); // Creation is done by RtcEventLog::Create. |
- |
void StoreEvent(std::unique_ptr<rtclog::Event> event); |
void LogProbeResult(int id, |
rtclog::BweProbeResult::ResultType result, |
@@ -191,6 +193,8 @@ class RtcEventLogImpl final : public RtcEventLog { |
size_t max_size_bytes_ ACCESS_ON(task_queue_); |
size_t written_bytes_ ACCESS_ON(task_queue_); |
+ std::unique_ptr<RtcEventLogEncoder> event_encoder_ ACCESS_ON(task_queue_); |
+ |
// Keep this last to ensure it destructs first, or else tasks living on the |
// queue might access other members after they've been torn down. |
rtc::TaskQueue task_queue_; |
@@ -249,10 +253,12 @@ rtclog::BweProbeResult::ResultType ConvertProbeResultType( |
std::atomic<int> RtcEventLogImpl::log_count_(0); |
-RtcEventLogImpl::RtcEventLogImpl() |
+RtcEventLogImpl::RtcEventLogImpl( |
+ std::unique_ptr<RtcEventLogEncoder> event_encoder) |
: file_(FileWrapper::Create()), |
max_size_bytes_(std::numeric_limits<decltype(max_size_bytes_)>::max()), |
written_bytes_(0), |
+ event_encoder_(std::move(event_encoder)), |
task_queue_("rtc_event_log") {} |
RtcEventLogImpl::~RtcEventLogImpl() { |
@@ -857,7 +863,7 @@ bool RtcEventLog::ParseRtcEventLog(const std::string& file_name, |
#endif // ENABLE_RTC_EVENT_LOG |
// RtcEventLog member functions. |
-std::unique_ptr<RtcEventLog> RtcEventLog::Create() { |
+std::unique_ptr<RtcEventLog> RtcEventLog::Create(EncodingType encoding_type) { |
#ifdef ENABLE_RTC_EVENT_LOG |
// TODO(eladalon): Known issue - there's a race over |log_count_| here. |
constexpr int kMaxLogCount = 5; |
@@ -866,9 +872,10 @@ std::unique_ptr<RtcEventLog> RtcEventLog::Create() { |
LOG(LS_WARNING) << "Denied creation of additional WebRTC event logs. " |
<< count - 1 << " logs open already."; |
std::atomic_fetch_sub(&RtcEventLogImpl::log_count_, 1); |
- return std::unique_ptr<RtcEventLog>(new RtcEventLogNullImpl()); |
+ return CreateNull(); |
} |
- return std::unique_ptr<RtcEventLog>(new RtcEventLogImpl()); |
+ auto encoder = CreateEncoder(encoding_type); |
+ return rtc::WrapUnique<RtcEventLog>(new RtcEventLogImpl(std::move(encoder))); |
#else |
return CreateNull(); |
#endif // ENABLE_RTC_EVENT_LOG |
@@ -878,4 +885,15 @@ std::unique_ptr<RtcEventLog> RtcEventLog::CreateNull() { |
return std::unique_ptr<RtcEventLog>(new RtcEventLogNullImpl()); |
} |
+std::unique_ptr<RtcEventLogEncoder> RtcEventLog::CreateEncoder( |
+ EncodingType type) { |
+ switch (type) { |
+ case EncodingType::Legacy: |
+ return rtc::MakeUnique<RtcEventLogEncoderLegacy>(); |
+ default: |
+ LOG(LS_ERROR) << "Unknown RtcEventLog encoder type (" << int(type) << ")"; |
+ RTC_NOTREACHED(); |
+ } |
+} |
+ |
} // namespace webrtc |