summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/automation/automation_messages_internal.h6
-rw-r--r--chrome/test/automation/automation_proxy.cc6
-rw-r--r--chrome/test/automation/automation_proxy.h4
-rw-r--r--chrome/test/startup/feature_startup_test.cc86
-rw-r--r--chrome/test/startup/startup_test.cc2
-rw-r--r--chrome/test/ui/ui_test.cc2
-rw-r--r--chrome/test/ui/ui_test.h22
7 files changed, 105 insertions, 23 deletions
diff --git a/chrome/test/automation/automation_messages_internal.h b/chrome/test/automation/automation_messages_internal.h
index c9d04dd..5d009b5 100644
--- a/chrome/test/automation/automation_messages_internal.h
+++ b/chrome/test/automation/automation_messages_internal.h
@@ -1113,4 +1113,10 @@ IPC_BEGIN_MESSAGES(Automation)
int /* tab_handle */,
int /* The font size */)
+ // Returns a metric event duration that was last recorded. Returns -1 if the
+ // event hasn't occurred yet.
+ IPC_SYNC_MESSAGE_ROUTED1_1(AutomationMsg_GetMetricEventDuration,
+ std::string /* event_name */,
+ int /* duration ms */)
+
IPC_END_MESSAGES(Automation)
diff --git a/chrome/test/automation/automation_proxy.cc b/chrome/test/automation/automation_proxy.cc
index a039ffb3..69a363c 100644
--- a/chrome/test/automation/automation_proxy.cc
+++ b/chrome/test/automation/automation_proxy.cc
@@ -342,6 +342,12 @@ bool AutomationProxy::IsURLDisplayed(GURL url) {
return false;
}
+bool AutomationProxy::GetMetricEventDuration(const std::string& event_name,
+ int* duration_ms) {
+ return Send(new AutomationMsg_GetMetricEventDuration(0, event_name,
+ duration_ms));
+}
+
bool AutomationProxy::SetFilteredInet(bool enabled) {
return Send(new AutomationMsg_SetFilteredInet(0, enabled));
}
diff --git a/chrome/test/automation/automation_proxy.h b/chrome/test/automation/automation_proxy.h
index dac3bc3..ce3ff17 100644
--- a/chrome/test/automation/automation_proxy.h
+++ b/chrome/test/automation/automation_proxy.h
@@ -124,6 +124,10 @@ class AutomationProxy : public IPC::Channel::Listener,
// Returns true if one of the tabs in any window displays given url.
bool IsURLDisplayed(GURL url);
+ // Get the duration of the last |event_name| in the browser. Returns
+ // false if the IPC failed to send.
+ bool GetMetricEventDuration(const std::string& event_name, int* duration_ms);
+
// Returns the BrowserProxy for the browser window at the given index,
// transferring ownership of the pointer to the caller.
// On failure, returns NULL.
diff --git a/chrome/test/startup/feature_startup_test.cc b/chrome/test/startup/feature_startup_test.cc
index 574b283..5743e35 100644
--- a/chrome/test/startup/feature_startup_test.cc
+++ b/chrome/test/startup/feature_startup_test.cc
@@ -39,11 +39,7 @@ class NewTabUIStartupTest : public UITest {
PrintResultList("new_tab", "", label, times, "ms", important);
}
- // Run the test, by bringing up a browser and timing the new tab startup.
- // |want_warm| is true if we should output warm-disk timings, false if
- // we should report cold timings.
- void RunStartupTest(const char* label, bool want_warm, bool important,
- int profile_type) {
+ void InitProfile(UITest::ProfileType profile_type) {
profile_type_ = profile_type;
// Install the location of the test profile file.
@@ -53,6 +49,14 @@ class NewTabUIStartupTest : public UITest {
// Disable the first run notification because it has an animation which
// masks any real performance regressions.
launch_arguments_.AppendSwitch(switches::kDisableNewTabFirstRun);
+ }
+
+ // Run the test, by bringing up a browser and timing the new tab startup.
+ // |want_warm| is true if we should output warm-disk timings, false if
+ // we should report cold timings.
+ void RunStartupTest(const char* label, bool want_warm, bool important,
+ UITest::ProfileType profile_type) {
+ InitProfile(profile_type);
TimeDelta timings[kNumCycles];
for (int i = 0; i < kNumCycles; ++i) {
@@ -66,9 +70,9 @@ class NewTabUIStartupTest : public UITest {
// We resize the window so that we hit the normal layout of the NTP and
// not the small layout mode.
#if defined(OS_WIN)
-// TODO(port): SetBounds returns false when not implemented.
-// It is OK to comment out the resize since it will still be useful to test the
-// default size of the window.
+ // TODO(port): SetBounds returns false when not implemented.
+ // It is OK to comment out the resize since it will still be useful to
+ // test the default size of the window.
ASSERT_TRUE(window->GetWindow().get()->SetBounds(gfx::Rect(1000, 1000)));
#endif
int tab_count = -1;
@@ -80,15 +84,14 @@ class NewTabUIStartupTest : public UITest {
ASSERT_TRUE(window->WaitForTabCountToBecome(2, 5000));
int load_time;
ASSERT_TRUE(automation()->WaitForInitialNewTabUILoad(&load_time));
- timings[i] = TimeDelta::FromMilliseconds(load_time);
if (want_warm) {
// Bring up a second tab, now that we've already shown one tab.
window->ApplyAccelerator(IDC_NEW_TAB);
ASSERT_TRUE(window->WaitForTabCountToBecome(3, 5000));
ASSERT_TRUE(automation()->WaitForInitialNewTabUILoad(&load_time));
- timings[i] = TimeDelta::FromMilliseconds(load_time);
}
+ timings[i] = TimeDelta::FromMilliseconds(load_time);
window = NULL;
UITest::TearDown();
@@ -96,6 +99,65 @@ class NewTabUIStartupTest : public UITest {
PrintTimings(label, timings, important);
}
+
+ void RunNewTabTimingTest() {
+ InitProfile(UITest::DEFAULT_THEME);
+
+ TimeDelta scriptstart_times[kNumCycles];
+ TimeDelta domcontentloaded_times[kNumCycles];
+ TimeDelta onload_times[kNumCycles];
+
+ for (int i = 0; i < kNumCycles; ++i) {
+ UITest::SetUp();
+
+ // Switch to the "new tab" tab, which should be any new tab after the
+ // first (the first is about:blank).
+ scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0));
+ ASSERT_TRUE(window.get());
+
+ // We resize the window so that we hit the normal layout of the NTP and
+ // not the small layout mode.
+#if defined(OS_WIN)
+ // TODO(port): SetBounds returns false when not implemented.
+ // It is OK to comment out the resize since it will still be useful to
+ // test the default size of the window.
+ ASSERT_TRUE(window->GetWindow().get()->SetBounds(gfx::Rect(1000, 1000)));
+#endif
+ int tab_count = -1;
+ ASSERT_TRUE(window->GetTabCount(&tab_count));
+ ASSERT_EQ(1, tab_count);
+
+ // Hit ctl-t and wait for the tab to load.
+ window->ApplyAccelerator(IDC_NEW_TAB);
+ ASSERT_TRUE(window->WaitForTabCountToBecome(2, 5000));
+ int duration;
+ ASSERT_TRUE(automation()->WaitForInitialNewTabUILoad(&duration));
+
+ // Collect the timing information.
+ ASSERT_TRUE(automation()->GetMetricEventDuration("NewTab.ScriptStart",
+ &duration));
+ ASSERT_NE(duration, -1);
+ scriptstart_times[i] = TimeDelta::FromMilliseconds(duration);
+
+ ASSERT_TRUE(automation()->GetMetricEventDuration(
+ "NewTab.DOMContentLoaded", &duration));
+ ASSERT_NE(duration, -1);
+ domcontentloaded_times[i] = TimeDelta::FromMilliseconds(duration);
+
+ ASSERT_TRUE(automation()->GetMetricEventDuration("NewTab.Onload",
+ &duration));
+ ASSERT_NE(duration, -1);
+ onload_times[i] = TimeDelta::FromMilliseconds(duration);
+
+ window = NULL;
+ UITest::TearDown();
+ }
+
+ PrintTimings("script_start", scriptstart_times, false /* important */);
+ PrintTimings("domcontent_loaded", domcontentloaded_times,
+ false /* important */);
+ PrintTimings("onload", onload_times, false /* important */);
+ }
};
// TODO(pamg): run these tests with a reference build?
@@ -115,6 +177,10 @@ TEST_F(NewTabUIStartupTest, ComplexThemeCold) {
UITest::COMPLEX_THEME);
}
+TEST_F(NewTabUIStartupTest, NewTabTimingTestsCold) {
+ RunNewTabTimingTest();
+}
+
#if defined(OS_LINUX)
TEST_F(NewTabUIStartupTest, GtkThemeCold) {
RunStartupTest("tab_gtk_theme_cold", false /* cold */,
diff --git a/chrome/test/startup/startup_test.cc b/chrome/test/startup/startup_test.cc
index 69035d8..7e52741 100644
--- a/chrome/test/startup/startup_test.cc
+++ b/chrome/test/startup/startup_test.cc
@@ -50,7 +50,7 @@ class StartupTest : public UITest {
}
void RunStartupTest(const char* graph, const char* trace,
- bool test_cold, bool important, int profile_type) {
+ bool test_cold, bool important, UITest::ProfileType profile_type) {
profile_type_ = profile_type;
// Sets the profile data for the run. For now, this is only used for
diff --git a/chrome/test/ui/ui_test.cc b/chrome/test/ui/ui_test.cc
index 30ed274..8308ca0 100644
--- a/chrome/test/ui/ui_test.cc
+++ b/chrome/test/ui/ui_test.cc
@@ -924,7 +924,7 @@ void UITest::RewritePreferencesFile(const FilePath& user_data_dir) {
}
// static
-FilePath UITest::ComputeTypicalUserDataSource(int profile_type) {
+FilePath UITest::ComputeTypicalUserDataSource(ProfileType profile_type) {
FilePath source_history_file;
EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA,
&source_history_file));
diff --git a/chrome/test/ui/ui_test.h b/chrome/test/ui/ui_test.h
index 5c45e8c..c87ffe1 100644
--- a/chrome/test/ui/ui_test.h
+++ b/chrome/test/ui/ui_test.h
@@ -362,9 +362,18 @@ class UITest : public testing::Test {
log_level_ = value;
}
+ // Profile theme type choices.
+ typedef enum {
+ DEFAULT_THEME = 0,
+ COMPLEX_THEME = 1,
+ NATIVE_THEME = 2,
+ CUSTOM_FRAME = 3,
+ CUSTOM_FRAME_NATIVE_THEME = 4,
+ } ProfileType;
+
// Returns the directory name where the "typical" user data is that we use
// for testing.
- static FilePath ComputeTypicalUserDataSource(int profile_type);
+ static FilePath ComputeTypicalUserDataSource(ProfileType profile_type);
// Rewrite the preferences file to point to the proper image directory.
static void RewritePreferencesFile(const FilePath& user_data_dir);
@@ -443,15 +452,6 @@ class UITest : public testing::Test {
void StartHttpServer(const FilePath& root_directory);
void StopHttpServer();
- // Profile theme type choices.
- typedef enum {
- DEFAULT_THEME = 0,
- COMPLEX_THEME = 1,
- NATIVE_THEME = 2,
- CUSTOM_FRAME = 3,
- CUSTOM_FRAME_NATIVE_THEME = 4,
- } ProfileType;
-
private:
// Check that no processes related to Chrome exist, displaying
// the given message if any do.
@@ -518,7 +518,7 @@ class UITest : public testing::Test {
bool use_existing_browser_; // Duplicate of the static version.
// Default value comes from static.
bool enable_file_cookies_; // Enable file cookies, default is true.
- int profile_type_; // Are we using a profile with a
+ ProfileType profile_type_; // Are we using a profile with a
// complex theme?
private: