1 /* 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef API_RTC_EVENT_LOG_RTC_EVENT_LOG_H_ 12 #define API_RTC_EVENT_LOG_RTC_EVENT_LOG_H_ 13 14 #include <cstddef> 15 #include <cstdint> 16 #include <functional> 17 #include <memory> 18 19 #include "api/rtc_event_log/rtc_event.h" 20 #include "api/rtc_event_log_output.h" 21 #include "api/task_queue/task_queue_factory.h" 22 23 namespace webrtc { 24 25 class RtcEventLog { 26 public: 27 enum : size_t { kUnlimitedOutput = 0 }; 28 enum : int64_t { kImmediateOutput = 0 }; 29 30 // TODO(eladalon): Get rid of the legacy encoding and this enum once all 31 // clients have migrated to the new format. 32 enum class EncodingType { Legacy, NewFormat }; 33 34 virtual ~RtcEventLog() = default; 35 36 // Starts logging to a given output. The output might be limited in size, 37 // and may close itself once it has reached the maximum size. 38 virtual bool StartLogging(std::unique_ptr<RtcEventLogOutput> output, 39 int64_t output_period_ms) = 0; 40 41 // Stops logging to file and waits until the file has been closed, after 42 // which it would be permissible to read and/or modify it. 43 virtual void StopLogging() = 0; 44 45 // Stops logging to file and calls |callback| when the file has been closed. 46 // Note that it is not safe to call any other members, including the 47 // destructor, until the callback has been called. 48 // TODO(srte): Remove default implementation when it's safe to do so. StopLogging(std::function<void ()> callback)49 virtual void StopLogging(std::function<void()> callback) { 50 StopLogging(); 51 callback(); 52 } 53 54 // Log an RTC event (the type of event is determined by the subclass). 55 virtual void Log(std::unique_ptr<RtcEvent> event) = 0; 56 }; 57 58 // No-op implementation is used if flag is not set, or in tests. 59 class RtcEventLogNull final : public RtcEventLog { 60 public: 61 bool StartLogging(std::unique_ptr<RtcEventLogOutput> output, 62 int64_t output_period_ms) override; StopLogging()63 void StopLogging() override {} Log(std::unique_ptr<RtcEvent> event)64 void Log(std::unique_ptr<RtcEvent> event) override {} 65 }; 66 67 } // namespace webrtc 68 69 #endif // API_RTC_EVENT_LOG_RTC_EVENT_LOG_H_ 70