Commit 047af26b authored by nasko's avatar nasko Committed by Commit bot

Add support for tracing in browser tests.

This CL adds support for collecting tracing data during the execution of browser tests. It is currently not possible to do so, yet it is very useful to be able to collect this data and analyze it without having to step through with debugger.

BUG=

Review URL: https://codereview.chromium.org/506113002

Cr-Commit-Position: refs/heads/master@{#292156}
parent b241671f
...@@ -447,7 +447,13 @@ const char kEnableServiceWorkerSync[] = "enable-service-worker-sync"; ...@@ -447,7 +447,13 @@ const char kEnableServiceWorkerSync[] = "enable-service-worker-sync";
const char kEnableTcpFastOpen[] = "enable-tcp-fastopen"; const char kEnableTcpFastOpen[] = "enable-tcp-fastopen";
// Enabled threaded compositing for layout tests. // Enabled threaded compositing for layout tests.
const char kEnableThreadedCompositing[] = "enable-threaded-compositing"; const char kEnableThreadedCompositing[] = "enable-threaded-compositing";
// Enable tracing during the execution of browser tests.
const char kEnableTracing[] = "enable-tracing";
// The filename to write the output of the test tracing to.
const char kEnableTracingOutput[] = "enable-tracing-output";
// Enable screen capturing support for MediaStream API. // Enable screen capturing support for MediaStream API.
const char kEnableUserMediaScreenCapturing[] = const char kEnableUserMediaScreenCapturing[] =
......
...@@ -132,6 +132,8 @@ CONTENT_EXPORT extern const char kEnableServiceWorkerSync[]; ...@@ -132,6 +132,8 @@ CONTENT_EXPORT extern const char kEnableServiceWorkerSync[];
CONTENT_EXPORT extern const char kEnableTargetedStyleRecalc[]; CONTENT_EXPORT extern const char kEnableTargetedStyleRecalc[];
CONTENT_EXPORT extern const char kEnableTcpFastOpen[]; CONTENT_EXPORT extern const char kEnableTcpFastOpen[];
CONTENT_EXPORT extern const char kEnableThreadedCompositing[]; CONTENT_EXPORT extern const char kEnableThreadedCompositing[];
CONTENT_EXPORT extern const char kEnableTracing[];
CONTENT_EXPORT extern const char kEnableTracingOutput[];
CONTENT_EXPORT extern const char kEnableUserMediaScreenCapturing[]; CONTENT_EXPORT extern const char kEnableUserMediaScreenCapturing[];
CONTENT_EXPORT extern const char kEnableViewport[]; CONTENT_EXPORT extern const char kEnableViewport[];
CONTENT_EXPORT extern const char kEnableViewportMeta[]; CONTENT_EXPORT extern const char kEnableViewportMeta[];
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "content/public/app/content_main.h" #include "content/public/app/content_main.h"
#include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/tracing_controller.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "content/public/common/main_function_params.h" #include "content/public/common/main_function_params.h"
#include "content/public/test/test_launcher.h" #include "content/public/test/test_launcher.h"
...@@ -121,6 +122,12 @@ class LocalHostResolverProc : public net::HostResolverProc { ...@@ -121,6 +122,12 @@ class LocalHostResolverProc : public net::HostResolverProc {
virtual ~LocalHostResolverProc() {} virtual ~LocalHostResolverProc() {}
}; };
void TraceDisableRecordingComplete(const base::Closure& quit,
const base::FilePath& file_path) {
LOG(ERROR) << "Tracing written to: " << file_path.value();
quit.Run();
}
} // namespace } // namespace
extern int BrowserMain(const MainFunctionParams&); extern int BrowserMain(const MainFunctionParams&);
...@@ -269,7 +276,35 @@ void BrowserTestBase::ProxyRunTestOnMainThreadLoop() { ...@@ -269,7 +276,35 @@ void BrowserTestBase::ProxyRunTestOnMainThreadLoop() {
signal(SIGTERM, DumpStackTraceSignalHandler); signal(SIGTERM, DumpStackTraceSignalHandler);
} }
#endif // defined(OS_POSIX) #endif // defined(OS_POSIX)
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableTracing)) {
base::debug::CategoryFilter category_filter(
CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kEnableTracing));
TracingController::GetInstance()->EnableRecording(
category_filter,
base::debug::TraceOptions(base::debug::RECORD_CONTINUOUSLY),
TracingController::EnableRecordingDoneCallback());
}
RunTestOnMainThreadLoop(); RunTestOnMainThreadLoop();
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableTracing)) {
base::FilePath trace_file =
CommandLine::ForCurrentProcess()->GetSwitchValuePath(
switches::kEnableTracingOutput);
// If there was no file specified, put a hardcoded one in the current
// working directory.
if (trace_file.empty())
trace_file = base::FilePath().AppendASCII("trace.json");
// Wait for tracing to collect results from the renderers.
base::RunLoop run_loop;
TracingController::GetInstance()->DisableRecording(
trace_file,
base::Bind(&TraceDisableRecordingComplete, run_loop.QuitClosure()));
run_loop.Run();
}
} }
void BrowserTestBase::CreateTestServer(const base::FilePath& test_server_base) { void BrowserTestBase::CreateTestServer(const base::FilePath& test_server_base) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment