Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Side by Side Diff: chrome/test/startup/startup_test.cc

Issue 27240: Make startup_tests build and run on Linux (except reference tests). (Closed)
Patch Set: small bugfix in process_util Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/test/automation/browser_proxy.cc ('k') | chrome/test/startup/startup_tests.scons » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/file_path.h"
5 #include "base/file_util.h" 6 #include "base/file_util.h"
6 #include "base/path_service.h" 7 #include "base/path_service.h"
7 #include "base/platform_thread.h" 8 #include "base/platform_thread.h"
8 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/test_file_util.h"
9 #include "base/time.h" 11 #include "base/time.h"
12 #include "chrome/common/chrome_constants.h"
10 #include "chrome/common/chrome_paths.h" 13 #include "chrome/common/chrome_paths.h"
11 #include "chrome/test/ui/ui_test.h" 14 #include "chrome/test/ui/ui_test.h"
12 #include "net/base/net_util.h" 15 #include "net/base/net_util.h"
13 16
14 using base::TimeDelta; 17 using base::TimeDelta;
15 using base::TimeTicks; 18 using base::TimeTicks;
16 19
17 namespace { 20 namespace {
18 21
19 // Wrapper around CopyFile to retry 10 times if there is an error.
20 // For some reasons on buildbot it happens quite often that
21 // the test fails because the dll is still in use.
22 bool CopyFileWrapper(const std::wstring &src, const std::wstring &dest) {
23 for (int i = 0; i < 10; ++i) {
24 if (file_util::CopyFile(src, dest))
25 return true;
26 Sleep(1000);
27 }
28 return false;
29 }
30
31 class StartupTest : public UITest { 22 class StartupTest : public UITest {
32 public: 23 public:
33 StartupTest() { 24 StartupTest() {
34 show_window_ = true; 25 show_window_ = true;
35 pages_ = "about:blank"; 26 pages_ = "about:blank";
36 } 27 }
37 void SetUp() {} 28 void SetUp() {}
38 void TearDown() {} 29 void TearDown() {}
39 30
40 void RunStartupTest(const wchar_t* graph, const wchar_t* trace, 31 void RunStartupTest(const wchar_t* graph, const wchar_t* trace,
41 bool test_cold, bool important) { 32 bool test_cold, bool important) {
42 const int kNumCycles = 20; 33 const int kNumCycles = 20;
43 34
44 // Make a backup of gears.dll so we can overwrite the original, which
45 // flushes the disk cache for that file.
46 std::wstring chrome_dll, chrome_dll_copy;
47 ASSERT_TRUE(PathService::Get(chrome::DIR_APP, &chrome_dll));
48 file_util::AppendToPath(&chrome_dll, L"chrome.dll");
49 chrome_dll_copy = chrome_dll + L".copy";
50 ASSERT_TRUE(CopyFileWrapper(chrome_dll, chrome_dll_copy));
51
52 std::wstring gears_dll, gears_dll_copy;
53 ASSERT_TRUE(PathService::Get(chrome::FILE_GEARS_PLUGIN, &gears_dll));
54 gears_dll_copy = gears_dll + L".copy";
55 ASSERT_TRUE(CopyFileWrapper(gears_dll, gears_dll_copy));
56
57 TimeDelta timings[kNumCycles]; 35 TimeDelta timings[kNumCycles];
58 for (int i = 0; i < kNumCycles; ++i) { 36 for (int i = 0; i < kNumCycles; ++i) {
59 if (test_cold) { 37 if (test_cold) {
60 ASSERT_TRUE(CopyFileWrapper(chrome_dll_copy, chrome_dll)); 38 FilePath dir_app;
61 ASSERT_TRUE(CopyFileWrapper(gears_dll_copy, gears_dll)); 39 ASSERT_TRUE(PathService::Get(chrome::DIR_APP, &dir_app));
40
41 FilePath chrome_exe(dir_app.Append(
42 FilePath::FromWStringHack(chrome::kBrowserProcessExecutableName)));
43 ASSERT_TRUE(file_util::EvictFileFromSystemCache(chrome_exe));
44 #if defined(OS_WIN)
45 // TODO(port): these files do not exist on other platforms.
46 // Decide what to do.
47
48 FilePath chrome_dll(dir_app.Append(FILE_PATH_LITERAL("chrome.dll")));
49 ASSERT_TRUE(file_util::EvictFileFromSystemCache(chrome_dll));
50
51 FilePath gears_dll;
52 ASSERT_TRUE(PathService::Get(chrome::FILE_GEARS_PLUGIN, &gears_dll));
53 ASSERT_TRUE(file_util::EvictFileFromSystemCache(gears_dll));
54 #endif // defined(OS_WIN)
62 } 55 }
63 56
64 UITest::SetUp(); 57 UITest::SetUp();
65 TimeTicks end_time = TimeTicks::Now(); 58 TimeTicks end_time = TimeTicks::Now();
66 timings[i] = end_time - browser_launch_time_; 59 timings[i] = end_time - browser_launch_time_;
67 // TODO(beng): Can't shut down so quickly. Figure out why, and fix. If we 60 // TODO(beng): Can't shut down so quickly. Figure out why, and fix. If we
68 // do, we crash. 61 // do, we crash.
69 PlatformThread::Sleep(50); 62 PlatformThread::Sleep(50);
70 UITest::TearDown(); 63 UITest::TearDown();
71 64
72 if (i == 0) { 65 if (i == 0) {
73 // Re-use the profile data after first run so that the noise from 66 // Re-use the profile data after first run so that the noise from
74 // creating databases doesn't impact all the runs. 67 // creating databases doesn't impact all the runs.
75 clear_profile_ = false; 68 clear_profile_ = false;
76 } 69 }
77 } 70 }
78 71
79 ASSERT_TRUE(file_util::Delete(chrome_dll_copy, false));
80 ASSERT_TRUE(file_util::Delete(gears_dll_copy, false));
81
82 std::wstring times; 72 std::wstring times;
83 for (int i = 0; i < kNumCycles; ++i) 73 for (int i = 0; i < kNumCycles; ++i)
84 StringAppendF(&times, L"%.2f,", timings[i].InMillisecondsF()); 74 StringAppendF(&times, L"%.2f,", timings[i].InMillisecondsF());
85 PrintResultList(graph, L"", trace, times, L"ms", important); 75 PrintResultList(graph, L"", trace, times, L"ms", important);
86 } 76 }
87 77
88 protected: 78 protected:
89 std::string pages_; 79 std::string pages_;
90 }; 80 };
91 81
(...skipping 17 matching lines...) Expand all
109 void SetUp() { 99 void SetUp() {
110 std::wstring file_url; 100 std::wstring file_url;
111 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &file_url)); 101 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &file_url));
112 file_util::AppendToPath(&file_url, L"empty.html"); 102 file_util::AppendToPath(&file_url, L"empty.html");
113 ASSERT_TRUE(file_util::PathExists(file_url)); 103 ASSERT_TRUE(file_util::PathExists(file_url));
114 launch_arguments_.AppendLooseValue(file_url); 104 launch_arguments_.AppendLooseValue(file_url);
115 105
116 pages_ = WideToUTF8(file_url); 106 pages_ = WideToUTF8(file_url);
117 } 107 }
118 }; 108 };
109
119 } // namespace 110 } // namespace
120 111
121 TEST_F(StartupTest, Perf) { 112 TEST_F(StartupTest, Perf) {
122 RunStartupTest(L"warm", L"t", false /* not cold */, true /* important */); 113 RunStartupTest(L"warm", L"t", false /* not cold */, true /* important */);
123 } 114 }
124 115
116 #if defined(OS_WIN)
117 // TODO(port): Enable reference tests on other platforms.
118
125 TEST_F(StartupReferenceTest, Perf) { 119 TEST_F(StartupReferenceTest, Perf) {
126 RunStartupTest(L"warm", L"t_ref", false /* not cold */, 120 RunStartupTest(L"warm", L"t_ref", false /* not cold */,
127 true /* important */); 121 true /* important */);
128 } 122 }
129 123
130 // TODO(mpcomplete): Should we have reference timings for all these? 124 // TODO(mpcomplete): Should we have reference timings for all these?
131 125
132 TEST_F(StartupTest, PerfCold) { 126 TEST_F(StartupTest, PerfCold) {
133 RunStartupTest(L"cold", L"t", true /* cold */, false /* not important */); 127 RunStartupTest(L"cold", L"t", true /* cold */, false /* not important */);
134 } 128 }
135 129
136 TEST_F(StartupFileTest, PerfGears) { 130 TEST_F(StartupFileTest, PerfGears) {
137 RunStartupTest(L"warm", L"gears", false /* not cold */, 131 RunStartupTest(L"warm", L"gears", false /* not cold */,
138 false /* not important */); 132 false /* not important */);
139 } 133 }
140 134
141 TEST_F(StartupFileTest, PerfColdGears) { 135 TEST_F(StartupFileTest, PerfColdGears) {
142 RunStartupTest(L"cold", L"gears", true /* cold */, 136 RunStartupTest(L"cold", L"gears", true /* cold */,
143 false /* not important */); 137 false /* not important */);
144 } 138 }
145 139
140 #endif // defined(OS_WIN)
141
OLDNEW
« no previous file with comments | « chrome/test/automation/browser_proxy.cc ('k') | chrome/test/startup/startup_tests.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698