Index: chrome/test/perf/startup_test.cc |
diff --git a/chrome/test/perf/startup_test.cc b/chrome/test/perf/startup_test.cc |
index d68b05ccacb093a59ccfd58b88586d01f4e41b3f..75f3154d8dccaf77d7b1165010bfe0b86fca7567 100644 |
--- a/chrome/test/perf/startup_test.cc |
+++ b/chrome/test/perf/startup_test.cc |
@@ -24,6 +24,7 @@ |
#include "chrome/test/base/ui_test_utils.h" |
#include "chrome/test/perf/perf_test.h" |
#include "chrome/test/ui/ui_perf_test.h" |
+#include "content/public/common/content_switches.h" |
#include "net/base/net_util.h" |
using base::TimeDelta; |
@@ -33,7 +34,7 @@ namespace { |
class StartupTest : public UIPerfTest { |
public: |
- StartupTest() { |
+ StartupTest() : tracing_enabled_(false) { |
show_window_ = true; |
} |
virtual void SetUp() { |
@@ -71,6 +72,32 @@ class StartupTest : public UIPerfTest { |
collect_profiling_stats_ = true; |
} |
+ // Set the command line arguments to enable tracing. |
+ void SetUpWithTracing(std::string trace_file_prefix) { |
+ tracing_enabled_ = true; |
+ trace_file_prefix_ = trace_file_prefix; |
+ launch_arguments_.AppendSwitch(switches::kTraceStartup); |
+ launch_arguments_.AppendSwitchASCII(switches::kTraceStartupDuration, |
+ "1"); |
+ } |
+ |
+ // Pause after running a test with tracing, to wait for the trace to |
+ // be written. |
+ void PauseForTracing() { |
+ if (tracing_enabled_) { |
+#if defined(OS_MACOSX) |
+ sleep(1); |
Zhenyao Mo
2013/03/15 02:51:47
are you sure you want 1 ms? (sleep is ms instead
ccameron
2013/03/15 07:56:21
This one behaves as seconds (I tested it)
http://l
|
+#else |
+ NOTREACHED(); |
+#endif |
+ } |
+ } |
+ |
+ // Set the command line arguments to use force-compositing-mode. |
+ void SetUpWithForceCompositingMode() { |
+ launch_arguments_.AppendSwitch(switches::kForceCompositingMode); |
+ } |
+ |
// Load a complex html file on startup represented by |which_tab|. |
void SetUpWithComplexFileURL(unsigned int which_tab) { |
const char* const kTestPageCyclerDomains[] = { |
@@ -191,7 +218,15 @@ class StartupTest : public UIPerfTest { |
}; |
TimingInfo timings[kNumCyclesMax]; |
+ CommandLine launch_arguments_without_trace_file(launch_arguments_); |
for (int i = 0; i < numCycles; ++i) { |
+ if (tracing_enabled_) { |
+ std::stringstream tracing_enabled_file; |
+ tracing_enabled_file << trace_file_prefix_ << i; |
+ launch_arguments_ = launch_arguments_without_trace_file; |
+ launch_arguments_.AppendSwitchASCII(switches::kTraceStartupFile, |
+ tracing_enabled_file.str()); |
+ } |
if (test_cold == COLD) { |
base::FilePath dir_app; |
ASSERT_TRUE(PathService::Get(chrome::DIR_APP, &dir_app)); |
@@ -235,6 +270,7 @@ class StartupTest : public UIPerfTest { |
} |
} |
timings[i].end_to_end = end_time - browser_launch_time(); |
+ PauseForTracing(); |
UITest::TearDown(); |
if (i == 0) { |
@@ -297,6 +333,8 @@ class StartupTest : public UIPerfTest { |
base::FilePath profiling_file_; |
bool collect_profiling_stats_; |
+ bool tracing_enabled_; |
+ std::string trace_file_prefix_; |
}; |
TEST_F(StartupTest, PerfWarm) { |
@@ -469,4 +507,23 @@ TEST_F(StartupTest, ProfilingScript1) { |
UITestBase::DEFAULT_THEME, 1, 0); |
} |
+#if defined(OS_MACOSX) |
+TEST_F(StartupTest, TracedProfilingScript1) { |
+ SetUpWithFileURL(); |
+ SetUpWithProfiling(); |
+ SetUpWithTracing("startup_trace_sw_"); |
+ RunStartupTest("warm", "traced_profiling_scripts1", WARM, NOT_IMPORTANT, |
+ UITestBase::DEFAULT_THEME, 1, 0); |
+} |
+ |
+TEST_F(StartupTest, TracedProfilingScript1FCM) { |
+ SetUpWithFileURL(); |
+ SetUpWithProfiling(); |
+ SetUpWithForceCompositingMode(); |
+ SetUpWithTracing("startup_trace_fcm_"); |
+ RunStartupTest("warm", "traced_profiling_scripts1_fcm", WARM, NOT_IMPORTANT, |
+ UITestBase::DEFAULT_THEME, 1, 0); |
+} |
+#endif |
+ |
} // namespace |