| 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 "chrome/test/perf/perf_test.h" | 5 #include "chrome/test/perf/perf_test.h" |
| 6 | 6 |
| 7 #include <stdio.h> | 7 #include <stdio.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/process/process.h" |
| 10 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
| 12 #include "chrome/test/base/chrome_process_util.h" | 13 #include "chrome/test/base/chrome_process_util.h" |
| 13 #include "testing/perf/perf_test.h" | 14 #include "testing/perf/perf_test.h" |
| 14 | 15 |
| 15 namespace perf_test { | 16 namespace perf_test { |
| 16 | 17 |
| 17 void PrintIOPerfInfo(const std::string& test_name, | 18 void PrintIOPerfInfo(const std::string& test_name, |
| 18 const ChromeProcessList& chrome_processes, | 19 const ChromeProcessList& chrome_processes, |
| 19 base::ProcessId browser_pid) { | 20 base::ProcessId browser_pid) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 45 size_t write_byte_b = 0; | 46 size_t write_byte_b = 0; |
| 46 size_t write_byte_r = 0; | 47 size_t write_byte_r = 0; |
| 47 size_t other_byte_b = 0; | 48 size_t other_byte_b = 0; |
| 48 size_t other_byte_r = 0; | 49 size_t other_byte_r = 0; |
| 49 size_t total_byte_b = 0; | 50 size_t total_byte_b = 0; |
| 50 size_t total_byte_r = 0; | 51 size_t total_byte_r = 0; |
| 51 | 52 |
| 52 std::string output; | 53 std::string output; |
| 53 ChromeProcessList::const_iterator it; | 54 ChromeProcessList::const_iterator it; |
| 54 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) { | 55 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) { |
| 55 base::ProcessHandle process_handle; | 56 base::Process process = base::Process::Open(*it); |
| 56 if (!base::OpenProcessHandle(*it, &process_handle)) { | 57 if (!process.IsValid()) { |
| 57 NOTREACHED(); | 58 NOTREACHED(); |
| 58 return output; | 59 return output; |
| 59 } | 60 } |
| 60 | 61 |
| 61 // TODO(sgk): if/when base::ProcessMetrics returns real stats on mac: | 62 // TODO(sgk): if/when base::ProcessMetrics returns real stats on mac: |
| 62 // scoped_ptr<base::ProcessMetrics> process_metrics( | 63 // scoped_ptr<base::ProcessMetrics> process_metrics( |
| 63 // base::ProcessMetrics::CreateProcessMetrics(process_handle)); | 64 // base::ProcessMetrics::CreateProcessMetrics(process.Handle())); |
| 64 scoped_ptr<ChromeTestProcessMetrics> process_metrics( | 65 scoped_ptr<ChromeTestProcessMetrics> process_metrics( |
| 65 ChromeTestProcessMetrics::CreateProcessMetrics(process_handle)); | 66 ChromeTestProcessMetrics::CreateProcessMetrics(process.Handle())); |
| 66 base::IoCounters io_counters; | 67 base::IoCounters io_counters; |
| 67 memset(&io_counters, 0, sizeof(io_counters)); | 68 memset(&io_counters, 0, sizeof(io_counters)); |
| 68 | 69 |
| 69 if (process_metrics.get()->GetIOCounters(&io_counters)) { | 70 if (process_metrics.get()->GetIOCounters(&io_counters)) { |
| 70 // Print out IO performance. We assume that the values can be | 71 // Print out IO performance. We assume that the values can be |
| 71 // converted to size_t (they're reported as ULONGLONG, 64-bit numbers). | 72 // converted to size_t (they're reported as ULONGLONG, 64-bit numbers). |
| 72 std::string chrome_name = (*it == browser_pid) ? "_b" : "_r"; | 73 std::string chrome_name = (*it == browser_pid) ? "_b" : "_r"; |
| 73 | 74 |
| 74 size_t read_op = static_cast<size_t>(io_counters.ReadOperationCount); | 75 size_t read_op = static_cast<size_t>(io_counters.ReadOperationCount); |
| 75 size_t write_op = static_cast<size_t>(io_counters.WriteOperationCount); | 76 size_t write_op = static_cast<size_t>(io_counters.WriteOperationCount); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 102 read_op_r += read_op; | 103 read_op_r += read_op; |
| 103 write_op_r += write_op; | 104 write_op_r += write_op; |
| 104 other_op_r += other_op; | 105 other_op_r += other_op; |
| 105 total_op_r += total_op; | 106 total_op_r += total_op; |
| 106 read_byte_r += read_byte; | 107 read_byte_r += read_byte; |
| 107 write_byte_r += write_byte; | 108 write_byte_r += write_byte; |
| 108 other_byte_r += other_byte; | 109 other_byte_r += other_byte; |
| 109 total_byte_r += total_byte; | 110 total_byte_r += total_byte; |
| 110 } | 111 } |
| 111 } | 112 } |
| 112 | |
| 113 base::CloseProcessHandle(process_handle); | |
| 114 } | 113 } |
| 115 | 114 |
| 116 std::string t_name(test_name); | 115 std::string t_name(test_name); |
| 117 AppendResult(output, | 116 AppendResult(output, |
| 118 "read_op_b", | 117 "read_op_b", |
| 119 std::string(), | 118 std::string(), |
| 120 "r_op_b" + t_name, | 119 "r_op_b" + t_name, |
| 121 read_op_b, | 120 read_op_b, |
| 122 "ops", | 121 "ops", |
| 123 false); | 122 false); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 size_t browser_peak_working_set_size = 0; | 260 size_t browser_peak_working_set_size = 0; |
| 262 size_t renderer_total_peak_virtual_size = 0; | 261 size_t renderer_total_peak_virtual_size = 0; |
| 263 size_t renderer_total_peak_working_set_size = 0; | 262 size_t renderer_total_peak_working_set_size = 0; |
| 264 size_t renderer_single_peak_virtual_size = 0; | 263 size_t renderer_single_peak_virtual_size = 0; |
| 265 size_t renderer_single_peak_working_set_size = 0; | 264 size_t renderer_single_peak_working_set_size = 0; |
| 266 #endif | 265 #endif |
| 267 | 266 |
| 268 std::string output; | 267 std::string output; |
| 269 ChromeProcessList::const_iterator it; | 268 ChromeProcessList::const_iterator it; |
| 270 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) { | 269 for (it = chrome_processes.begin(); it != chrome_processes.end(); ++it) { |
| 271 base::ProcessHandle process_handle; | 270 base::Process process = base::Process::Open(*it); |
| 272 if (!base::OpenProcessHandle(*it, &process_handle)) { | 271 if (!process.IsValid()) { |
| 273 NOTREACHED(); | 272 NOTREACHED(); |
| 274 return output; | 273 return output; |
| 275 } | 274 } |
| 276 | 275 |
| 277 // TODO(sgk): if/when base::ProcessMetrics returns real stats on mac: | 276 // TODO(sgk): if/when base::ProcessMetrics returns real stats on mac: |
| 278 // scoped_ptr<base::ProcessMetrics> process_metrics( | 277 // scoped_ptr<base::ProcessMetrics> process_metrics( |
| 279 // base::ProcessMetrics::CreateProcessMetrics(process_handle)); | 278 // base::ProcessMetrics::CreateProcessMetrics(process.Handle())); |
| 280 scoped_ptr<ChromeTestProcessMetrics> process_metrics( | 279 scoped_ptr<ChromeTestProcessMetrics> process_metrics( |
| 281 ChromeTestProcessMetrics::CreateProcessMetrics(process_handle)); | 280 ChromeTestProcessMetrics::CreateProcessMetrics(process.Handle())); |
| 282 | 281 |
| 283 size_t current_virtual_size = process_metrics->GetPagefileUsage(); | 282 size_t current_virtual_size = process_metrics->GetPagefileUsage(); |
| 284 size_t current_working_set_size = process_metrics->GetWorkingSetSize(); | 283 size_t current_working_set_size = process_metrics->GetWorkingSetSize(); |
| 285 | 284 |
| 286 if (*it == browser_pid) { | 285 if (*it == browser_pid) { |
| 287 browser_virtual_size = current_virtual_size; | 286 browser_virtual_size = current_virtual_size; |
| 288 browser_working_set_size = current_working_set_size; | 287 browser_working_set_size = current_working_set_size; |
| 289 } else { | 288 } else { |
| 290 renderer_virtual_size += current_virtual_size; | 289 renderer_virtual_size += current_virtual_size; |
| 291 renderer_working_set_size += current_working_set_size; | 290 renderer_working_set_size += current_working_set_size; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 303 if (peak_virtual_size > renderer_single_peak_virtual_size) { | 302 if (peak_virtual_size > renderer_single_peak_virtual_size) { |
| 304 renderer_single_peak_virtual_size = peak_virtual_size; | 303 renderer_single_peak_virtual_size = peak_virtual_size; |
| 305 } | 304 } |
| 306 if (peak_working_set_size > renderer_single_peak_working_set_size) { | 305 if (peak_working_set_size > renderer_single_peak_working_set_size) { |
| 307 renderer_single_peak_working_set_size = peak_working_set_size; | 306 renderer_single_peak_working_set_size = peak_working_set_size; |
| 308 } | 307 } |
| 309 renderer_total_peak_virtual_size += peak_virtual_size; | 308 renderer_total_peak_virtual_size += peak_virtual_size; |
| 310 renderer_total_peak_working_set_size += peak_working_set_size; | 309 renderer_total_peak_working_set_size += peak_working_set_size; |
| 311 } | 310 } |
| 312 #endif | 311 #endif |
| 313 | |
| 314 base::CloseProcessHandle(process_handle); | |
| 315 } | 312 } |
| 316 | 313 |
| 317 std::string trace_name(test_name); | 314 std::string trace_name(test_name); |
| 318 #if defined(OS_WIN) | 315 #if defined(OS_WIN) |
| 319 AppendResult(output, "vm_peak_b", "", "vm_pk_b" + trace_name, | 316 AppendResult(output, "vm_peak_b", "", "vm_pk_b" + trace_name, |
| 320 browser_peak_virtual_size, "bytes", | 317 browser_peak_virtual_size, "bytes", |
| 321 false /* not important */); | 318 false /* not important */); |
| 322 AppendResult(output, "ws_peak_b", "", "ws_pk_b" + trace_name, | 319 AppendResult(output, "ws_peak_b", "", "ws_pk_b" + trace_name, |
| 323 browser_peak_working_set_size, "bytes", | 320 browser_peak_working_set_size, "bytes", |
| 324 false /* not important */); | 321 false /* not important */); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 std::string(), | 400 std::string(), |
| 404 "proc_" + trace_name, | 401 "proc_" + trace_name, |
| 405 chrome_processes.size(), | 402 chrome_processes.size(), |
| 406 "count", | 403 "count", |
| 407 false /* not important */); | 404 false /* not important */); |
| 408 | 405 |
| 409 return output; | 406 return output; |
| 410 } | 407 } |
| 411 | 408 |
| 412 } // namespace perf_test | 409 } // namespace perf_test |
| OLD | NEW |