diff --git a/rtc_base/logging_unittest.cc b/rtc_base/logging_unittest.cc index 6bb20abcc1..225d66d13d 100644 --- a/rtc_base/logging_unittest.cc +++ b/rtc_base/logging_unittest.cc @@ -20,94 +20,23 @@ #include "rtc_base/checks.h" #include "rtc_base/event.h" #include "rtc_base/platform_thread.h" -#include "rtc_base/stream.h" #include "rtc_base/time_utils.h" #include "test/gtest.h" namespace rtc { -namespace { - -class StringStream : public StreamInterface { +class LogSinkImpl : public LogSink { public: - explicit StringStream(std::string* str); - explicit StringStream(const std::string& str); - - StreamState GetState() const override; - StreamResult Read(void* buffer, - size_t buffer_len, - size_t* read, - int* error) override; - StreamResult Write(const void* data, - size_t data_len, - size_t* written, - int* error) override; - void Close() override; - - private: - std::string& str_; - size_t read_pos_; - bool read_only_; -}; - -StringStream::StringStream(std::string* str) - : str_(*str), read_pos_(0), read_only_(false) {} - -StringStream::StringStream(const std::string& str) - : str_(const_cast(str)), read_pos_(0), read_only_(true) {} - -StreamState StringStream::GetState() const { - return SS_OPEN; -} - -StreamResult StringStream::Read(void* buffer, - size_t buffer_len, - size_t* read, - int* error) { - size_t available = std::min(buffer_len, str_.size() - read_pos_); - if (!available) - return SR_EOS; - memcpy(buffer, str_.data() + read_pos_, available); - read_pos_ += available; - if (read) - *read = available; - return SR_SUCCESS; -} - -StreamResult StringStream::Write(const void* data, - size_t data_len, - size_t* written, - int* error) { - if (read_only_) { - if (error) { - *error = -1; - } - return SR_ERROR; - } - str_.append(static_cast(data), - static_cast(data) + data_len); - if (written) - *written = data_len; - return SR_SUCCESS; -} - -void StringStream::Close() {} - -} // namespace - -template -class LogSinkImpl : public LogSink, public Base { - public: - LogSinkImpl() {} + explicit LogSinkImpl(std::string* log_data) : log_data_(log_data) {} template - explicit LogSinkImpl(P* p) : Base(p) {} + explicit LogSinkImpl(P* p) {} private: void OnLogMessage(const std::string& message) override { - static_cast(this)->WriteAll(message.data(), message.size(), nullptr, - nullptr); + log_data_->append(message); } + std::string* const log_data_; }; class LogMessageForTesting : public LogMessage { @@ -145,7 +74,7 @@ TEST(LogTest, SingleStream) { int sev = LogMessage::GetLogToStream(nullptr); std::string str; - LogSinkImpl stream(&str); + LogSinkImpl stream(&str); LogMessage::AddLogToStream(&stream, LS_INFO); EXPECT_EQ(LS_INFO, LogMessage::GetLogToStream(&stream)); @@ -207,7 +136,7 @@ TEST(LogTest, MultipleStreams) { int sev = LogMessage::GetLogToStream(nullptr); std::string str1, str2; - LogSinkImpl stream1(&str1), stream2(&str2); + LogSinkImpl stream1(&str1), stream2(&str2); LogMessage::AddLogToStream(&stream1, LS_INFO); LogMessage::AddLogToStream(&stream2, LS_VERBOSE); EXPECT_EQ(LS_INFO, LogMessage::GetLogToStream(&stream1)); @@ -256,7 +185,7 @@ TEST(LogTest, MultipleThreads) { thread3.Start(); std::string s1, s2, s3; - LogSinkImpl stream1(&s1), stream2(&s2), stream3(&s3); + LogSinkImpl stream1(&s1), stream2(&s2), stream3(&s3); for (int i = 0; i < 1000; ++i) { LogMessage::AddLogToStream(&stream1, LS_WARNING); LogMessage::AddLogToStream(&stream2, LS_INFO); @@ -303,7 +232,7 @@ TEST(LogTest, CheckFilePathParsed) { #if defined(WEBRTC_ANDROID) TEST(LogTest, CheckTagAddedToStringInDefaultOnLogMessageAndroid) { std::string str; - LogSinkImpl stream(&str); + LogSinkImpl stream(&str); LogMessage::AddLogToStream(&stream, LS_INFO); EXPECT_EQ(LS_INFO, LogMessage::GetLogToStream(&stream)); @@ -316,7 +245,7 @@ TEST(LogTest, CheckTagAddedToStringInDefaultOnLogMessageAndroid) { // Test the time required to write 1000 80-character logs to a string. TEST(LogTest, Perf) { std::string str; - LogSinkImpl stream(&str); + LogSinkImpl stream(&str); LogMessage::AddLogToStream(&stream, LS_VERBOSE); const std::string message(80, 'X'); @@ -336,7 +265,6 @@ TEST(LogTest, Perf) { finish = TimeMillis(); LogMessage::RemoveLogToStream(&stream); - stream.Close(); EXPECT_EQ(str.size(), (message.size() + logging_overhead) * kRepetitions); RTC_LOG(LS_INFO) << "Total log time: " << TimeDiff(finish, start) @@ -348,7 +276,7 @@ TEST(LogTest, Perf) { TEST(LogTest, EnumsAreSupported) { enum class TestEnum { kValue0 = 0, kValue1 = 1 }; std::string str; - LogSinkImpl stream(&str); + LogSinkImpl stream(&str); LogMessage::AddLogToStream(&stream, LS_INFO); RTC_LOG(LS_INFO) << "[" << TestEnum::kValue0 << "]"; EXPECT_NE(std::string::npos, str.find("[0]")); @@ -356,7 +284,6 @@ TEST(LogTest, EnumsAreSupported) { RTC_LOG(LS_INFO) << "[" << TestEnum::kValue1 << "]"; EXPECT_NE(std::string::npos, str.find("[1]")); LogMessage::RemoveLogToStream(&stream); - stream.Close(); } TEST(LogTest, NoopSeverityDoesNotRunStringFormatting) {