Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: base/logging_win.cc

Issue 2042003: Switch some Singletons to use LeakySingleton. Base URL: http://src.chromium.org/git/chromium.git
Patch Set: More build fixes. Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/linux_util.cc ('k') | base/singleton.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "base/logging_win.h" 5 #include "base/logging_win.h"
6 #include "base/atomicops.h" 6 #include "base/atomicops.h"
7 #include "base/singleton.h" 7 #include "base/singleton.h"
8 #include <initguid.h> // NOLINT 8 #include <initguid.h> // NOLINT
9 9
10 namespace { 10 namespace {
(...skipping 23 matching lines...) Expand all
34 sizeof(intptr_t) - 1) / sizeof(intptr_t); 34 sizeof(intptr_t) - 1) / sizeof(intptr_t);
35 static intptr_t buffer_[kBufferSize]; 35 static intptr_t buffer_[kBufferSize];
36 36
37 // Signal the object was already deleted, so it is not revived. 37 // Signal the object was already deleted, so it is not revived.
38 static base::subtle::Atomic32 dead_; 38 static base::subtle::Atomic32 dead_;
39 }; 39 };
40 40
41 intptr_t LogEventProviderTraits::buffer_[kBufferSize]; 41 intptr_t LogEventProviderTraits::buffer_[kBufferSize];
42 base::subtle::Atomic32 LogEventProviderTraits::dead_ = 0; 42 base::subtle::Atomic32 LogEventProviderTraits::dead_ = 0;
43 43
44 Singleton<logging::LogEventProvider, LogEventProviderTraits> log_provider;
45
46 } // namespace 44 } // namespace
47 45
48 namespace logging { 46 namespace logging {
49 47
48 typedef Singleton<LogEventProvider, LogEventProviderTraits>
49 LogEventProviderSingleton;
50
50 DEFINE_GUID(kLogEventId, 51 DEFINE_GUID(kLogEventId,
51 0x7fe69228, 0x633e, 0x4f06, 0x80, 0xc1, 0x52, 0x7f, 0xea, 0x23, 0xe3, 0xa7); 52 0x7fe69228, 0x633e, 0x4f06, 0x80, 0xc1, 0x52, 0x7f, 0xea, 0x23, 0xe3, 0xa7);
52 53
53 LogEventProvider::LogEventProvider() : old_log_level_(LOG_NONE) { 54 LogEventProvider::LogEventProvider() : old_log_level_(LOG_NONE) {
54 } 55 }
55 56
56 bool LogEventProvider::LogMessage(int severity, const std::string& message) { 57 bool LogEventProvider::LogMessage(int severity, const std::string& message) {
57 EtwEventLevel level = TRACE_LEVEL_NONE; 58 EtwEventLevel level = TRACE_LEVEL_NONE;
58 59
59 // Convert the log severity to the most appropriate ETW trace level. 60 // Convert the log severity to the most appropriate ETW trace level.
60 switch (severity) { 61 switch (severity) {
61 case LOG_INFO: 62 case LOG_INFO:
62 level = TRACE_LEVEL_INFORMATION; 63 level = TRACE_LEVEL_INFORMATION;
63 break; 64 break;
64 case LOG_WARNING: 65 case LOG_WARNING:
65 level = TRACE_LEVEL_WARNING; 66 level = TRACE_LEVEL_WARNING;
66 break; 67 break;
67 case LOG_ERROR: 68 case LOG_ERROR:
68 case LOG_ERROR_REPORT: 69 case LOG_ERROR_REPORT:
69 level = TRACE_LEVEL_ERROR; 70 level = TRACE_LEVEL_ERROR;
70 break; 71 break;
71 case LOG_FATAL: 72 case LOG_FATAL:
72 level = TRACE_LEVEL_FATAL; 73 level = TRACE_LEVEL_FATAL;
73 break; 74 break;
74 }; 75 };
75 76
76 // Bail if we're not logging, not at that level, 77 // Bail if we're not logging, not at that level,
77 // or if we're post-atexit handling. 78 // or if we're post-atexit handling.
78 LogEventProvider* provider = log_provider.get(); 79 LogEventProvider* provider = LogEventProviderSingleton::get();
79 if (provider == NULL || level > provider->enable_level()) 80 if (provider == NULL || level > provider->enable_level())
80 return false; 81 return false;
81 82
82 // And now log the event, with stack trace if one is 83 // And now log the event, with stack trace if one is
83 // requested per our enable flags. 84 // requested per our enable flags.
84 if (provider->enable_flags() & ENABLE_STACK_TRACE_CAPTURE) { 85 if (provider->enable_flags() & ENABLE_STACK_TRACE_CAPTURE) {
85 const size_t kMaxBacktraceDepth = 32; 86 const size_t kMaxBacktraceDepth = 32;
86 void* backtrace[kMaxBacktraceDepth]; 87 void* backtrace[kMaxBacktraceDepth];
87 DWORD depth = CaptureStackBackTrace(2, kMaxBacktraceDepth, backtrace, NULL); 88 DWORD depth = CaptureStackBackTrace(2, kMaxBacktraceDepth, backtrace, NULL);
88 EtwMofEvent<3> event(kLogEventId, LOG_MESSAGE_WITH_STACKTRACE, level); 89 EtwMofEvent<3> event(kLogEventId, LOG_MESSAGE_WITH_STACKTRACE, level);
(...skipping 10 matching lines...) Expand all
99 } 100 }
100 101
101 // Don't increase verbosity in other log destinations. 102 // Don't increase verbosity in other log destinations.
102 if (severity >= provider->old_log_level_) 103 if (severity >= provider->old_log_level_)
103 return true; 104 return true;
104 105
105 return false; 106 return false;
106 } 107 }
107 108
108 void LogEventProvider::Initialize(const GUID& provider_name) { 109 void LogEventProvider::Initialize(const GUID& provider_name) {
109 LogEventProvider* provider = log_provider.get(); 110 LogEventProvider* provider = LogEventProviderSingleton::get();
110 111
111 provider->set_provider_name(provider_name); 112 provider->set_provider_name(provider_name);
112 provider->Register(); 113 provider->Register();
113 114
114 // Register our message handler with logging. 115 // Register our message handler with logging.
115 SetLogMessageHandler(LogMessage); 116 SetLogMessageHandler(LogMessage);
116 } 117 }
117 118
118 void LogEventProvider::Uninitialize() { 119 void LogEventProvider::Uninitialize() {
119 log_provider.get()->Unregister(); 120 LogEventProviderSingleton::get()->Unregister();
120 } 121 }
121 122
122 void LogEventProvider::OnEventsEnabled() { 123 void LogEventProvider::OnEventsEnabled() {
123 // Grab the old log level so we can restore it later. 124 // Grab the old log level so we can restore it later.
124 old_log_level_ = GetMinLogLevel(); 125 old_log_level_ = GetMinLogLevel();
125 126
126 // Convert the new trace level to a logging severity 127 // Convert the new trace level to a logging severity
127 // and enable logging at that level. 128 // and enable logging at that level.
128 EtwEventLevel level = enable_level(); 129 EtwEventLevel level = enable_level();
129 switch (level) { 130 switch (level) {
(...skipping 13 matching lines...) Expand all
143 break; 144 break;
144 } 145 }
145 } 146 }
146 147
147 void LogEventProvider::OnEventsDisabled() { 148 void LogEventProvider::OnEventsDisabled() {
148 // Restore the old log level. 149 // Restore the old log level.
149 SetMinLogLevel(old_log_level_); 150 SetMinLogLevel(old_log_level_);
150 } 151 }
151 152
152 } // namespace logging 153 } // namespace logging
OLDNEW
« no previous file with comments | « base/linux_util.cc ('k') | base/singleton.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698