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}
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index c780fec..a642d9e 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -198,6 +198,7 @@
":platform_thread_types",
":stringutils",
":timeutils",
+ "//third_party/abseil-cpp/absl/strings",
]
if (build_with_chromium) {
diff --git a/rtc_base/logging.cc b/rtc_base/logging.cc
index 42f4fa9..ca03d8e 100644
--- a/rtc_base/logging.cc
+++ b/rtc_base/logging.cc
@@ -540,6 +540,9 @@
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*)));
diff --git a/rtc_base/logging.h b/rtc_base/logging.h
index 1a14c33..4f74dcf 100644
--- a/rtc_base/logging.h
+++ b/rtc_base/logging.h
@@ -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 @@
kLongDouble,
kCharP,
kStdString,
- // TODO(kwiberg): Add absl::StringView.
+ kStringView,
kVoidP,
kLogMetadata,
kLogMetadataErr,
@@ -236,7 +237,10 @@
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};
diff --git a/rtc_base/logging_unittest.cc b/rtc_base/logging_unittest.cc
index 263e992..bb6b657 100644
--- a/rtc_base/logging_unittest.cc
+++ b/rtc_base/logging_unittest.cc
@@ -184,9 +184,45 @@
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));
}