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/browser/performance_monitor/performance_monitor.h" | 5 #include "chrome/browser/performance_monitor/performance_monitor.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 ProcessMetricsMetadata data; | 104 ProcessMetricsMetadata data; |
105 data.process_type = content::PROCESS_TYPE_RENDERER; | 105 data.process_type = content::PROCESS_TYPE_RENDERER; |
106 data.handle = host->GetHandle(); | 106 data.handle = host->GetHandle(); |
107 | 107 |
108 GatherMetricsForRenderProcess(host, &data); | 108 GatherMetricsForRenderProcess(host, &data); |
109 MarkProcessAsAlive(data, current_update_sequence); | 109 MarkProcessAsAlive(data, current_update_sequence); |
110 } | 110 } |
111 | 111 |
112 BrowserThread::PostTask( | 112 BrowserThread::PostTask( |
113 BrowserThread::IO, FROM_HERE, | 113 BrowserThread::IO, FROM_HERE, |
114 base::Bind(&PerformanceMonitor::GatherMetricsMapOnIOThread, | 114 base::BindOnce(&PerformanceMonitor::GatherMetricsMapOnIOThread, |
115 base::Unretained(this), current_update_sequence)); | 115 base::Unretained(this), current_update_sequence)); |
116 } | 116 } |
117 | 117 |
118 void PerformanceMonitor::MarkProcessAsAlive( | 118 void PerformanceMonitor::MarkProcessAsAlive( |
119 const ProcessMetricsMetadata& process_data, | 119 const ProcessMetricsMetadata& process_data, |
120 int current_update_sequence) { | 120 int current_update_sequence) { |
121 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 121 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
122 | 122 |
123 const base::ProcessHandle& handle = process_data.handle; | 123 const base::ProcessHandle& handle = process_data.handle; |
124 if (handle == base::kNullProcessHandle) { | 124 if (handle == base::kNullProcessHandle) { |
125 // Process may not be valid yet. | 125 // Process may not be valid yet. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 } | 160 } |
161 | 161 |
162 // Add the current (browser) process. | 162 // Add the current (browser) process. |
163 ProcessMetricsMetadata browser_process_data; | 163 ProcessMetricsMetadata browser_process_data; |
164 browser_process_data.process_type = content::PROCESS_TYPE_BROWSER; | 164 browser_process_data.process_type = content::PROCESS_TYPE_BROWSER; |
165 browser_process_data.handle = base::GetCurrentProcessHandle(); | 165 browser_process_data.handle = base::GetCurrentProcessHandle(); |
166 process_data_list->push_back(browser_process_data); | 166 process_data_list->push_back(browser_process_data); |
167 | 167 |
168 BrowserThread::PostTask( | 168 BrowserThread::PostTask( |
169 BrowserThread::UI, FROM_HERE, | 169 BrowserThread::UI, FROM_HERE, |
170 base::Bind(&PerformanceMonitor::MarkProcessesAsAliveOnUIThread, | 170 base::BindOnce(&PerformanceMonitor::MarkProcessesAsAliveOnUIThread, |
171 base::Unretained(this), | 171 base::Unretained(this), |
172 base::Passed(std::move(process_data_list)), | 172 base::Passed(std::move(process_data_list)), |
173 current_update_sequence)); | 173 current_update_sequence)); |
174 } | 174 } |
175 | 175 |
176 void PerformanceMonitor::MarkProcessesAsAliveOnUIThread( | 176 void PerformanceMonitor::MarkProcessesAsAliveOnUIThread( |
177 std::unique_ptr<std::vector<ProcessMetricsMetadata>> process_data_list, | 177 std::unique_ptr<std::vector<ProcessMetricsMetadata>> process_data_list, |
178 int current_update_sequence) { | 178 int current_update_sequence) { |
179 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 179 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
180 for (const ProcessMetricsMetadata& data : *process_data_list) | 180 for (const ProcessMetricsMetadata& data : *process_data_list) |
181 MarkProcessAsAlive(data, current_update_sequence); | 181 MarkProcessAsAlive(data, current_update_sequence); |
182 | 182 |
183 BrowserThread::PostTask( | 183 BrowserThread::PostTask( |
184 BrowserThread::IO, FROM_HERE, | 184 BrowserThread::IO, FROM_HERE, |
185 base::Bind(&PerformanceMonitor::UpdateMetricsOnIOThread, | 185 base::BindOnce(&PerformanceMonitor::UpdateMetricsOnIOThread, |
186 base::Unretained(this), current_update_sequence)); | 186 base::Unretained(this), current_update_sequence)); |
187 } | 187 } |
188 | 188 |
189 void PerformanceMonitor::UpdateMetricsOnIOThread(int current_update_sequence) { | 189 void PerformanceMonitor::UpdateMetricsOnIOThread(int current_update_sequence) { |
190 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 190 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
191 // Update metrics for all watched processes; remove dead entries from the map. | 191 // Update metrics for all watched processes; remove dead entries from the map. |
192 MetricsMap::iterator iter = metrics_map_.begin(); | 192 MetricsMap::iterator iter = metrics_map_.begin(); |
193 while (iter != metrics_map_.end()) { | 193 while (iter != metrics_map_.end()) { |
194 ProcessMetricsHistory* process_metrics = iter->second.get(); | 194 ProcessMetricsHistory* process_metrics = iter->second.get(); |
195 if (process_metrics->last_update_sequence() != current_update_sequence) { | 195 if (process_metrics->last_update_sequence() != current_update_sequence) { |
196 // Not touched this iteration; let's get rid of it. | 196 // Not touched this iteration; let's get rid of it. |
197 metrics_map_.erase(iter++); | 197 metrics_map_.erase(iter++); |
198 } else { | 198 } else { |
199 process_metrics->SampleMetrics(); | 199 process_metrics->SampleMetrics(); |
200 ++iter; | 200 ++iter; |
201 } | 201 } |
202 } | 202 } |
203 | 203 |
204 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 204 BrowserThread::PostTask( |
205 base::Bind(&PerformanceMonitor::RunTriggersUIThread, | 205 BrowserThread::UI, FROM_HERE, |
206 base::Unretained(this))); | 206 base::BindOnce(&PerformanceMonitor::RunTriggersUIThread, |
| 207 base::Unretained(this))); |
207 } | 208 } |
208 | 209 |
209 void PerformanceMonitor::RunTriggersUIThread() { | 210 void PerformanceMonitor::RunTriggersUIThread() { |
210 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 211 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
211 for (auto& metrics : metrics_map_) | 212 for (auto& metrics : metrics_map_) |
212 metrics.second->RunPerformanceTriggers(); | 213 metrics.second->RunPerformanceTriggers(); |
213 | 214 |
214 StartGatherCycle(); | 215 StartGatherCycle(); |
215 } | 216 } |
216 | 217 |
217 } // namespace performance_monitor | 218 } // namespace performance_monitor |
OLD | NEW |