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/metrics/tracking_synchronizer.h" | 5 #include "chrome/browser/metrics/tracking_synchronizer.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "base/process_util.h" | 9 #include "base/process_util.h" |
10 #include "base/threading/thread.h" | 10 #include "base/threading/thread.h" |
11 #include "base/tracked_objects.h" | 11 #include "base/tracked_objects.h" |
12 #include "chrome/browser/metrics/tracking_synchronizer_observer.h" | 12 #include "chrome/browser/metrics/tracking_synchronizer_observer.h" |
| 13 #include "chrome/common/chrome_process_type.h" |
13 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.h" |
14 #include "content/public/browser/profiler_controller.h" | 15 #include "content/public/browser/profiler_controller.h" |
15 | 16 |
16 using base::TimeTicks; | 17 using base::TimeTicks; |
17 using content::BrowserThread; | 18 using content::BrowserThread; |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 // Negative numbers are never used as sequence numbers. We explicitly pick a | 22 // Negative numbers are never used as sequence numbers. We explicitly pick a |
22 // negative number that is "so negative" that even when we add one (as is done | 23 // negative number that is "so negative" that even when we add one (as is done |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 if (!request) | 227 if (!request) |
227 return; | 228 return; |
228 request->AddProcessesPending(pending_processes); | 229 request->AddProcessesPending(pending_processes); |
229 request->SetReceivedProcessGroupCount(end); | 230 request->SetReceivedProcessGroupCount(end); |
230 request->DeleteIfAllDone(); | 231 request->DeleteIfAllDone(); |
231 } | 232 } |
232 | 233 |
233 void TrackingSynchronizer::OnProfilerDataCollected( | 234 void TrackingSynchronizer::OnProfilerDataCollected( |
234 int sequence_number, | 235 int sequence_number, |
235 const tracked_objects::ProcessDataSnapshot& profiler_data, | 236 const tracked_objects::ProcessDataSnapshot& profiler_data, |
236 content::ProcessType process_type) { | 237 int process_type) { |
237 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 238 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
238 DecrementPendingProcessesAndSendData(sequence_number, profiler_data, | 239 DecrementPendingProcessesAndSendData(sequence_number, profiler_data, |
239 process_type); | 240 process_type); |
240 } | 241 } |
241 | 242 |
242 int TrackingSynchronizer::RegisterAndNotifyAllProcesses( | 243 int TrackingSynchronizer::RegisterAndNotifyAllProcesses( |
243 const base::WeakPtr<TrackingSynchronizerObserver>& callback_object) { | 244 const base::WeakPtr<TrackingSynchronizerObserver>& callback_object) { |
244 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 245 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
245 | 246 |
246 int sequence_number = GetNextAvailableSequenceNumber(); | 247 int sequence_number = GetNextAvailableSequenceNumber(); |
(...skipping 12 matching lines...) Expand all Loading... |
259 tracked_objects::ThreadData::Snapshot(false, &process_data); | 260 tracked_objects::ThreadData::Snapshot(false, &process_data); |
260 DecrementPendingProcessesAndSendData(sequence_number, process_data, | 261 DecrementPendingProcessesAndSendData(sequence_number, process_data, |
261 content::PROCESS_TYPE_BROWSER); | 262 content::PROCESS_TYPE_BROWSER); |
262 | 263 |
263 return sequence_number; | 264 return sequence_number; |
264 } | 265 } |
265 | 266 |
266 void TrackingSynchronizer::DecrementPendingProcessesAndSendData( | 267 void TrackingSynchronizer::DecrementPendingProcessesAndSendData( |
267 int sequence_number, | 268 int sequence_number, |
268 const tracked_objects::ProcessDataSnapshot& profiler_data, | 269 const tracked_objects::ProcessDataSnapshot& profiler_data, |
269 content::ProcessType process_type) { | 270 int process_type) { |
270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 271 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
271 | 272 |
272 RequestContext* request = RequestContext::GetRequestContext(sequence_number); | 273 RequestContext* request = RequestContext::GetRequestContext(sequence_number); |
273 if (!request) | 274 if (!request) |
274 return; | 275 return; |
275 | 276 |
276 if (request->callback_object_) { | 277 if (request->callback_object_) { |
277 request->callback_object_->ReceivedProfilerData(profiler_data, | 278 request->callback_object_->ReceivedProfilerData(profiler_data, |
278 process_type); | 279 process_type); |
279 } | 280 } |
280 | 281 |
281 // Delete request if we have heard back from all child processes. | 282 // Delete request if we have heard back from all child processes. |
282 request->DecrementProcessesPending(); | 283 request->DecrementProcessesPending(); |
283 request->DeleteIfAllDone(); | 284 request->DeleteIfAllDone(); |
284 } | 285 } |
285 | 286 |
286 int TrackingSynchronizer::GetNextAvailableSequenceNumber() { | 287 int TrackingSynchronizer::GetNextAvailableSequenceNumber() { |
287 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 288 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
288 | 289 |
289 ++last_used_sequence_number_; | 290 ++last_used_sequence_number_; |
290 | 291 |
291 // Watch out for wrapping to a negative number. | 292 // Watch out for wrapping to a negative number. |
292 if (last_used_sequence_number_ < 0) | 293 if (last_used_sequence_number_ < 0) |
293 last_used_sequence_number_ = 1; | 294 last_used_sequence_number_ = 1; |
294 return last_used_sequence_number_; | 295 return last_used_sequence_number_; |
295 } | 296 } |
296 | 297 |
297 } // namespace chrome_browser_metrics | 298 } // namespace chrome_browser_metrics |
OLD | NEW |