OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/base/chrome_process_util.h" | 5 #include "chrome/test/base/chrome_process_util.h" |
6 | 6 |
| 7 #include <set> |
| 8 #include <string> |
7 #include <vector> | 9 #include <vector> |
8 #include <set> | |
9 | 10 |
10 #include "base/command_line.h" | 11 #include "base/command_line.h" |
11 #include "base/process_util.h" | 12 #include "base/process_util.h" |
12 #include "base/time.h" | 13 #include "base/time.h" |
13 #include "chrome/common/chrome_constants.h" | 14 #include "chrome/common/chrome_constants.h" |
14 #include "chrome/test/base/test_switches.h" | 15 #include "chrome/test/base/test_switches.h" |
15 #include "content/common/result_codes.h" | 16 #include "content/common/result_codes.h" |
16 | 17 |
17 using base::TimeDelta; | 18 using base::TimeDelta; |
18 using base::TimeTicks; | 19 using base::TimeTicks; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 DISALLOW_COPY_AND_ASSIGN(ChildProcessFilter); | 53 DISALLOW_COPY_AND_ASSIGN(ChildProcessFilter); |
53 }; | 54 }; |
54 | 55 |
55 const FilePath::CharType* GetRunningBrowserExecutableName() { | 56 const FilePath::CharType* GetRunningBrowserExecutableName() { |
56 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); | 57 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
57 if (cmd_line->HasSwitch(switches::kEnableChromiumBranding)) | 58 if (cmd_line->HasSwitch(switches::kEnableChromiumBranding)) |
58 return chrome::kBrowserProcessExecutableNameChromium; | 59 return chrome::kBrowserProcessExecutableNameChromium; |
59 return chrome::kBrowserProcessExecutableName; | 60 return chrome::kBrowserProcessExecutableName; |
60 } | 61 } |
61 | 62 |
62 const FilePath::CharType* GetRunningHelperExecutableName() { | 63 std::vector<FilePath::StringType> GetRunningHelperExecutableNames() { |
| 64 FilePath::StringType name; |
63 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); | 65 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
64 if (cmd_line->HasSwitch(switches::kEnableChromiumBranding)) | 66 if (cmd_line->HasSwitch(switches::kEnableChromiumBranding)) { |
65 return chrome::kHelperProcessExecutableNameChromium; | 67 name = chrome::kHelperProcessExecutableNameChromium; |
66 return chrome::kHelperProcessExecutableName; | 68 } else { |
| 69 name = chrome::kHelperProcessExecutableName; |
| 70 } |
| 71 |
| 72 std::vector<FilePath::StringType> names; |
| 73 names.push_back(name); |
| 74 |
| 75 #if defined(OS_MACOSX) |
| 76 // The helper might show up as these different flavors depending on the |
| 77 // executable flags required. |
| 78 for (const char* const* suffix = chrome::kHelperFlavorSuffixes; |
| 79 *suffix; |
| 80 ++suffix) { |
| 81 std::string flavor_name(name); |
| 82 flavor_name.append(1, ' '); |
| 83 flavor_name.append(*suffix); |
| 84 names.push_back(flavor_name); |
| 85 } |
| 86 #endif |
| 87 |
| 88 return names; |
67 } | 89 } |
68 | 90 |
69 ChromeProcessList GetRunningChromeProcesses(base::ProcessId browser_pid) { | 91 ChromeProcessList GetRunningChromeProcesses(base::ProcessId browser_pid) { |
70 const FilePath::CharType* executable_name = GetRunningBrowserExecutableName(); | 92 const FilePath::CharType* executable_name = GetRunningBrowserExecutableName(); |
71 ChromeProcessList result; | 93 ChromeProcessList result; |
72 if (browser_pid == static_cast<base::ProcessId>(-1)) | 94 if (browser_pid == static_cast<base::ProcessId>(-1)) |
73 return result; | 95 return result; |
74 | 96 |
75 ChildProcessFilter filter(browser_pid); | 97 ChildProcessFilter filter(browser_pid); |
76 base::NamedProcessIterator it(executable_name, &filter); | 98 base::NamedProcessIterator it(executable_name, &filter); |
(...skipping 11 matching lines...) Expand all Loading... |
88 while (const base::ProcessEntry* process_entry = it.NextProcessEntry()) | 110 while (const base::ProcessEntry* process_entry = it.NextProcessEntry()) |
89 result.push_back(process_entry->pid()); | 111 result.push_back(process_entry->pid()); |
90 } | 112 } |
91 #endif // defined(OS_POSIX) && !defined(OS_MACOSX) | 113 #endif // defined(OS_POSIX) && !defined(OS_MACOSX) |
92 | 114 |
93 #if defined(OS_POSIX) | 115 #if defined(OS_POSIX) |
94 // On Mac OS X we run the subprocesses with a different bundle, and | 116 // On Mac OS X we run the subprocesses with a different bundle, and |
95 // on Linux via /proc/self/exe, so they end up with a different | 117 // on Linux via /proc/self/exe, so they end up with a different |
96 // name. We must collect them in a second pass. | 118 // name. We must collect them in a second pass. |
97 { | 119 { |
98 ChildProcessFilter filter(browser_pid); | 120 std::vector<FilePath::StringType> names = GetRunningHelperExecutableNames(); |
99 base::NamedProcessIterator it(GetRunningHelperExecutableName(), &filter); | 121 for (size_t i = 0; i < names.size(); ++i) { |
100 while (const base::ProcessEntry* process_entry = it.NextProcessEntry()) | 122 FilePath::StringType name = names[i]; |
101 result.push_back(process_entry->pid()); | 123 ChildProcessFilter filter(browser_pid); |
| 124 base::NamedProcessIterator it(name, &filter); |
| 125 while (const base::ProcessEntry* process_entry = it.NextProcessEntry()) |
| 126 result.push_back(process_entry->pid()); |
| 127 } |
102 } | 128 } |
103 #endif // defined(OS_MACOSX) | 129 #endif // defined(OS_POSIX) |
104 | 130 |
105 result.push_back(browser_pid); | 131 result.push_back(browser_pid); |
106 | 132 |
107 return result; | 133 return result; |
108 } | 134 } |
109 | 135 |
110 #if !defined(OS_MACOSX) | 136 #if !defined(OS_MACOSX) |
111 | 137 |
112 size_t ChromeTestProcessMetrics::GetPagefileUsage() { | 138 size_t ChromeTestProcessMetrics::GetPagefileUsage() { |
113 return process_metrics_->GetPagefileUsage(); | 139 return process_metrics_->GetPagefileUsage(); |
(...skipping 11 matching lines...) Expand all Loading... |
125 base::ProcessHandle process) { | 151 base::ProcessHandle process) { |
126 #if !defined(OS_MACOSX) | 152 #if !defined(OS_MACOSX) |
127 process_metrics_.reset( | 153 process_metrics_.reset( |
128 base::ProcessMetrics::CreateProcessMetrics(process)); | 154 base::ProcessMetrics::CreateProcessMetrics(process)); |
129 #else | 155 #else |
130 process_metrics_.reset( | 156 process_metrics_.reset( |
131 base::ProcessMetrics::CreateProcessMetrics(process, NULL)); | 157 base::ProcessMetrics::CreateProcessMetrics(process, NULL)); |
132 #endif | 158 #endif |
133 process_handle_ = process; | 159 process_handle_ = process; |
134 } | 160 } |
OLD | NEW |