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

Side by Side Diff: chrome/test/page_cycler/page_cycler_test.cc

Issue 113217: Add memory stats for linux page cycler. On linux, we collect (Closed)
Patch Set: close process Created 11 years, 7 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/chrome.gyp ('k') | no next file » | 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-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/command_line.h" 6 #include "base/command_line.h"
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/process_util.h" 9 #include "base/process_util.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "chrome/browser/net/url_fixer_upper.h" 11 #include "chrome/browser/net/url_fixer_upper.h"
12 #include "chrome/common/chrome_constants.h" 12 #include "chrome/common/chrome_constants.h"
13 #include "chrome/common/chrome_paths.h" 13 #include "chrome/common/chrome_paths.h"
14 #include "chrome/common/chrome_switches.h" 14 #include "chrome/common/chrome_switches.h"
15 #include "chrome/test/automation/tab_proxy.h" 15 #include "chrome/test/automation/tab_proxy.h"
16 #include "chrome/test/automation/window_proxy.h" 16 #include "chrome/test/automation/window_proxy.h"
17 #include "chrome/test/chrome_process_util.h" 17 #include "chrome/test/chrome_process_util.h"
18 #include "chrome/test/ui/ui_test.h" 18 #include "chrome/test/ui/ui_test.h"
19 #include "chrome/test/perf/mem_usage.h"
20 #include "googleurl/src/gurl.h" 19 #include "googleurl/src/gurl.h"
21 #include "net/base/net_util.h" 20 #include "net/base/net_util.h"
22 21
23 #ifndef NDEBUG 22 #ifndef NDEBUG
24 #define TEST_ITERATIONS "2" 23 #define TEST_ITERATIONS "2"
25 #else 24 #else
26 #define TEST_ITERATIONS "10" 25 #define TEST_ITERATIONS "10"
27 #endif 26 #endif
28 27
29 // URL at which data files may be found for HTTP tests. The document root of 28 // URL at which data files may be found for HTTP tests. The document root of
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 76
78 std::string cookie; 77 std::string cookie;
79 ASSERT_TRUE(tab->GetCookieByName(test_url, "__pc_pages", &cookie)); 78 ASSERT_TRUE(tab->GetCookieByName(test_url, "__pc_pages", &cookie));
80 pages->assign(UTF8ToWide(cookie)); 79 pages->assign(UTF8ToWide(cookie));
81 ASSERT_FALSE(pages->empty()); 80 ASSERT_FALSE(pages->empty());
82 ASSERT_TRUE(tab->GetCookieByName(test_url, "__pc_timings", &cookie)); 81 ASSERT_TRUE(tab->GetCookieByName(test_url, "__pc_timings", &cookie));
83 timings->assign(cookie); 82 timings->assign(cookie);
84 ASSERT_FALSE(timings->empty()); 83 ASSERT_FALSE(timings->empty());
85 } 84 }
86 85
87 #if defined(OS_WIN)
88 // TODO(port): Port chrome_process_util and remove windowsisms.
89 void PrintIOPerfInfo(const char* test_name) { 86 void PrintIOPerfInfo(const char* test_name) {
90 FilePath data_dir; 87 FilePath data_dir;
91 PathService::Get(chrome::DIR_USER_DATA, &data_dir); 88 PathService::Get(chrome::DIR_USER_DATA, &data_dir);
92 int browser_process_pid = ChromeBrowserProcessId(data_dir); 89 int browser_process_pid = ChromeBrowserProcessId(data_dir);
93 ChromeProcessList chrome_processes(GetRunningChromeProcesses(data_dir)); 90 ChromeProcessList chrome_processes(GetRunningChromeProcesses(data_dir));
94 91
95 ChromeProcessList::const_iterator it; 92 ChromeProcessList::const_iterator it;
96 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) { 93 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) {
97 base::ProcessHandle process_handle; 94 base::ProcessHandle process_handle;
98 if (!base::OpenProcessHandle(*it, &process_handle)) { 95 if (!base::OpenProcessHandle(*it, &process_handle)) {
99 NOTREACHED(); 96 NOTREACHED();
100 } 97 }
101 98
102 scoped_ptr<base::ProcessMetrics> process_metrics; 99 scoped_ptr<base::ProcessMetrics> process_metrics;
103 IO_COUNTERS io_counters;
104 process_metrics.reset( 100 process_metrics.reset(
105 base::ProcessMetrics::CreateProcessMetrics(process_handle)); 101 base::ProcessMetrics::CreateProcessMetrics(process_handle));
106 ZeroMemory(&io_counters, sizeof(io_counters)); 102 IoCounters io_counters;
103 memset(&io_counters, 0, sizeof(io_counters));
107 104
108 if (process_metrics.get()->GetIOCounters(&io_counters)) { 105 if (process_metrics.get()->GetIOCounters(&io_counters)) {
109 // Print out IO performance. We assume that the values can be 106 // Print out IO performance. We assume that the values can be
110 // converted to size_t (they're reported as ULONGLONG, 64-bit numbers). 107 // converted to size_t (they're reported as ULONGLONG, 64-bit numbers).
111 std::string chrome_name = (*it == browser_process_pid) ? "_b" : "_r"; 108 std::string chrome_name = (*it == browser_process_pid) ? "_b" : "_r";
112 109
113 PrintResult("read_op", chrome_name, 110 PrintResult("read_op", chrome_name,
114 "r_op" + chrome_name + test_name, 111 "r_op" + chrome_name + test_name,
115 static_cast<size_t>(io_counters.ReadOperationCount), "", 112 static_cast<size_t>(io_counters.ReadOperationCount), "",
116 false /* not important */); 113 false /* not important */);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 } 153 }
157 154
158 void PrintMemoryUsageInfo(const char* test_name) { 155 void PrintMemoryUsageInfo(const char* test_name) {
159 FilePath data_dir; 156 FilePath data_dir;
160 PathService::Get(chrome::DIR_USER_DATA, &data_dir); 157 PathService::Get(chrome::DIR_USER_DATA, &data_dir);
161 int browser_process_pid = ChromeBrowserProcessId(data_dir); 158 int browser_process_pid = ChromeBrowserProcessId(data_dir);
162 ChromeProcessList chrome_processes(GetRunningChromeProcesses(data_dir)); 159 ChromeProcessList chrome_processes(GetRunningChromeProcesses(data_dir));
163 160
164 ChromeProcessList::const_iterator it; 161 ChromeProcessList::const_iterator it;
165 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) { 162 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) {
166 size_t peak_virtual_size; 163 base::ProcessHandle process_handle;
167 size_t current_virtual_size; 164 if (!base::OpenProcessHandle(*it, &process_handle)) {
168 size_t peak_working_set_size; 165 NOTREACHED();
169 size_t current_working_set_size; 166 }
170 if (GetMemoryInfo(*it, &peak_virtual_size, &current_virtual_size,
171 &peak_working_set_size, &current_working_set_size)) {
172 std::string chrome_name = (*it == browser_process_pid) ? "_b" : "_r";
173 167
174 std::string trace_name(test_name); 168 scoped_ptr<base::ProcessMetrics> process_metrics;
175 PrintResult("vm_peak", chrome_name, 169 process_metrics.reset(
176 "vm_pk" + chrome_name + trace_name, 170 base::ProcessMetrics::CreateProcessMetrics(process_handle));
177 peak_virtual_size, "bytes", 171
178 true /* important */); 172 std::string chrome_name = (*it == browser_process_pid) ? "_b" : "_r";
179 PrintResult("vm_final", chrome_name, 173
180 "vm_f" + chrome_name + trace_name, 174 std::string trace_name(test_name);
181 current_virtual_size, "bytes", 175 #if defined(OS_WIN)
182 false /* not important */); 176 PrintResult("vm_peak", chrome_name,
183 PrintResult("ws_peak", chrome_name, 177 "vm_pk" + chrome_name + trace_name,
184 "ws_pk" + chrome_name + trace_name, 178 process_metrics->GetPeakPagefileUsage(), "bytes",
185 peak_working_set_size, "bytes", 179 true /* important */);
186 true /* important */); 180 PrintResult("vm_final", chrome_name,
187 PrintResult("ws_final", chrome_name, 181 "vm_f" + chrome_name + trace_name,
188 "ws_pk" + chrome_name + trace_name, 182 process_metrics->GetPagefileUsage(), "bytes",
189 current_working_set_size, "bytes", 183 false /* not important */);
190 false /* not important */); 184 PrintResult("ws_peak", chrome_name,
191 } 185 "ws_pk" + chrome_name + trace_name,
186 process_metrics->GetPeakWorkingSetSize(), "bytes",
187 true /* important */);
188 PrintResult("ws_final", chrome_name,
189 "ws_f" + chrome_name + trace_name,
190 process_metrics->GetWorkingSetSize(), "bytes",
191 false /* not important */);
192 #elif defined(OS_LINUX)
193 PrintResult("vm_size_final", chrome_name,
194 "vm_size_f" + chrome_name + trace_name,
195 process_metrics->GetPagefileUsage(), "bytes",
196 true /* important */);
197 PrintResult("vm_rss_final", chrome_name,
198 "vm_rss_f" + chrome_name + trace_name,
199 process_metrics->GetWorkingSetSize(), "bytes",
200 true /* important */);
201 #else
202 NOTIMPLEMENTED();
203 #endif
204 base::CloseProcessHandle(process_handle);
192 } 205 }
193 } 206 }
194 #endif // defined(OS_WIN)
195 207
196 // When use_http is true, the test name passed here will be used directly in 208 // When use_http is true, the test name passed here will be used directly in
197 // the path to the test data, so it must be safe for use in a URL without 209 // the path to the test data, so it must be safe for use in a URL without
198 // escaping. (No pound (#), question mark (?), semicolon (;), non-ASCII, or 210 // escaping. (No pound (#), question mark (?), semicolon (;), non-ASCII, or
199 // other funny stuff.) 211 // other funny stuff.)
200 void RunTest(const char* name, bool use_http) { 212 void RunTest(const char* name, bool use_http) {
201 std::wstring pages; 213 std::wstring pages;
202 std::string timings; 214 std::string timings;
203 RunPageCycler(name, &pages, &timings, use_http); 215 RunPageCycler(name, &pages, &timings, use_http);
204 if (timings.empty()) 216 if (timings.empty())
205 return; 217 return;
206 218
207 #if defined(OS_WIN)
208 // TODO(port): Enable when Print{MemoryUsage,IOPerf}Info are ported.
209 PrintMemoryUsageInfo(""); 219 PrintMemoryUsageInfo("");
210 PrintIOPerfInfo(""); 220 PrintIOPerfInfo("");
211 #endif // defined(OS_WIN)
212 221
213 wprintf(L"\nPages: [%ls]\n", pages.c_str()); 222 wprintf(L"\nPages: [%ls]\n", pages.c_str());
214 PrintResultList("times", "", "t", timings, "ms", 223 PrintResultList("times", "", "t", timings, "ms",
215 true /* important */); 224 true /* important */);
216 } 225 }
217 }; 226 };
218 227
219 class PageCyclerReferenceTest : public PageCyclerTest { 228 class PageCyclerReferenceTest : public PageCyclerTest {
220 public: 229 public:
221 // override the browser directory that is used by UITest::SetUp to cause it 230 // override the browser directory that is used by UITest::SetUp to cause it
222 // to use the reference build instead. 231 // to use the reference build instead.
223 void SetUp() { 232 void SetUp() {
224 FilePath dir; 233 FilePath dir;
225 PathService::Get(chrome::DIR_TEST_TOOLS, &dir); 234 PathService::Get(chrome::DIR_TEST_TOOLS, &dir);
226 dir = dir.AppendASCII("reference_build"); 235 dir = dir.AppendASCII("reference_build");
236 #if defined(OS_WIN)
227 dir = dir.AppendASCII("chrome"); 237 dir = dir.AppendASCII("chrome");
238 #elif defined(OS_LINUX)
239 dir = dir.AppendASCII("chrome_linux");
240 #elif defined(OS_MACOSX)
241 dir = dir.AppendASCII("chrome_mac");
242 #endif
228 browser_directory_ = dir; 243 browser_directory_ = dir;
229 UITest::SetUp(); 244 UITest::SetUp();
230 } 245 }
231 246
232 void RunTest(const char* name, bool use_http) { 247 void RunTest(const char* name, bool use_http) {
233 std::wstring pages; 248 std::wstring pages;
234 std::string timings; 249 std::string timings;
235 RunPageCycler(name, &pages, &timings, use_http); 250 RunPageCycler(name, &pages, &timings, use_http);
236 if (timings.empty()) 251 if (timings.empty())
237 return; 252 return;
238 253
239 #if defined(OS_WIN)
240 // TODO(port): Enable when Print{MemoryUsage,IOPerf}Info are ported.
241 PrintMemoryUsageInfo("_ref"); 254 PrintMemoryUsageInfo("_ref");
242 PrintIOPerfInfo("_ref"); 255 PrintIOPerfInfo("_ref");
243 #endif // defined(OS_WIN)
244 256
245 PrintResultList("times", "", "t_ref", timings, "ms", 257 PrintResultList("times", "", "t_ref", timings, "ms",
246 true /* important */); 258 true /* important */);
247 } 259 }
248 }; 260 };
249 261
250 262
251 // file-URL tests 263 // file-URL tests
252 TEST_F(PageCyclerTest, MozFile) { 264 TEST_F(PageCyclerTest, MozFile) {
253 RunTest("moz", false); 265 RunTest("moz", false);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 RunTest("bloat", true); 352 RunTest("bloat", true);
341 } 353 }
342 354
343 #if !defined(OS_MACOSX) 355 #if !defined(OS_MACOSX)
344 TEST_F(PageCyclerReferenceTest, BloatHttp) { 356 TEST_F(PageCyclerReferenceTest, BloatHttp) {
345 RunTest("bloat", true); 357 RunTest("bloat", true);
346 } 358 }
347 #endif 359 #endif
348 360
349 } // namespace 361 } // namespace
OLDNEW
« no previous file with comments | « chrome/chrome.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698