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

Side by Side Diff: base/test/mock_log.cc

Issue 2497833002: support multiple log message handlers in base/logging.h (Closed)
Patch Set: Created 4 years, 1 month 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/test/mock_log.h ('k') | base/trace_event/trace_event_unittest.cc » ('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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/test/mock_log.h" 5 #include "base/test/mock_log.h"
6 6
7 namespace base { 7 namespace base {
8 namespace test { 8 namespace test {
9 9
10 // static 10 // static
(...skipping 13 matching lines...) Expand all
24 AutoLock scoped_lock(g_lock); 24 AutoLock scoped_lock(g_lock);
25 25
26 // We don't use CHECK(), which can generate a new LOG message, and 26 // We don't use CHECK(), which can generate a new LOG message, and
27 // thus can confuse MockLog objects or other registered 27 // thus can confuse MockLog objects or other registered
28 // LogSinks. 28 // LogSinks.
29 RAW_CHECK(!is_capturing_logs_); 29 RAW_CHECK(!is_capturing_logs_);
30 RAW_CHECK(!g_instance_); 30 RAW_CHECK(!g_instance_);
31 31
32 is_capturing_logs_ = true; 32 is_capturing_logs_ = true;
33 g_instance_ = this; 33 g_instance_ = this;
34 previous_handler_ = logging::GetLogMessageHandler(); 34 logging::AddLogMessageHandler(LogMessageHandler);
35 logging::SetLogMessageHandler(LogMessageHandler);
36 } 35 }
37 36
38 void MockLog::StopCapturingLogs() { 37 void MockLog::StopCapturingLogs() {
39 AutoLock scoped_lock(g_lock); 38 AutoLock scoped_lock(g_lock);
40 39
41 // We don't use CHECK(), which can generate a new LOG message, and 40 // We don't use CHECK(), which can generate a new LOG message, and
42 // thus can confuse MockLog objects or other registered 41 // thus can confuse MockLog objects or other registered
43 // LogSinks. 42 // LogSinks.
44 RAW_CHECK(is_capturing_logs_); 43 RAW_CHECK(is_capturing_logs_);
45 RAW_CHECK(g_instance_ == this); 44 RAW_CHECK(g_instance_ == this);
46 45
47 is_capturing_logs_ = false; 46 is_capturing_logs_ = false;
48 logging::SetLogMessageHandler(previous_handler_); 47 logging::RemoveLogMessageHandler(LogMessageHandler);
49 g_instance_ = nullptr; 48 g_instance_ = nullptr;
50 } 49 }
51 50
52 // static 51 // static
53 bool MockLog::LogMessageHandler(int severity, 52 bool MockLog::LogMessageHandler(int severity,
54 const char* file, 53 const std::string& file,
55 int line, 54 int line,
56 size_t message_start,
57 const std::string& str) { 55 const std::string& str) {
58 // gMock guarantees thread-safety for calling a mocked method 56 // gMock guarantees thread-safety for calling a mocked method
59 // (https://github.com/google/googlemock/blob/master/googlemock/docs/CookBook. md#using-google-mock-and-threads) 57 // (https://github.com/google/googlemock/blob/master/googlemock/docs/CookBook. md#using-google-mock-and-threads)
60 // but we also need to make sure that Start/StopCapturingLogs are synchronized 58 // but we also need to make sure that Start/StopCapturingLogs are synchronized
61 // with LogMessageHandler. 59 // with LogMessageHandler.
62 AutoLock scoped_lock(g_lock); 60 AutoLock scoped_lock(g_lock);
63 61
64 return g_instance_->Log(severity, file, line, message_start, str); 62 return g_instance_->Log(severity, file, line, str);
65 } 63 }
66 64
67 } // namespace test 65 } // namespace test
68 } // namespace base 66 } // namespace base
OLDNEW
« no previous file with comments | « base/test/mock_log.h ('k') | base/trace_event/trace_event_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698