Add support for logging absl::string_view.

Bug: webrtc:8982
Change-Id: I5691f91ea663756666cf187ee223ede50f87d5f0
Reviewed-on: https://webrtc-review.googlesource.com/99840
Commit-Queue: Jonas Olsson <jonasolsson@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24707}
This commit is contained in:
Jonas Olsson
2018-09-12 15:32:47 +02:00
committed by Commit Bot
parent 958ed23860
commit f2ce37cae5
4 changed files with 47 additions and 3 deletions

View File

@ -198,6 +198,7 @@ rtc_source_set("logging") {
":platform_thread_types",
":stringutils",
":timeutils",
"//third_party/abseil-cpp/absl/strings",
]
if (build_with_chromium) {

View File

@ -540,6 +540,9 @@ void Log(const LogArgType* fmt, ...) {
case LogArgType::kStdString:
log_message.stream() << *va_arg(args, const std::string*);
break;
case LogArgType::kStringView:
log_message.stream() << *va_arg(args, const absl::string_view*);
break;
case LogArgType::kVoidP:
log_message.stream() << rtc::ToHex(
reinterpret_cast<uintptr_t>(va_arg(args, const void*)));

View File

@ -55,6 +55,7 @@
#include <CoreServices/CoreServices.h>
#endif
#include "absl/strings/string_view.h"
#include "rtc_base/constructormagic.h"
#include "rtc_base/deprecation.h"
#include "rtc_base/strings/string_builder.h"
@ -174,7 +175,7 @@ enum class LogArgType : int8_t {
kLongDouble,
kCharP,
kStdString,
// TODO(kwiberg): Add absl::StringView.
kStringView,
kVoidP,
kLogMetadata,
kLogMetadataErr,
@ -236,7 +237,10 @@ inline Val<LogArgType::kStdString, const std::string*> MakeVal(
const std::string& x) {
return {&x};
}
// TODO(kwiberg): Add absl::string_view
inline Val<LogArgType::kStringView, const absl::string_view*> MakeVal(
const absl::string_view& x) {
return {&x};
}
inline Val<LogArgType::kVoidP, const void*> MakeVal(const void* x) {
return {x};

View File

@ -184,9 +184,45 @@ TEST(LogTest, SingleStream) {
EXPECT_NE(std::string::npos, str.find("INFO"));
EXPECT_EQ(std::string::npos, str.find("VERBOSE"));
int i = 1;
long l = 2l;
long long ll = 3ll;
unsigned int u = 4u;
unsigned long ul = 5ul;
unsigned long long ull = 6ull;
std::string s1 = "char*";
std::string s2 = "std::string";
std::string s3 = "absl::stringview";
void* p = reinterpret_cast<void*>(0xabcd);
// Log all suported types(except doubles/floats) as a sanity-check.
RTC_LOG(LS_INFO) << "|" << i << "|" << l << "|" << ll << "|" << u << "|" << ul
<< "|" << ull << "|" << s1.c_str() << "|" << s2 << "|"
<< absl::string_view(s3) << "|" << p << "|";
// Signed integers
EXPECT_NE(std::string::npos, str.find("|1|"));
EXPECT_NE(std::string::npos, str.find("|2|"));
EXPECT_NE(std::string::npos, str.find("|3|"));
// Unsigned integers
EXPECT_NE(std::string::npos, str.find("|4|"));
EXPECT_NE(std::string::npos, str.find("|5|"));
EXPECT_NE(std::string::npos, str.find("|6|"));
// Strings
EXPECT_NE(std::string::npos, str.find("|char*|"));
EXPECT_NE(std::string::npos, str.find("|std::string|"));
EXPECT_NE(std::string::npos, str.find("|absl::stringview|"));
// void*
EXPECT_NE(std::string::npos, str.find("|abcd|"));
LogMessage::RemoveLogToStream(&stream);
EXPECT_EQ(LS_NONE, LogMessage::GetLogToStream(&stream));
EXPECT_EQ(sev, LogMessage::GetLogToStream(nullptr));
}