| Index: third_party/webrtc_overrides/webrtc/base/diagnostic_logging.h
|
| diff --git a/third_party/webrtc_overrides/webrtc/base/diagnostic_logging.h b/third_party/webrtc_overrides/webrtc/base/diagnostic_logging.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fd33374259a05d384eec873ba24daa7386c2b862
|
| --- /dev/null
|
| +++ b/third_party/webrtc_overrides/webrtc/base/diagnostic_logging.h
|
| @@ -0,0 +1,152 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef THIRD_PARTY_WEBRTC_OVERRIDES_WEBRTC_BASE_DIAGNOSTIC_LOGGING_H_
|
| +#define THIRD_PARTY_WEBRTC_OVERRIDES_WEBRTC_BASE_DIAGNOSTIC_LOGGING_H_
|
| +
|
| +#include <sstream>
|
| +#include <string>
|
| +
|
| +#include "third_party/webrtc/base/checks.h"
|
| +#include "third_party/webrtc/base/scoped_ref_ptr.h"
|
| +
|
| +namespace rtc {
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +// ConstantLabel can be used to easily generate string names from constant
|
| +// values. This can be useful for logging descriptive names of error messages.
|
| +// Usage:
|
| +// const ConstantLabel LIBRARY_ERRORS[] = {
|
| +// KLABEL(SOME_ERROR),
|
| +// KLABEL(SOME_OTHER_ERROR),
|
| +// ...
|
| +// LASTLABEL
|
| +// }
|
| +//
|
| +// int err = LibraryFunc();
|
| +// LOG(LS_ERROR) << "LibraryFunc returned: "
|
| +// << ErrorName(err, LIBRARY_ERRORS);
|
| +
|
| +struct ConstantLabel {
|
| + int value;
|
| + const char* label;
|
| +};
|
| +#define KLABEL(x) { x, #x }
|
| +#define LASTLABEL { 0, 0 }
|
| +
|
| +const char* FindLabel(int value, const ConstantLabel entries[]);
|
| +std::string ErrorName(int err, const ConstantLabel* err_table);
|
| +
|
| +//////////////////////////////////////////////////////////////////////
|
| +// Note that the non-standard LoggingSeverity aliases exist because they are
|
| +// still in broad use. The meanings of the levels are:
|
| +// LS_SENSITIVE: Information which should only be logged with the consent
|
| +// of the user, due to privacy concerns.
|
| +// LS_VERBOSE: This level is for data which we do not want to appear in the
|
| +// normal debug log, but should appear in diagnostic logs.
|
| +// LS_INFO: Chatty level used in debugging for all sorts of things, the default
|
| +// in debug builds.
|
| +// LS_WARNING: Something that may warrant investigation.
|
| +// LS_ERROR: Something that should not have occurred.
|
| +// Note that LoggingSeverity is mapped over to chromiums verbosity levels where
|
| +// anything lower than or equal to the current verbosity level is written to
|
| +// file which is the opposite of logging severity in libjingle where higher
|
| +// severity numbers than or equal to the current severity level are written to
|
| +// file. Also, note that the values are explicitly defined here for convenience
|
| +// since the command line flag must be set using numerical values.
|
| +// TODO(tommi): To keep things simple, we should just use the same values for
|
| +// these constants as Chrome does.
|
| +enum LoggingSeverity { LS_ERROR = 1,
|
| + LS_WARNING = 2,
|
| + LS_INFO = 3,
|
| + LS_VERBOSE = 4,
|
| + LS_SENSITIVE = 5,
|
| + INFO = LS_INFO,
|
| + WARNING = LS_WARNING,
|
| + LERROR = LS_ERROR };
|
| +
|
| +// LogErrorContext assists in interpreting the meaning of an error value.
|
| +enum LogErrorContext {
|
| + ERRCTX_NONE,
|
| + ERRCTX_ERRNO, // System-local errno
|
| + ERRCTX_HRESULT, // Windows HRESULT
|
| + ERRCTX_OSSTATUS, // MacOS OSStatus
|
| +
|
| + // Abbreviations for LOG_E macro
|
| + ERRCTX_EN = ERRCTX_ERRNO, // LOG_E(sev, EN, x)
|
| + ERRCTX_HR = ERRCTX_HRESULT, // LOG_E(sev, HR, x)
|
| + ERRCTX_OS = ERRCTX_OSSTATUS, // LOG_E(sev, OS, x)
|
| +};
|
| +
|
| +// Class that writes a log message to the logging delegate ("WebRTC logging
|
| +// stream" in Chrome) and to Chrome's logging stream.
|
| +class DiagnosticLogMessage {
|
| + public:
|
| + DiagnosticLogMessage(const char* file, int line, LoggingSeverity severity,
|
| + LogErrorContext err_ctx, int err);
|
| + DiagnosticLogMessage(const char* file, int line, LoggingSeverity severity,
|
| + LogErrorContext err_ctx, int err, const char* module);
|
| + ~DiagnosticLogMessage();
|
| +
|
| + void CreateTimestamp();
|
| +
|
| + std::ostream& stream() { return print_stream_; }
|
| +
|
| + private:
|
| + const char* file_name_;
|
| + const int line_;
|
| + const LoggingSeverity severity_;
|
| + const bool log_to_chrome_;
|
| +
|
| + std::string extra_;
|
| +
|
| + std::ostringstream print_stream_;
|
| +};
|
| +
|
| +// This class is used to explicitly ignore values in the conditional
|
| +// logging macros. This avoids compiler warnings like "value computed
|
| +// is not used" and "statement has no effect".
|
| +class LogMessageVoidify {
|
| + public:
|
| + LogMessageVoidify() { }
|
| + // This has to be an operator with a precedence lower than << but
|
| + // higher than ?:
|
| + void operator&(std::ostream&) { }
|
| +};
|
| +
|
| +//////////////////////////////////////////////////////////////////////
|
| +// Logging Helpers
|
| +//////////////////////////////////////////////////////////////////////
|
| +
|
| +class LogMultilineState {
|
| + public:
|
| + size_t unprintable_count_[2];
|
| + LogMultilineState() {
|
| + unprintable_count_[0] = unprintable_count_[1] = 0;
|
| + }
|
| +};
|
| +
|
| +class LogMessage {
|
| + public:
|
| + static void LogToDebug(int min_sev);
|
| +};
|
| +
|
| +// When possible, pass optional state variable to track various data across
|
| +// multiple calls to LogMultiline. Otherwise, pass NULL.
|
| +void LogMultiline(LoggingSeverity level, const char* label, bool input,
|
| + const void* data, size_t len, bool hex_mode,
|
| + LogMultilineState* state);
|
| +
|
| +// TODO(grunell): Change name to InitDiagnosticLoggingDelegate or
|
| +// InitDiagnosticLogging. Change also in init_webrtc.h/cc.
|
| +// TODO(grunell): typedef the delegate function.
|
| +void InitDiagnosticLoggingDelegateFunction(
|
| + void (*delegate)(const std::string&));
|
| +
|
| +void SetExtraLoggingInit(
|
| + void (*function)(void (*delegate)(const std::string&)));
|
| +
|
| +} // namespace rtc
|
| +
|
| +#endif // THIRD_PARTY_WEBRTC_OVERRIDES_WEBRTC_BASE_DIAGNOSTIC_LOGGING_H_
|
|
|