OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "third_party/libjingle/overrides/talk/base/logging.h" | 5 #include "third_party/libjingle/overrides/talk/base/logging.h" |
6 | 6 |
7 #if defined(OS_MACOSX) && !defined(OS_IOS) | 7 #if defined(OS_MACOSX) && !defined(OS_IOS) |
8 #include <CoreServices/CoreServices.h> | 8 #include <CoreServices/CoreServices.h> |
9 #endif // OS_MACOSX | 9 #endif // OS_MACOSX |
10 | 10 |
11 #include <iomanip> | 11 #include <iomanip> |
12 | 12 |
13 #include "base/atomicops.h" | 13 #include "base/atomicops.h" |
14 #include "base/string_util.h" | 14 #include "base/string_util.h" |
15 #include "base/threading/platform_thread.h" | 15 #include "base/threading/platform_thread.h" |
16 #include "third_party/libjingle/overrides/logging/log_message_delegate.h" | |
17 #include "third_party/libjingle/source/talk/base/stream.h" | 16 #include "third_party/libjingle/source/talk/base/stream.h" |
18 #include "third_party/libjingle/source/talk/base/stringencode.h" | 17 #include "third_party/libjingle/source/talk/base/stringencode.h" |
19 #include "third_party/libjingle/source/talk/base/stringutils.h" | 18 #include "third_party/libjingle/source/talk/base/stringutils.h" |
20 | 19 |
21 // From this file we can't use VLOG since it expands into usage of the __FILE__ | 20 // From this file we can't use VLOG since it expands into usage of the __FILE__ |
22 // macro (for correct filtering). The actual logging call from LOG_E is in | 21 // macro (for correct filtering). The actual logging call from LOG_E is in |
23 // ~LogEHelper, and from DIAGNOSTIC_LOG in ~DiagnosticLogMessage. Note that the | 22 // ~LogEHelper, and from DIAGNOSTIC_LOG in ~DiagnosticLogMessage. Note that the |
24 // second parameter to the LAZY_STREAM macro is true since the filter check has | 23 // second parameter to the LAZY_STREAM macro is true since the filter check has |
25 // already been done for LOG_E and DIAGNOSTIC_LOG. | 24 // already been done for LOG_E and DIAGNOSTIC_LOG. |
26 #define LOG_LAZY_STREAM_DIRECT(file_name, line_number, sev) \ | 25 #define LOG_LAZY_STREAM_DIRECT(file_name, line_number, sev) \ |
27 LAZY_STREAM(logging::LogMessage(file_name, line_number, \ | 26 LAZY_STREAM(logging::LogMessage(file_name, line_number, \ |
28 -sev).stream(), true) | 27 -sev).stream(), true) |
29 #define LOG_E_BASE LOG_LAZY_STREAM_DIRECT | 28 #define LOG_E_BASE LOG_LAZY_STREAM_DIRECT |
30 | 29 |
31 namespace talk_base { | 30 namespace talk_base { |
32 | 31 |
33 LogMessageDelegate* g_logging_delegate = NULL; | 32 void (*g_logging_delegate_function)(const std::string&) = NULL; |
34 #ifndef NDEBUG | 33 #ifndef NDEBUG |
35 COMPILE_ASSERT(sizeof(base::subtle::Atomic32) == sizeof(base::PlatformThreadId), | 34 COMPILE_ASSERT(sizeof(base::subtle::Atomic32) == sizeof(base::PlatformThreadId), |
36 atomic32_not_same_size_as_platformthreadid); | 35 atomic32_not_same_size_as_platformthreadid); |
37 base::subtle::Atomic32 g_init_logging_delegate_thread_id = 0; | 36 base::subtle::Atomic32 g_init_logging_delegate_thread_id = 0; |
38 #endif | 37 #endif |
39 | 38 |
40 ///////////////////////////////////////////////////////////////////////////// | 39 ///////////////////////////////////////////////////////////////////////////// |
41 // Constant Labels | 40 // Constant Labels |
42 ///////////////////////////////////////////////////////////////////////////// | 41 ///////////////////////////////////////////////////////////////////////////// |
43 | 42 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 : file_name_(file), | 143 : file_name_(file), |
145 line_(line), | 144 line_(line), |
146 severity_(severity), | 145 severity_(severity), |
147 log_to_chrome_(log_to_chrome) { | 146 log_to_chrome_(log_to_chrome) { |
148 } | 147 } |
149 | 148 |
150 DiagnosticLogMessage::~DiagnosticLogMessage() { | 149 DiagnosticLogMessage::~DiagnosticLogMessage() { |
151 const std::string& str = print_stream_.str(); | 150 const std::string& str = print_stream_.str(); |
152 if (log_to_chrome_) | 151 if (log_to_chrome_) |
153 LOG_LAZY_STREAM_DIRECT(file_name_, line_, severity_) << str; | 152 LOG_LAZY_STREAM_DIRECT(file_name_, line_, severity_) << str; |
154 if (g_logging_delegate && severity_ <= LS_INFO) | 153 if (g_logging_delegate_function && severity_ <= LS_INFO) |
155 g_logging_delegate->LogMessage(str); | 154 g_logging_delegate_function(str); |
156 } | 155 } |
157 | 156 |
158 // Note: this function is a copy from the overriden libjingle implementation. | 157 // Note: this function is a copy from the overriden libjingle implementation. |
159 void LogMultiline(LoggingSeverity level, const char* label, bool input, | 158 void LogMultiline(LoggingSeverity level, const char* label, bool input, |
160 const void* data, size_t len, bool hex_mode, | 159 const void* data, size_t len, bool hex_mode, |
161 LogMultilineState* state) { | 160 LogMultilineState* state) { |
162 if (!LOG_CHECK_LEVEL_V(level)) | 161 if (!LOG_CHECK_LEVEL_V(level)) |
163 return; | 162 return; |
164 | 163 |
165 const char * direction = (input ? " << " : " >> "); | 164 const char * direction = (input ? " << " : " >> "); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 } else { | 265 } else { |
267 LOG_V(level) << label << direction << "## omitted for privacy ##"; | 266 LOG_V(level) << label << direction << "## omitted for privacy ##"; |
268 } | 267 } |
269 } | 268 } |
270 | 269 |
271 if (state) { | 270 if (state) { |
272 state->unprintable_count_[input] = consecutive_unprintable; | 271 state->unprintable_count_[input] = consecutive_unprintable; |
273 } | 272 } |
274 } | 273 } |
275 | 274 |
276 void InitDiagnosticLoggingDelegate(LogMessageDelegate* delegate) { | 275 void InitDiagnosticLoggingDelegateFunction( |
| 276 void (*delegate)(const std::string&)) { |
277 #ifndef NDEBUG | 277 #ifndef NDEBUG |
278 // Ensure that this function is always called from the same thread. | 278 // Ensure that this function is always called from the same thread. |
279 base::subtle::NoBarrier_CompareAndSwap(&g_init_logging_delegate_thread_id, 0, | 279 base::subtle::NoBarrier_CompareAndSwap(&g_init_logging_delegate_thread_id, 0, |
280 static_cast<base::subtle::Atomic32>(base::PlatformThread::CurrentId())); | 280 static_cast<base::subtle::Atomic32>(base::PlatformThread::CurrentId())); |
281 DCHECK_EQ(g_init_logging_delegate_thread_id, | 281 DCHECK_EQ(g_init_logging_delegate_thread_id, |
282 base::PlatformThread::CurrentId()); | 282 base::PlatformThread::CurrentId()); |
283 #endif | 283 #endif |
284 CHECK(!g_logging_delegate); | 284 CHECK(!g_logging_delegate_function); |
285 CHECK(delegate); | 285 CHECK(delegate); |
286 g_logging_delegate = delegate; | 286 g_logging_delegate_function = delegate; |
287 } | 287 } |
288 | 288 |
289 } // namespace talk_base | 289 } // namespace talk_base |
OLD | NEW |