| 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 "base/environment.h" | 5 #include "base/environment.h" | 
| 6 #include "base/file_util.h" | 6 #include "base/file_util.h" | 
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" | 
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" | 
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" | 
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" | 
| 11 #include "base/strings/string_split.h" | 11 #include "base/strings/string_split.h" | 
| 12 #include "base/sys_info.h" | 12 #include "base/sys_info.h" | 
| 13 #include "base/test/test_file_util.h" | 13 #include "base/test/test_file_util.h" | 
| 14 #include "base/test/test_timeouts.h" | 14 #include "base/test/test_timeouts.h" | 
| 15 #include "base/time.h" | 15 #include "base/time.h" | 
| 16 #include "base/utf_string_conversions.h" | 16 #include "base/utf_string_conversions.h" | 
| 17 #include "chrome/common/chrome_constants.h" | 17 #include "chrome/common/chrome_constants.h" | 
| 18 #include "chrome/common/chrome_paths.h" | 18 #include "chrome/common/chrome_paths.h" | 
| 19 #include "chrome/common/chrome_switches.h" | 19 #include "chrome/common/chrome_switches.h" | 
| 20 #include "chrome/common/env_vars.h" | 20 #include "chrome/common/env_vars.h" | 
| 21 #include "chrome/test/automation/automation_proxy.h" | 21 #include "chrome/test/automation/automation_proxy.h" | 
| 22 #include "chrome/test/base/test_switches.h" | 22 #include "chrome/test/base/test_switches.h" | 
| 23 #include "chrome/test/base/testing_profile.h" | 23 #include "chrome/test/base/testing_profile.h" | 
| 24 #include "chrome/test/base/ui_test_utils.h" | 24 #include "chrome/test/base/ui_test_utils.h" | 
| 25 #include "chrome/test/perf/perf_test.h" | 25 #include "chrome/test/perf/perf_test.h" | 
|  | 26 #include "chrome/test/perf/perf_ui_test_suite.h" | 
| 26 #include "chrome/test/ui/ui_perf_test.h" | 27 #include "chrome/test/ui/ui_perf_test.h" | 
| 27 #include "content/public/common/content_switches.h" | 28 #include "content/public/common/content_switches.h" | 
| 28 #include "net/base/net_util.h" | 29 #include "net/base/net_util.h" | 
| 29 | 30 | 
| 30 using base::TimeDelta; | 31 using base::TimeDelta; | 
| 31 using base::TimeTicks; | 32 using base::TimeTicks; | 
| 32 | 33 | 
| 33 namespace { | 34 namespace { | 
| 34 | 35 | 
| 35 class StartupTest : public UIPerfTest { | 36 class StartupTest : public UIPerfTest { | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 110     base::FilePath data_dir; | 111     base::FilePath data_dir; | 
| 111     PathService::Get(chrome::DIR_TEST_DATA, &data_dir); | 112     PathService::Get(chrome::DIR_TEST_DATA, &data_dir); | 
| 112     data_dir = data_dir.AppendASCII("extensions").AppendASCII("profiles"). | 113     data_dir = data_dir.AppendASCII("extensions").AppendASCII("profiles"). | 
| 113         AppendASCII(profile); | 114         AppendASCII(profile); | 
| 114     set_template_user_data(data_dir); | 115     set_template_user_data(data_dir); | 
| 115   } | 116   } | 
| 116 | 117 | 
| 117   // Rewrite the preferences file to point to the proper image directory. | 118   // Rewrite the preferences file to point to the proper image directory. | 
| 118   virtual void SetUpProfile() OVERRIDE { | 119   virtual void SetUpProfile() OVERRIDE { | 
| 119     UIPerfTest::SetUpProfile(); | 120     UIPerfTest::SetUpProfile(); | 
| 120     if (profile_type_ != UITestBase::COMPLEX_THEME) | 121     if (profile_type_ != PerfUITestSuite::COMPLEX_THEME) | 
| 121       return; | 122       return; | 
| 122 | 123 | 
| 123     const base::FilePath pref_template_path(user_data_dir(). | 124     const base::FilePath pref_template_path(user_data_dir(). | 
| 124         AppendASCII("Default"). | 125         AppendASCII("Default"). | 
| 125         AppendASCII("PreferencesTemplate")); | 126         AppendASCII("PreferencesTemplate")); | 
| 126     const base::FilePath pref_path(user_data_dir(). | 127     const base::FilePath pref_path(user_data_dir(). | 
| 127         AppendASCII(TestingProfile::kTestUserProfileDir). | 128         AppendASCII(TestingProfile::kTestUserProfileDir). | 
| 128         AppendASCII("Preferences")); | 129         AppendASCII("Preferences")); | 
| 129 | 130 | 
| 130     // Read in preferences template. | 131     // Read in preferences template. | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 155 | 156 | 
| 156   // Runs a test which loads |tab_count| tabs on startup, either as command line | 157   // Runs a test which loads |tab_count| tabs on startup, either as command line | 
| 157   // arguments or, if |restore_session| is true, by using session restore. | 158   // arguments or, if |restore_session| is true, by using session restore. | 
| 158   // |nth_timed_tab|, if non-zero, will measure time to load the first n+1 tabs. | 159   // |nth_timed_tab|, if non-zero, will measure time to load the first n+1 tabs. | 
| 159   void RunPerfTestWithManyTabs(const char* graph, const char* trace, | 160   void RunPerfTestWithManyTabs(const char* graph, const char* trace, | 
| 160                                int tab_count, int nth_timed_tab, | 161                                int tab_count, int nth_timed_tab, | 
| 161                                bool restore_session); | 162                                bool restore_session); | 
| 162 | 163 | 
| 163   void RunStartupTest(const char* graph, const char* trace, | 164   void RunStartupTest(const char* graph, const char* trace, | 
| 164                       TestColdness test_cold, TestImportance test_importance, | 165                       TestColdness test_cold, TestImportance test_importance, | 
| 165                       UITestBase::ProfileType profile_type, | 166                       PerfUITestSuite::ProfileType profile_type, | 
| 166                       int num_tabs, int nth_timed_tab) { | 167                       int num_tabs, int nth_timed_tab) { | 
| 167     bool important = (test_importance == IMPORTANT); | 168     bool important = (test_importance == IMPORTANT); | 
| 168     profile_type_ = profile_type; | 169     profile_type_ = profile_type; | 
| 169 | 170 | 
| 170     // Sets the profile data for the run.  For now, this is only used for | 171     // Sets the profile data for the run.  For now, this is only used for | 
| 171     // the non-default themes test. | 172     // the non-default themes test. | 
| 172     if (profile_type != UITestBase::DEFAULT_THEME) { | 173     if (profile_type != PerfUITestSuite::DEFAULT_THEME) { | 
| 173       set_template_user_data(UITest::ComputeTypicalUserDataSource( | 174       set_template_user_data( | 
| 174           profile_type)); | 175           PerfUITestSuite::GetPathForProfileType(profile_type)); | 
| 175     } | 176     } | 
| 176 | 177 | 
| 177 #if defined(NDEBUG) | 178 #if defined(NDEBUG) | 
| 178     const int kNumCyclesMax = 20; | 179     const int kNumCyclesMax = 20; | 
| 179 #else | 180 #else | 
| 180     // Debug builds are too slow and we can't run that many cycles in a | 181     // Debug builds are too slow and we can't run that many cycles in a | 
| 181     // reasonable amount of time. | 182     // reasonable amount of time. | 
| 182     const int kNumCyclesMax = 10; | 183     const int kNumCyclesMax = 10; | 
| 183 #endif | 184 #endif | 
| 184     int numCycles = kNumCyclesMax; | 185     int numCycles = kNumCyclesMax; | 
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 316           base::StringAppendF(×, "%.2f,", timings[i].last_stop_ms); | 317           base::StringAppendF(×, "%.2f,", timings[i].last_stop_ms); | 
| 317         perf_test::PrintResultList( | 318         perf_test::PrintResultList( | 
| 318             graph, std::string(), name.c_str(), times, "ms", important); | 319             graph, std::string(), name.c_str(), times, "ms", important); | 
| 319       } | 320       } | 
| 320     } | 321     } | 
| 321   } | 322   } | 
| 322 | 323 | 
| 323   base::FilePath profiling_file_; | 324   base::FilePath profiling_file_; | 
| 324   bool collect_profiling_stats_; | 325   bool collect_profiling_stats_; | 
| 325   std::string trace_file_prefix_; | 326   std::string trace_file_prefix_; | 
|  | 327 | 
|  | 328   // Are we using a profile with a complex theme? | 
|  | 329   PerfUITestSuite::ProfileType profile_type_; | 
| 326 }; | 330 }; | 
| 327 | 331 | 
| 328 TEST_F(StartupTest, PerfWarm) { | 332 TEST_F(StartupTest, PerfWarm) { | 
| 329   SetUpWithCompositingDisabledOnMac(); | 333   SetUpWithCompositingDisabledOnMac(); | 
| 330   RunStartupTest("warm", "t", WARM, IMPORTANT, | 334   RunStartupTest("warm", "t", WARM, IMPORTANT, | 
| 331                  UITestBase::DEFAULT_THEME, 0, 0); | 335                  PerfUITestSuite::DEFAULT_THEME, 0, 0); | 
| 332 } | 336 } | 
| 333 | 337 | 
| 334 #if defined(OS_MACOSX) | 338 #if defined(OS_MACOSX) | 
| 335 TEST_F(StartupTest, PerfWarmFCM) { | 339 TEST_F(StartupTest, PerfWarmFCM) { | 
| 336   SetUpWithCompositingEnabledOnMac(); | 340   SetUpWithCompositingEnabledOnMac(); | 
| 337   RunStartupTest("warm", "t_fcm", WARM, IMPORTANT, | 341   RunStartupTest("warm", "t_fcm", WARM, IMPORTANT, | 
| 338                  UITestBase::DEFAULT_THEME, 0, 0); | 342                  PerfUITestSuite::DEFAULT_THEME, 0, 0); | 
| 339 } | 343 } | 
| 340 #endif | 344 #endif | 
| 341 | 345 | 
| 342 TEST_F(StartupTest, PerfReferenceWarm) { | 346 TEST_F(StartupTest, PerfReferenceWarm) { | 
| 343   UseReferenceBuild(); | 347   UseReferenceBuild(); | 
| 344   RunStartupTest("warm", "t_ref", WARM, IMPORTANT, | 348   RunStartupTest("warm", "t_ref", WARM, IMPORTANT, | 
| 345                  UITestBase::DEFAULT_THEME, 0, 0); | 349                  PerfUITestSuite::DEFAULT_THEME, 0, 0); | 
| 346 } | 350 } | 
| 347 | 351 | 
| 348 // TODO(mpcomplete): Should we have reference timings for all these? | 352 // TODO(mpcomplete): Should we have reference timings for all these? | 
| 349 | 353 | 
| 350 // dominich: Disabling as per http://crbug.com/100900. | 354 // dominich: Disabling as per http://crbug.com/100900. | 
| 351 #if defined(OS_WIN) | 355 #if defined(OS_WIN) | 
| 352 #define MAYBE_PerfCold DISABLED_PerfCold | 356 #define MAYBE_PerfCold DISABLED_PerfCold | 
| 353 #else | 357 #else | 
| 354 #define MAYBE_PerfCold PerfCold | 358 #define MAYBE_PerfCold PerfCold | 
| 355 #endif | 359 #endif | 
| 356 | 360 | 
| 357 TEST_F(StartupTest, MAYBE_PerfCold) { | 361 TEST_F(StartupTest, MAYBE_PerfCold) { | 
| 358   SetUpWithCompositingDisabledOnMac(); | 362   SetUpWithCompositingDisabledOnMac(); | 
| 359   RunStartupTest("cold", "t", COLD, NOT_IMPORTANT, | 363   RunStartupTest("cold", "t", COLD, NOT_IMPORTANT, | 
| 360                  UITestBase::DEFAULT_THEME, 0, 0); | 364                  PerfUITestSuite::DEFAULT_THEME, 0, 0); | 
| 361 } | 365 } | 
| 362 | 366 | 
| 363 #if defined(OS_MACOSX) | 367 #if defined(OS_MACOSX) | 
| 364 TEST_F(StartupTest, PerfColdFCM) { | 368 TEST_F(StartupTest, PerfColdFCM) { | 
| 365   SetUpWithCompositingEnabledOnMac(); | 369   SetUpWithCompositingEnabledOnMac(); | 
| 366   RunStartupTest("cold", "t_fcm", COLD, NOT_IMPORTANT, | 370   RunStartupTest("cold", "t_fcm", COLD, NOT_IMPORTANT, | 
| 367                  UITestBase::DEFAULT_THEME, 0, 0); | 371                  PerfUITestSuite::DEFAULT_THEME, 0, 0); | 
| 368 } | 372 } | 
| 369 #endif | 373 #endif | 
| 370 | 374 | 
| 371 void StartupTest::RunPerfTestWithManyTabs(const char* graph, const char* trace, | 375 void StartupTest::RunPerfTestWithManyTabs(const char* graph, const char* trace, | 
| 372                                           int tab_count, int nth_timed_tab, | 376                                           int tab_count, int nth_timed_tab, | 
| 373                                           bool restore_session) { | 377                                           bool restore_session) { | 
| 374   // Initialize session with |tab_count| tabs. | 378   // Initialize session with |tab_count| tabs. | 
| 375   for (int i = 0; i < tab_count; ++i) | 379   for (int i = 0; i < tab_count; ++i) | 
| 376     SetUpWithComplexFileURL(i); | 380     SetUpWithComplexFileURL(i); | 
| 377 | 381 | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 394       new_launch_arguments.AppendSwitch(switches::kEnableChromiumBranding); | 398       new_launch_arguments.AppendSwitch(switches::kEnableChromiumBranding); | 
| 395     } | 399     } | 
| 396     // The session will be restored once per cycle for numCycles test cycles, | 400     // The session will be restored once per cycle for numCycles test cycles, | 
| 397     // and each time, UITest::SetUp will wait for |tab_count| tabs to | 401     // and each time, UITest::SetUp will wait for |tab_count| tabs to | 
| 398     // finish loading. | 402     // finish loading. | 
| 399     new_launch_arguments.AppendSwitchASCII(switches::kRestoreLastSession, | 403     new_launch_arguments.AppendSwitchASCII(switches::kRestoreLastSession, | 
| 400                                         base::IntToString(tab_count)); | 404                                         base::IntToString(tab_count)); | 
| 401     launch_arguments_ = new_launch_arguments; | 405     launch_arguments_ = new_launch_arguments; | 
| 402   } | 406   } | 
| 403   RunStartupTest(graph, trace, WARM, NOT_IMPORTANT, | 407   RunStartupTest(graph, trace, WARM, NOT_IMPORTANT, | 
| 404                  UITestBase::DEFAULT_THEME, tab_count, nth_timed_tab); | 408                  PerfUITestSuite::DEFAULT_THEME, tab_count, nth_timed_tab); | 
| 405 } | 409 } | 
| 406 | 410 | 
| 407 // http://crbug.com/101591 | 411 // http://crbug.com/101591 | 
| 408 #if defined(OS_WIN) && !defined(NDEBUG) | 412 #if defined(OS_WIN) && !defined(NDEBUG) | 
| 409 #define MAYBE_PerfFewTabs DISABLED_PerfFewTabs | 413 #define MAYBE_PerfFewTabs DISABLED_PerfFewTabs | 
| 410 #else | 414 #else | 
| 411 #define MAYBE_PerfFewTabs PerfFewTabs | 415 #define MAYBE_PerfFewTabs PerfFewTabs | 
| 412 #endif | 416 #endif | 
| 413 | 417 | 
| 414 TEST_F(StartupTest, MAYBE_PerfFewTabs) { | 418 TEST_F(StartupTest, MAYBE_PerfFewTabs) { | 
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 494 TEST_F(StartupTest, PerfRestoreSeveralTabsReference) { | 498 TEST_F(StartupTest, PerfRestoreSeveralTabsReference) { | 
| 495   UseReferenceBuild(); | 499   UseReferenceBuild(); | 
| 496   RunPerfTestWithManyTabs("several_tabs", "restore-ref", 10, 4, true); | 500   RunPerfTestWithManyTabs("several_tabs", "restore-ref", 10, 4, true); | 
| 497 } | 501 } | 
| 498 | 502 | 
| 499 TEST_F(StartupTest, PerfExtensionEmpty) { | 503 TEST_F(StartupTest, PerfExtensionEmpty) { | 
| 500   SetUpWithCompositingDisabledOnMac(); | 504   SetUpWithCompositingDisabledOnMac(); | 
| 501   SetUpWithFileURL(); | 505   SetUpWithFileURL(); | 
| 502   SetUpWithExtensionsProfile("empty"); | 506   SetUpWithExtensionsProfile("empty"); | 
| 503   RunStartupTest("warm", "extension_empty", WARM, NOT_IMPORTANT, | 507   RunStartupTest("warm", "extension_empty", WARM, NOT_IMPORTANT, | 
| 504                  UITestBase::DEFAULT_THEME, 1, 0); | 508                  PerfUITestSuite::DEFAULT_THEME, 1, 0); | 
| 505 } | 509 } | 
| 506 | 510 | 
| 507 #if defined(OS_MACOSX) | 511 #if defined(OS_MACOSX) | 
| 508 TEST_F(StartupTest, PerfExtensionEmptyFCM) { | 512 TEST_F(StartupTest, PerfExtensionEmptyFCM) { | 
| 509   SetUpWithCompositingEnabledOnMac(); | 513   SetUpWithCompositingEnabledOnMac(); | 
| 510   SetUpWithFileURL(); | 514   SetUpWithFileURL(); | 
| 511   SetUpWithExtensionsProfile("empty"); | 515   SetUpWithExtensionsProfile("empty"); | 
| 512   RunStartupTest("warm", "extension_empty_fcm", WARM, NOT_IMPORTANT, | 516   RunStartupTest("warm", "extension_empty_fcm", WARM, NOT_IMPORTANT, | 
| 513                  UITestBase::DEFAULT_THEME, 1, 0); | 517                  PerfUITestSuite::DEFAULT_THEME, 1, 0); | 
| 514 } | 518 } | 
| 515 #endif | 519 #endif | 
| 516 | 520 | 
| 517 TEST_F(StartupTest, PerfExtensionContentScript1) { | 521 TEST_F(StartupTest, PerfExtensionContentScript1) { | 
| 518   SetUpWithCompositingDisabledOnMac(); | 522   SetUpWithCompositingDisabledOnMac(); | 
| 519   SetUpWithFileURL(); | 523   SetUpWithFileURL(); | 
| 520   SetUpWithExtensionsProfile("content_scripts1"); | 524   SetUpWithExtensionsProfile("content_scripts1"); | 
| 521   RunStartupTest("warm", "extension_content_scripts1", WARM, NOT_IMPORTANT, | 525   RunStartupTest("warm", "extension_content_scripts1", WARM, NOT_IMPORTANT, | 
| 522                  UITestBase::DEFAULT_THEME, 1, 0); | 526                  PerfUITestSuite::DEFAULT_THEME, 1, 0); | 
| 523 } | 527 } | 
| 524 | 528 | 
| 525 #if defined(OS_MACOSX) | 529 #if defined(OS_MACOSX) | 
| 526 TEST_F(StartupTest, PerfExtensionContentScript1FCM) { | 530 TEST_F(StartupTest, PerfExtensionContentScript1FCM) { | 
| 527   SetUpWithCompositingEnabledOnMac(); | 531   SetUpWithCompositingEnabledOnMac(); | 
| 528   SetUpWithFileURL(); | 532   SetUpWithFileURL(); | 
| 529   SetUpWithExtensionsProfile("content_scripts1"); | 533   SetUpWithExtensionsProfile("content_scripts1"); | 
| 530   RunStartupTest("warm", "extension_content_scripts1_fcm", WARM, NOT_IMPORTANT, | 534   RunStartupTest("warm", "extension_content_scripts1_fcm", WARM, NOT_IMPORTANT, | 
| 531                  UITestBase::DEFAULT_THEME, 1, 0); | 535                  PerfUITestSuite::DEFAULT_THEME, 1, 0); | 
| 532 } | 536 } | 
| 533 #endif | 537 #endif | 
| 534 | 538 | 
| 535 TEST_F(StartupTest, MAYBE_PerfExtensionContentScript50) { | 539 TEST_F(StartupTest, MAYBE_PerfExtensionContentScript50) { | 
| 536   SetUpWithFileURL(); | 540   SetUpWithFileURL(); | 
| 537   SetUpWithExtensionsProfile("content_scripts50"); | 541   SetUpWithExtensionsProfile("content_scripts50"); | 
| 538   RunStartupTest("warm", "extension_content_scripts50", WARM, NOT_IMPORTANT, | 542   RunStartupTest("warm", "extension_content_scripts50", WARM, NOT_IMPORTANT, | 
| 539                  UITestBase::DEFAULT_THEME, 1, 0); | 543                  PerfUITestSuite::DEFAULT_THEME, 1, 0); | 
| 540 } | 544 } | 
| 541 | 545 | 
| 542 TEST_F(StartupTest, MAYBE_PerfComplexTheme) { | 546 TEST_F(StartupTest, MAYBE_PerfComplexTheme) { | 
| 543   RunStartupTest("warm", "t-theme", WARM, NOT_IMPORTANT, | 547   RunStartupTest("warm", "t-theme", WARM, NOT_IMPORTANT, | 
| 544                  UITestBase::COMPLEX_THEME, 0, 0); | 548                  PerfUITestSuite::COMPLEX_THEME, 0, 0); | 
| 545 } | 549 } | 
| 546 | 550 | 
| 547 TEST_F(StartupTest, ProfilingScript1) { | 551 TEST_F(StartupTest, ProfilingScript1) { | 
| 548   SetUpWithCompositingDisabledOnMac(); | 552   SetUpWithCompositingDisabledOnMac(); | 
| 549   SetUpWithFileURL(); | 553   SetUpWithFileURL(); | 
| 550   SetUpWithProfiling(); | 554   SetUpWithProfiling(); | 
| 551   RunStartupTest("warm", "profiling_scripts1", WARM, NOT_IMPORTANT, | 555   RunStartupTest("warm", "profiling_scripts1", WARM, NOT_IMPORTANT, | 
| 552                  UITestBase::DEFAULT_THEME, 1, 0); | 556                  PerfUITestSuite::DEFAULT_THEME, 1, 0); | 
| 553 } | 557 } | 
| 554 | 558 | 
| 555 #if defined(OS_MACOSX) | 559 #if defined(OS_MACOSX) | 
| 556 TEST_F(StartupTest, ProfilingScript1FCM) { | 560 TEST_F(StartupTest, ProfilingScript1FCM) { | 
| 557   SetUpWithCompositingEnabledOnMac(); | 561   SetUpWithCompositingEnabledOnMac(); | 
| 558   SetUpWithFileURL(); | 562   SetUpWithFileURL(); | 
| 559   SetUpWithProfiling(); | 563   SetUpWithProfiling(); | 
| 560   RunStartupTest("warm", "profiling_scripts1_fcm", WARM, NOT_IMPORTANT, | 564   RunStartupTest("warm", "profiling_scripts1_fcm", WARM, NOT_IMPORTANT, | 
| 561                  UITestBase::DEFAULT_THEME, 1, 0); | 565                  PerfUITestSuite::DEFAULT_THEME, 1, 0); | 
| 562 } | 566 } | 
| 563 #endif | 567 #endif | 
| 564 | 568 | 
| 565 }  // namespace | 569 }  // namespace | 
| OLD | NEW | 
|---|