Internal change

PiperOrigin-RevId: 502709070
This commit is contained in:
Camillo Lugaresi 2023-01-17 15:45:15 -08:00 committed by Copybara-Service
parent 088249eb36
commit 7894c92ab7
2 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,50 @@
#include "mediapipe/util/log_fatal_to_breakpad.h"
#import <Foundation/Foundation.h>
#include "absl/log/log.h"
#include "absl/log/log_sink.h"
#include "absl/log/log_sink_registry.h"
#import "googlemac/iPhone/Shared/GoogleIOSBreakpad/Classes/GoogleBreakpadController.h"
namespace mediapipe {
namespace {
NSString* MakeNSString(absl::string_view str) {
return [[NSString alloc] initWithBytes:str.data()
length:str.length()
encoding:NSUTF8StringEncoding];
}
} // namespace
static NSString* const kFatalLogMessageKey = @"fatal_log_message";
class BreakpadFatalLogSink : public absl::LogSink {
public:
BreakpadFatalLogSink()
: breakpad_controller_([GoogleBreakpadController sharedInstance]) {}
void Send(const absl::LogEntry& entry) override {
if (entry.log_severity() != absl::LogSeverity::kFatal) return;
__block NSString* message = MakeNSString(entry.text_message_with_prefix());
[breakpad_controller_ withBreakpadRef:^(BreakpadRef breakpad) {
// NOTE: This block runs on Breakpad's background queue.
if (!breakpad) return;
BreakpadAddUploadParameter(breakpad, kFatalLogMessageKey, message);
}];
}
private:
GoogleBreakpadController* breakpad_controller_;
};
absl::LogSink* GetBreakpadFatalLogSink() {
static BreakpadFatalLogSink sink;
return &sink;
}
// This log sink is automatically enabled when including this library.
static const auto kRegisterLogSink = [] {
absl::AddLogSink(GetBreakpadFatalLogSink());
return true;
}();
} // namespace mediapipe

View File

@ -0,0 +1,15 @@
#ifndef MEDIAPIPE_UTIL_LOG_FATAL_TO_BREAKPAD_H_
#define MEDIAPIPE_UTIL_LOG_FATAL_TO_BREAKPAD_H_
#include "absl/log/log_sink.h"
namespace mediapipe {
// Returns a singleton instance of a log sink that sends FATAL log messages to
// Breakpad. This log sink is enabled by default when this library is included
// in your binary.
absl::LogSink* GetBreakpadFatalLogSink();
} // namespace mediapipe
#endif // MEDIAPIPE_UTIL_LOG_FATAL_TO_BREAKPAD_H_