Chromium Code Reviews| Index: chrome/test/chromedriver/logging.cc |
| diff --git a/chrome/test/chromedriver/logging.cc b/chrome/test/chromedriver/logging.cc |
| index c9ddf25c24dd3e49be22855b9dbcf343c11c1a0a..2643bebe7d233de727249b1210f035883c06d2f6 100644 |
| --- a/chrome/test/chromedriver/logging.cc |
| +++ b/chrome/test/chromedriver/logging.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/test/chromedriver/logging.h" |
| #include <stdio.h> |
| +#include <list> |
| #include "base/basictypes.h" |
| #include "base/command_line.h" |
| @@ -14,8 +15,9 @@ |
| #include "base/time/time.h" |
| #include "chrome/test/chromedriver/capabilities.h" |
| #include "chrome/test/chromedriver/chrome/console_logger.h" |
| -#include "chrome/test/chromedriver/chrome/performance_logger.h" |
| #include "chrome/test/chromedriver/chrome/status.h" |
| +#include "chrome/test/chromedriver/command_listener_proxy.h" |
| +#include "chrome/test/chromedriver/performance_logger.h" |
| #include "chrome/test/chromedriver/session.h" |
| #if defined(OS_POSIX) |
| @@ -239,9 +241,10 @@ bool InitLogging() { |
| Status CreateLogs(const Capabilities& capabilities, |
| ScopedVector<WebDriverLog>* out_logs, |
| - ScopedVector<DevToolsEventListener>* out_listeners) { |
| + ScopedVector<DevToolsEventListener>* out_devtools_listeners, |
| + std::list<CommandListener*>* out_command_listeners) { |
| ScopedVector<WebDriverLog> logs; |
| - ScopedVector<DevToolsEventListener> listeners; |
| + ScopedVector<DevToolsEventListener> devtools_listeners; |
| Log::Level browser_log_level = Log::kWarning; |
| const LoggingPrefs& prefs = capabilities.logging_prefs; |
| @@ -254,7 +257,13 @@ Status CreateLogs(const Capabilities& capabilities, |
| if (level != Log::kOff) { |
| WebDriverLog* log = new WebDriverLog(type, Log::kAll); |
| logs.push_back(log); |
| - listeners.push_back(new PerformanceLogger(log)); |
| + PerformanceLogger* perf_log = new PerformanceLogger(log); |
| + // We use a proxy for perf_log's CommandListener interface. |
| + // 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!
|
| + // 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
|
| + CommandListenerProxy* proxy = new CommandListenerProxy(perf_log); |
| + devtools_listeners.push_back(perf_log); |
| + out_command_listeners->push_back(proxy); |
| } |
| } else if (type == WebDriverLog::kBrowserType) { |
| browser_log_level = level; |
| @@ -271,9 +280,9 @@ Status CreateLogs(const Capabilities& capabilities, |
| logs.push_back(browser_log); |
| // If the level is OFF, don't even bother listening for DevTools events. |
| if (browser_log_level != Log::kOff) |
| - listeners.push_back(new ConsoleLogger(browser_log)); |
| + devtools_listeners.push_back(new ConsoleLogger(browser_log)); |
| out_logs->swap(logs); |
| - out_listeners->swap(listeners); |
| + out_devtools_listeners->swap(devtools_listeners); |
| return Status(kOk); |
| } |