| 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 |