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

Side by Side Diff: third_party/protobuf/src/google/protobuf/stubs/common.cc

Issue 2756543002: Statically link libprotobuf_lite on Linux component builds (Closed)
Patch Set: Extract all global data to globals.cc Created 3 years, 9 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
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 // emulates google3/base/logging.cc 109 // emulates google3/base/logging.cc
110 110
111 namespace internal { 111 namespace internal {
112 #if defined(__ANDROID__) 112 #if defined(__ANDROID__)
113 inline void DefaultLogHandler(LogLevel level, const char* filename, int line, 113 inline void DefaultLogHandler(LogLevel level, const char* filename, int line,
114 const string& message) { 114 const string& message) {
115 #ifdef GOOGLE_PROTOBUF_MIN_LOG_LEVEL 115 #ifdef GOOGLE_PROTOBUF_MIN_LOG_LEVEL
116 if (level < GOOGLE_PROTOBUF_MIN_LOG_LEVEL) { 116 if (level < GOOGLE_PROTOBUF_MIN_LOG_LEVEL) {
117 return; 117 return;
118 } 118 }
119 static const char* level_names[] = {"INFO", "WARNING", "ERROR", "FATAL"}; 119 static const char* const level_names[] = {"INFO", "WARNING", "ERROR",
120 "FATAL"};
120 121
121 static const int android_log_levels[] = { 122 static const int android_log_levels[] = {
122 ANDROID_LOG_INFO, // LOG(INFO), 123 ANDROID_LOG_INFO, // LOG(INFO),
123 ANDROID_LOG_WARN, // LOG(WARNING) 124 ANDROID_LOG_WARN, // LOG(WARNING)
124 ANDROID_LOG_ERROR, // LOG(ERROR) 125 ANDROID_LOG_ERROR, // LOG(ERROR)
125 ANDROID_LOG_FATAL, // LOG(FATAL) 126 ANDROID_LOG_FATAL, // LOG(FATAL)
126 }; 127 };
127 128
128 // Bound the logging level. 129 // Bound the logging level.
129 const int android_log_level = android_log_levels[level]; 130 const int android_log_level = android_log_levels[level];
(...skipping 11 matching lines...) Expand all
141 // Indicate termination if needed. 142 // Indicate termination if needed.
142 if (android_log_level == ANDROID_LOG_FATAL) { 143 if (android_log_level == ANDROID_LOG_FATAL) {
143 __android_log_write(ANDROID_LOG_FATAL, "libprotobuf-native", 144 __android_log_write(ANDROID_LOG_FATAL, "libprotobuf-native",
144 "terminating.\n"); 145 "terminating.\n");
145 } 146 }
146 #endif 147 #endif
147 } 148 }
148 #else 149 #else
149 void DefaultLogHandler(LogLevel level, const char* filename, int line, 150 void DefaultLogHandler(LogLevel level, const char* filename, int line,
150 const string& message) { 151 const string& message) {
151 static const char* level_names[] = { "INFO", "WARNING", "ERROR", "FATAL" }; 152 static const char* const level_names[] = {"INFO", "WARNING", "ERROR",
153 "FATAL"};
152 154
153 // We use fprintf() instead of cerr because we want this to work at static 155 // We use fprintf() instead of cerr because we want this to work at static
154 // initialization time. 156 // initialization time.
155 fprintf(stderr, "[libprotobuf %s %s:%d] %s\n", 157 fprintf(stderr, "[libprotobuf %s %s:%d] %s\n",
156 level_names[level], filename, line, message.c_str()); 158 level_names[level], filename, line, message.c_str());
157 fflush(stderr); // Needed on MSVC. 159 fflush(stderr); // Needed on MSVC.
158 } 160 }
159 #endif 161 #endif
160 162
161 void NullLogHandler(LogLevel /* level */, const char* /* filename */, 163 void NullLogHandler(LogLevel /* level */, const char* /* filename */,
162 int /* line */, const string& /* message */) { 164 int /* line */, const string& /* message */) {
163 // Nothing. 165 // Nothing.
164 } 166 }
165 167
166 static LogHandler* log_handler_ = &DefaultLogHandler; 168 extern LogHandler* cr_log_handler_;
167 static int log_silencer_count_ = 0; 169 extern int cr_log_silencer_count_;
168 170
169 static Mutex* log_silencer_count_mutex_ = NULL; 171 extern Mutex* cr_log_silencer_count_mutex_;
170 GOOGLE_PROTOBUF_DECLARE_ONCE(log_silencer_count_init_); 172 extern ProtobufOnceType cr_log_silencer_count_init_;
171 173
172 void DeleteLogSilencerCount() { 174 void DeleteLogSilencerCount() {
173 delete log_silencer_count_mutex_; 175 delete cr_log_silencer_count_mutex_;
174 log_silencer_count_mutex_ = NULL; 176 cr_log_silencer_count_mutex_ = NULL;
175 } 177 }
176 void InitLogSilencerCount() { 178 void InitLogSilencerCount() {
177 log_silencer_count_mutex_ = new Mutex; 179 cr_log_silencer_count_mutex_ = new Mutex;
178 OnShutdown(&DeleteLogSilencerCount); 180 OnShutdown(&DeleteLogSilencerCount);
179 } 181 }
180 void InitLogSilencerCountOnce() { 182 void InitLogSilencerCountOnce() {
181 GoogleOnceInit(&log_silencer_count_init_, &InitLogSilencerCount); 183 GoogleOnceInit(&cr_log_silencer_count_init_, &InitLogSilencerCount);
182 } 184 }
183 185
184 LogMessage& LogMessage::operator<<(const string& value) { 186 LogMessage& LogMessage::operator<<(const string& value) {
185 message_ += value; 187 message_ += value;
186 return *this; 188 return *this;
187 } 189 }
188 190
189 LogMessage& LogMessage::operator<<(const char* value) { 191 LogMessage& LogMessage::operator<<(const char* value) {
190 message_ += value; 192 message_ += value;
191 return *this; 193 return *this;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 241
240 LogMessage::LogMessage(LogLevel level, const char* filename, int line) 242 LogMessage::LogMessage(LogLevel level, const char* filename, int line)
241 : level_(level), filename_(filename), line_(line) {} 243 : level_(level), filename_(filename), line_(line) {}
242 LogMessage::~LogMessage() {} 244 LogMessage::~LogMessage() {}
243 245
244 void LogMessage::Finish() { 246 void LogMessage::Finish() {
245 bool suppress = false; 247 bool suppress = false;
246 248
247 if (level_ != LOGLEVEL_FATAL) { 249 if (level_ != LOGLEVEL_FATAL) {
248 InitLogSilencerCountOnce(); 250 InitLogSilencerCountOnce();
249 MutexLock lock(log_silencer_count_mutex_); 251 MutexLock lock(cr_log_silencer_count_mutex_);
250 suppress = log_silencer_count_ > 0; 252 suppress = cr_log_silencer_count_ > 0;
251 } 253 }
252 254
253 if (!suppress) { 255 if (!suppress) {
254 log_handler_(level_, filename_, line_, message_); 256 (cr_log_handler_ ? cr_log_handler_ : DefaultLogHandler)(level_, filename_,
257 line_, message_);
255 } 258 }
256 259
257 if (level_ == LOGLEVEL_FATAL) { 260 if (level_ == LOGLEVEL_FATAL) {
258 #if PROTOBUF_USE_EXCEPTIONS 261 #if PROTOBUF_USE_EXCEPTIONS
259 throw FatalException(filename_, line_, message_); 262 throw FatalException(filename_, line_, message_);
260 #else 263 #else
261 abort(); 264 abort();
262 #endif 265 #endif
263 } 266 }
264 } 267 }
265 268
266 void LogFinisher::operator=(LogMessage& other) { 269 void LogFinisher::operator=(LogMessage& other) {
267 other.Finish(); 270 other.Finish();
268 } 271 }
269 272
270 } // namespace internal 273 } // namespace internal
271 274
272 LogHandler* SetLogHandler(LogHandler* new_func) { 275 LogHandler* SetLogHandler(LogHandler* new_func) {
273 LogHandler* old = internal::log_handler_; 276 LogHandler* old = internal::cr_log_handler_ ? internal::cr_log_handler_
277 : internal::DefaultLogHandler;
274 if (old == &internal::NullLogHandler) { 278 if (old == &internal::NullLogHandler) {
275 old = NULL; 279 old = NULL;
276 } 280 }
277 if (new_func == NULL) { 281 if (new_func == NULL) {
278 internal::log_handler_ = &internal::NullLogHandler; 282 internal::cr_log_handler_ = &internal::NullLogHandler;
279 } else { 283 } else {
280 internal::log_handler_ = new_func; 284 internal::cr_log_handler_ = new_func;
281 } 285 }
282 return old; 286 return old;
283 } 287 }
284 288
285 LogSilencer::LogSilencer() { 289 LogSilencer::LogSilencer() {
286 internal::InitLogSilencerCountOnce(); 290 internal::InitLogSilencerCountOnce();
287 MutexLock lock(internal::log_silencer_count_mutex_); 291 MutexLock lock(internal::cr_log_silencer_count_mutex_);
288 ++internal::log_silencer_count_; 292 ++internal::cr_log_silencer_count_;
289 }; 293 };
290 294
291 LogSilencer::~LogSilencer() { 295 LogSilencer::~LogSilencer() {
292 internal::InitLogSilencerCountOnce(); 296 internal::InitLogSilencerCountOnce();
293 MutexLock lock(internal::log_silencer_count_mutex_); 297 MutexLock lock(internal::cr_log_silencer_count_mutex_);
294 --internal::log_silencer_count_; 298 --internal::cr_log_silencer_count_;
295 }; 299 };
296 300
297 // =================================================================== 301 // ===================================================================
298 // emulates google3/base/callback.cc 302 // emulates google3/base/callback.cc
299 303
300 Closure::~Closure() {} 304 Closure::~Closure() {}
301 305
302 namespace internal { FunctionClosure0::~FunctionClosure0() {} } 306 namespace internal { FunctionClosure0::~FunctionClosure0() {} }
303 307
304 void DoNothing() {} 308 void DoNothing() {}
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 result_array[3] = static_cast<uint8>(x & 0xFF); 404 result_array[3] = static_cast<uint8>(x & 0xFF);
401 return result; 405 return result;
402 } 406 }
403 407
404 // =================================================================== 408 // ===================================================================
405 // Shutdown support. 409 // Shutdown support.
406 410
407 namespace internal { 411 namespace internal {
408 412
409 typedef void OnShutdownFunc(); 413 typedef void OnShutdownFunc();
410 vector<void (*)()>* shutdown_functions = NULL; 414 extern vector<void (*)()>* cr_shutdown_functions;
411 Mutex* shutdown_functions_mutex = NULL; 415 extern Mutex* cr_shutdown_functions_mutex;
412 GOOGLE_PROTOBUF_DECLARE_ONCE(shutdown_functions_init); 416 extern ProtobufOnceType cr_shutdown_functions_init;
413 417
414 void InitShutdownFunctions() { 418 void InitShutdownFunctions() {
415 shutdown_functions = new vector<void (*)()>; 419 cr_shutdown_functions = new vector<void (*)()>;
416 shutdown_functions_mutex = new Mutex; 420 cr_shutdown_functions_mutex = new Mutex;
417 } 421 }
418 422
419 inline void InitShutdownFunctionsOnce() { 423 inline void InitShutdownFunctionsOnce() {
420 GoogleOnceInit(&shutdown_functions_init, &InitShutdownFunctions); 424 GoogleOnceInit(&cr_shutdown_functions_init, &InitShutdownFunctions);
421 } 425 }
422 426
423 void OnShutdown(void (*func)()) { 427 void OnShutdown(void (*func)()) {
424 InitShutdownFunctionsOnce(); 428 InitShutdownFunctionsOnce();
425 MutexLock lock(shutdown_functions_mutex); 429 MutexLock lock(cr_shutdown_functions_mutex);
426 shutdown_functions->push_back(func); 430 cr_shutdown_functions->push_back(func);
427 } 431 }
428 432
429 } // namespace internal 433 } // namespace internal
430 434
431 void ShutdownProtobufLibrary() { 435 void ShutdownProtobufLibrary() {
432 internal::InitShutdownFunctionsOnce(); 436 internal::InitShutdownFunctionsOnce();
433 437
434 // We don't need to lock shutdown_functions_mutex because it's up to the 438 // We don't need to lock cr_shutdown_functions_mutex because it's up to the
435 // caller to make sure that no one is using the library before this is 439 // caller to make sure that no one is using the library before this is
436 // called. 440 // called.
437 441
438 // Make it safe to call this multiple times. 442 // Make it safe to call this multiple times.
439 if (internal::shutdown_functions == NULL) return; 443 if (internal::cr_shutdown_functions == NULL) return;
440 444
441 for (int i = 0; i < internal::shutdown_functions->size(); i++) { 445 for (int i = 0; i < internal::cr_shutdown_functions->size(); i++) {
442 internal::shutdown_functions->at(i)(); 446 internal::cr_shutdown_functions->at(i)();
443 } 447 }
444 delete internal::shutdown_functions; 448 delete internal::cr_shutdown_functions;
445 internal::shutdown_functions = NULL; 449 internal::cr_shutdown_functions = NULL;
446 delete internal::shutdown_functions_mutex; 450 delete internal::cr_shutdown_functions_mutex;
447 internal::shutdown_functions_mutex = NULL; 451 internal::cr_shutdown_functions_mutex = NULL;
448 } 452 }
449 453
450 #if PROTOBUF_USE_EXCEPTIONS 454 #if PROTOBUF_USE_EXCEPTIONS
451 FatalException::~FatalException() throw() {} 455 FatalException::~FatalException() throw() {}
452 456
453 const char* FatalException::what() const throw() { 457 const char* FatalException::what() const throw() {
454 return message_.c_str(); 458 return message_.c_str();
455 } 459 }
456 #endif 460 #endif
457 461
458 } // namespace protobuf 462 } // namespace protobuf
459 } // namespace google 463 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698