Adopt absl::string_view in rtc_base/log_sinks

This is part of a large scale effort to increase adoption of
absl::string_view across the WebRTC code base.

This CL adds absl::string_view versions of the OnLogMessage functions in
rtc::LogSink. The const std::string& versions are kept for now since
downstream clients use subclasses of LogSink and need to be migrated
before these are removed.

Bug: webrtc:13579
Change-Id: I57bb72ad503805ff0ca16f1d7aece2d44c65cb73
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/253980
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Xavier Lepaul‎ <xalep@webrtc.org>
Owners-Override: Xavier Lepaul‎ <xalep@webrtc.org>
Commit-Queue: Ali Tofigh <alito@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36189}
This commit is contained in:
Ali Tofigh 2022-03-14 13:32:04 +01:00 committed by WebRTC LUCI CQ
parent 9848890590
commit 6364d0899e
16 changed files with 118 additions and 24 deletions

View file

@ -506,6 +506,7 @@ if (rtc_include_tests) {
absl_deps = [
"//third_party/abseil-cpp/absl/container:inlined_vector",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
"//third_party/abseil-cpp/absl/types:variant",
]

View file

@ -12,6 +12,7 @@
#include <memory>
#include <string>
#include "absl/strings/string_view.h"
#include "api/test/create_frame_generator.h"
#include "call/call.h"
#include "call/fake_network_pipe.h"
@ -50,13 +51,17 @@ class LogObserver {
class Callback : public rtc::LogSink {
public:
void OnLogMessage(const std::string& message) override {
OnLogMessage(absl::string_view(message));
}
void OnLogMessage(absl::string_view message) override {
MutexLock lock(&mutex_);
// Ignore log lines that are due to missing AST extensions, these are
// logged when we switch back from AST to TOF until the wrapping bitrate
// estimator gives up on using AST.
if (message.find("BitrateEstimator") != std::string::npos &&
message.find("packet is missing") == std::string::npos) {
received_log_lines_.push_back(message);
if (message.find("BitrateEstimator") != absl::string_view::npos &&
message.find("packet is missing") == absl::string_view::npos) {
received_log_lines_.push_back(std::string(message));
}
int num_popped = 0;
@ -66,7 +71,7 @@ class LogObserver {
received_log_lines_.pop_front();
expected_log_lines_.pop_front();
num_popped++;
EXPECT_TRUE(a.find(b) != std::string::npos) << a << " != " << b;
EXPECT_TRUE(a.find(b) != absl::string_view::npos) << a << " != " << b;
}
if (expected_log_lines_.empty()) {
if (num_popped > 0) {

View file

@ -1422,6 +1422,7 @@ if (rtc_include_tests) {
"//third_party/abseil-cpp/absl/base:core_headers",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/numeric:bits",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
}

View file

@ -15,6 +15,7 @@
#include <cstdio>
#include <string>
#include "absl/strings/string_view.h"
#include "rtc_base/checks.h"
namespace rtc {
@ -36,14 +37,18 @@ FileRotatingLogSink::FileRotatingLogSink(FileRotatingStream* stream)
FileRotatingLogSink::~FileRotatingLogSink() {}
void FileRotatingLogSink::OnLogMessage(const std::string& message) {
OnLogMessage(absl::string_view(message));
}
void FileRotatingLogSink::OnLogMessage(absl::string_view message) {
if (!stream_->IsOpen()) {
std::fprintf(stderr, "Init() must be called before adding this sink.\n");
return;
}
stream_->Write(message.c_str(), message.size());
stream_->Write(message.data(), message.size());
}
void FileRotatingLogSink::OnLogMessage(const std::string& message,
void FileRotatingLogSink::OnLogMessage(absl::string_view message,
LoggingSeverity sev,
const char* tag) {
if (!stream_->IsOpen()) {
@ -52,7 +57,7 @@ void FileRotatingLogSink::OnLogMessage(const std::string& message,
}
stream_->Write(tag, strlen(tag));
stream_->Write(": ", 2);
stream_->Write(message.c_str(), message.size());
stream_->Write(message.data(), message.size());
}
bool FileRotatingLogSink::Init() {

View file

@ -16,6 +16,7 @@
#include <memory>
#include <string>
#include "absl/strings/string_view.h"
#include "rtc_base/file_rotating_stream.h"
#include "rtc_base/logging.h"
@ -39,7 +40,8 @@ class FileRotatingLogSink : public LogSink {
// Writes the message to the current file. It will spill over to the next
// file if needed.
void OnLogMessage(const std::string& message) override;
void OnLogMessage(const std::string& message,
void OnLogMessage(absl::string_view message) override;
void OnLogMessage(absl::string_view message,
LoggingSeverity sev,
const char* tag) override;

View file

@ -42,6 +42,7 @@ static const int kMaxLogLineSize = 1024 - 60;
#include <vector>
#include "absl/base/attributes.h"
#include "absl/strings/string_view.h"
#include "rtc_base/checks.h"
#include "rtc_base/platform_thread_types.h"
#include "rtc_base/string_encode.h"
@ -563,4 +564,20 @@ void LogSink::OnLogMessage(const std::string& msg,
LoggingSeverity /* severity */) {
OnLogMessage(msg);
}
// Inefficient default implementation, override is recommended.
void LogSink::OnLogMessage(absl::string_view msg,
LoggingSeverity severity,
const char* tag) {
OnLogMessage(tag + (": " + std::string(msg)), severity);
}
void LogSink::OnLogMessage(absl::string_view msg,
LoggingSeverity /* severity */) {
OnLogMessage(msg);
}
void LogSink::OnLogMessage(absl::string_view msg) {
OnLogMessage(std::string(msg));
}
} // namespace rtc

View file

@ -112,6 +112,13 @@ class LogSink {
LoggingSeverity severity);
virtual void OnLogMessage(const std::string& message) = 0;
virtual void OnLogMessage(absl::string_view msg,
LoggingSeverity severity,
const char* tag);
virtual void OnLogMessage(absl::string_view message,
LoggingSeverity severity);
virtual void OnLogMessage(absl::string_view message);
private:
friend class ::rtc::LogMessage;
#if RTC_LOG_ENABLED()

View file

@ -16,6 +16,7 @@
#include <algorithm>
#include "absl/strings/string_view.h"
#include "rtc_base/arraysize.h"
#include "rtc_base/checks.h"
#include "rtc_base/event.h"
@ -34,7 +35,10 @@ class LogSinkImpl : public LogSink {
private:
void OnLogMessage(const std::string& message) override {
log_data_->append(message);
OnLogMessage(absl::string_view(message));
}
void OnLogMessage(absl::string_view message) override {
log_data_->append(message.begin(), message.end());
}
std::string* const log_data_;
};

View file

@ -149,6 +149,8 @@ if (is_ios || is_mac) {
"../rtc_base:checks",
]
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
frameworks = [
"AVFoundation.framework",
"CoreMedia.framework",
@ -180,6 +182,7 @@ if (is_ios || is_mac) {
deps = [
":base_objc",
":helpers_objc",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:logging",
@ -189,6 +192,8 @@ if (is_ios || is_mac) {
"..:common_objc",
":used_from_extension",
]
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}
rtc_library("file_logger_objc") {

View file

@ -1137,6 +1137,8 @@ if (current_os == "linux" || is_android) {
":native_api_jni",
"../../rtc_base",
]
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}
rtc_library("audio_device_module_base") {
@ -1620,7 +1622,10 @@ if (is_android) {
"../../test:test_support",
"../../testing/gtest",
]
absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
absl_deps = [
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
]
}
rtc_android_library("native_unittests_java") {

View file

@ -16,6 +16,7 @@
#include <memory>
#include <vector>
#include "absl/strings/string_view.h"
#include "rtc_base/event.h"
#include "rtc_base/logging.h"
#include "rtc_base/platform_thread.h"
@ -201,6 +202,9 @@ class LookoutLogSink final : public rtc::LogSink {
explicit LookoutLogSink(std::string look_for)
: look_for_(std::move(look_for)) {}
void OnLogMessage(const std::string& message) override {
OnLogMessage(absl::string_view(message));
}
void OnLogMessage(absl::string_view message) override {
if (message.find(look_for_) != std::string::npos) {
when_found_.Set();
}

View file

@ -9,6 +9,7 @@
*/
#include "sdk/android/src/jni/logging/log_sink.h"
#include "absl/strings/string_view.h"
#include "sdk/android/generated_logging_jni/JNILogging_jni.h"
namespace webrtc {
@ -18,18 +19,24 @@ JNILogSink::JNILogSink(JNIEnv* env, const JavaRef<jobject>& j_logging)
: j_logging_(env, j_logging) {}
JNILogSink::~JNILogSink() = default;
void JNILogSink::OnLogMessage(const std::string& msg,
rtc::LoggingSeverity severity,
const char* tag) {
JNIEnv* env = AttachCurrentThreadIfNeeded();
Java_JNILogging_logToInjectable(env, j_logging_, NativeToJavaString(env, msg),
NativeToJavaInteger(env, severity),
NativeToJavaString(env, tag));
}
void JNILogSink::OnLogMessage(const std::string& msg) {
RTC_DCHECK_NOTREACHED();
}
void JNILogSink::OnLogMessage(const std::string& msg,
rtc::LoggingSeverity severity,
const char* tag) {
OnLogMessage(absl::string_view{msg}, severity, tag);
}
void JNILogSink::OnLogMessage(absl::string_view msg,
rtc::LoggingSeverity severity,
const char* tag) {
JNIEnv* env = AttachCurrentThreadIfNeeded();
Java_JNILogging_logToInjectable(
env, j_logging_, NativeToJavaString(env, std::string(msg)),
NativeToJavaInteger(env, severity), NativeToJavaString(env, tag));
}
} // namespace jni
} // namespace webrtc

View file

@ -12,6 +12,7 @@
#include <string>
#include "absl/strings/string_view.h"
#include "rtc_base/logging.h"
#include "sdk/android/native_api/jni/java_types.h"
#include "sdk/android/src/jni/jni_helpers.h"
@ -24,10 +25,13 @@ class JNILogSink : public rtc::LogSink {
JNILogSink(JNIEnv* env, const JavaRef<jobject>& j_logging);
~JNILogSink() override;
void OnLogMessage(const std::string& msg) override;
void OnLogMessage(const std::string& msg,
rtc::LoggingSeverity severity,
const char* tag) override;
void OnLogMessage(const std::string& msg) override;
void OnLogMessage(absl::string_view msg,
rtc::LoggingSeverity severity,
const char* tag) override;
private:
const ScopedJavaGlobalRef<jobject> j_logging_;

View file

@ -10,8 +10,11 @@
#import "RTCCallbackLogger.h"
#import "helpers/NSString+StdString.h"
#include <memory>
#include "absl/strings/string_view.h"
#include "rtc_base/checks.h"
#include "rtc_base/log_sinks.h"
#include "rtc_base/logging.h"
@ -21,9 +24,13 @@ class CallbackLogSink : public rtc::LogSink {
CallbackLogSink(RTCCallbackLoggerMessageHandler callbackHandler)
: callback_handler_(callbackHandler) {}
void OnLogMessage(const std::string &message) override {
void OnLogMessage(const std::string& message) override {
OnLogMessage(absl::string_view(message));
}
void OnLogMessage(absl::string_view message) override {
if (callback_handler_) {
callback_handler_([NSString stringWithUTF8String:message.c_str()]);
callback_handler_([NSString stringForAbslStringView:message]);
}
}
@ -38,10 +45,10 @@ class CallbackWithSeverityLogSink : public rtc::LogSink {
void OnLogMessage(const std::string& message) override { RTC_DCHECK_NOTREACHED(); }
void OnLogMessage(const std::string& message, rtc::LoggingSeverity severity) override {
void OnLogMessage(absl::string_view message, rtc::LoggingSeverity severity) override {
if (callback_handler_) {
RTCLoggingSeverity loggingSeverity = NativeSeverityToObjcSeverity(severity);
callback_handler_([NSString stringWithUTF8String:message.c_str()], loggingSeverity);
callback_handler_([NSString stringForAbslStringView:message], loggingSeverity);
}
}

View file

@ -12,6 +12,8 @@
#include <string>
#include "absl/strings/string_view.h"
NS_ASSUME_NONNULL_BEGIN
@interface NSString (StdString)
@ -23,4 +25,10 @@ NS_ASSUME_NONNULL_BEGIN
@end
@interface NSString (AbslStringView)
+ (NSString *)stringForAbslStringView:(const absl::string_view)abslStringView;
@end
NS_ASSUME_NONNULL_END

View file

@ -10,6 +10,8 @@
#import "NSString+StdString.h"
#include "absl/strings/string_view.h"
@implementation NSString (StdString)
- (std::string)stdString {
@ -31,3 +33,13 @@
}
@end
@implementation NSString (AbslStringView)
+ (NSString *)stringForAbslStringView:(const absl::string_view)abslStringView {
return [[NSString alloc] initWithBytes:abslStringView.data()
length:abslStringView.length()
encoding:NSUTF8StringEncoding];
}
@end