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 "chrome/test/chromedriver/logging.h" | 5 #include "chrome/test/chromedriver/logging.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 #include <list> | |
8 | 9 |
9 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
10 #include "base/command_line.h" | 11 #include "base/command_line.h" |
11 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
12 #include "base/logging.h" | 13 #include "base/logging.h" |
13 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
14 #include "base/time/time.h" | 15 #include "base/time/time.h" |
15 #include "chrome/test/chromedriver/capabilities.h" | 16 #include "chrome/test/chromedriver/capabilities.h" |
16 #include "chrome/test/chromedriver/chrome/console_logger.h" | 17 #include "chrome/test/chromedriver/chrome/console_logger.h" |
17 #include "chrome/test/chromedriver/chrome/performance_logger.h" | |
18 #include "chrome/test/chromedriver/chrome/status.h" | 18 #include "chrome/test/chromedriver/chrome/status.h" |
19 #include "chrome/test/chromedriver/command_listener_proxy.h" | |
20 #include "chrome/test/chromedriver/performance_logger.h" | |
19 #include "chrome/test/chromedriver/session.h" | 21 #include "chrome/test/chromedriver/session.h" |
20 | 22 |
21 #if defined(OS_POSIX) | 23 #if defined(OS_POSIX) |
22 #include <fcntl.h> | 24 #include <fcntl.h> |
23 #include <unistd.h> | 25 #include <unistd.h> |
24 #endif | 26 #endif |
25 | 27 |
26 | 28 |
27 namespace { | 29 namespace { |
28 | 30 |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 false); // enable_tickcount | 234 false); // enable_tickcount |
233 logging::SetLogMessageHandler(&HandleLogMessage); | 235 logging::SetLogMessageHandler(&HandleLogMessage); |
234 | 236 |
235 logging::LoggingSettings logging_settings; | 237 logging::LoggingSettings logging_settings; |
236 logging_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; | 238 logging_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; |
237 return logging::InitLogging(logging_settings); | 239 return logging::InitLogging(logging_settings); |
238 } | 240 } |
239 | 241 |
240 Status CreateLogs(const Capabilities& capabilities, | 242 Status CreateLogs(const Capabilities& capabilities, |
241 ScopedVector<WebDriverLog>* out_logs, | 243 ScopedVector<WebDriverLog>* out_logs, |
242 ScopedVector<DevToolsEventListener>* out_listeners) { | 244 ScopedVector<DevToolsEventListener>* out_devtools_listeners, |
245 std::list<CommandListener*>* out_command_listeners) { | |
243 ScopedVector<WebDriverLog> logs; | 246 ScopedVector<WebDriverLog> logs; |
244 ScopedVector<DevToolsEventListener> listeners; | 247 ScopedVector<DevToolsEventListener> devtools_listeners; |
245 Log::Level browser_log_level = Log::kWarning; | 248 Log::Level browser_log_level = Log::kWarning; |
246 const LoggingPrefs& prefs = capabilities.logging_prefs; | 249 const LoggingPrefs& prefs = capabilities.logging_prefs; |
247 | 250 |
248 for (LoggingPrefs::const_iterator iter = prefs.begin(); | 251 for (LoggingPrefs::const_iterator iter = prefs.begin(); |
249 iter != prefs.end(); | 252 iter != prefs.end(); |
250 ++iter) { | 253 ++iter) { |
251 std::string type = iter->first; | 254 std::string type = iter->first; |
252 Log::Level level = iter->second; | 255 Log::Level level = iter->second; |
253 if (type == WebDriverLog::kPerformanceType) { | 256 if (type == WebDriverLog::kPerformanceType) { |
254 if (level != Log::kOff) { | 257 if (level != Log::kOff) { |
255 WebDriverLog* log = new WebDriverLog(type, Log::kAll); | 258 WebDriverLog* log = new WebDriverLog(type, Log::kAll); |
256 logs.push_back(log); | 259 logs.push_back(log); |
257 listeners.push_back(new PerformanceLogger(log)); | 260 PerformanceLogger* perf_log = new PerformanceLogger(log); |
261 // We use a proxy for perf_log's CommandListener interface. | |
262 // session->chrome will own perf_log, and session will own proxy. | |
stgao
2014/06/27 16:48:24
The proxy is a good idea.
Nice work!
| |
263 // session->command_listeners (the proxy) will be destroyed first. | |
stgao
2014/06/27 16:48:24
Why it is destroyed first? What happens if it is n
johnmoore
2014/06/27 21:58:03
In session.h, |command_listeners| is declared afte
| |
264 CommandListenerProxy* proxy = new CommandListenerProxy(perf_log); | |
265 devtools_listeners.push_back(perf_log); | |
266 out_command_listeners->push_back(proxy); | |
258 } | 267 } |
259 } else if (type == WebDriverLog::kBrowserType) { | 268 } else if (type == WebDriverLog::kBrowserType) { |
260 browser_log_level = level; | 269 browser_log_level = level; |
261 } else if (type != WebDriverLog::kDriverType) { | 270 } else if (type != WebDriverLog::kDriverType) { |
262 // Driver "should" ignore unrecognized log types, per Selenium tests. | 271 // Driver "should" ignore unrecognized log types, per Selenium tests. |
263 // For example the Java client passes the "client" log type in the caps, | 272 // For example the Java client passes the "client" log type in the caps, |
264 // which the server should never provide. | 273 // which the server should never provide. |
265 LOG(WARNING) << "Ignoring unrecognized log type: " << type; | 274 LOG(WARNING) << "Ignoring unrecognized log type: " << type; |
266 } | 275 } |
267 } | 276 } |
268 // Create "browser" log -- should always exist. | 277 // Create "browser" log -- should always exist. |
269 WebDriverLog* browser_log = | 278 WebDriverLog* browser_log = |
270 new WebDriverLog(WebDriverLog::kBrowserType, browser_log_level); | 279 new WebDriverLog(WebDriverLog::kBrowserType, browser_log_level); |
271 logs.push_back(browser_log); | 280 logs.push_back(browser_log); |
272 // If the level is OFF, don't even bother listening for DevTools events. | 281 // If the level is OFF, don't even bother listening for DevTools events. |
273 if (browser_log_level != Log::kOff) | 282 if (browser_log_level != Log::kOff) |
274 listeners.push_back(new ConsoleLogger(browser_log)); | 283 devtools_listeners.push_back(new ConsoleLogger(browser_log)); |
275 | 284 |
276 out_logs->swap(logs); | 285 out_logs->swap(logs); |
277 out_listeners->swap(listeners); | 286 out_devtools_listeners->swap(devtools_listeners); |
278 return Status(kOk); | 287 return Status(kOk); |
279 } | 288 } |
OLD | NEW |