| 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 "content/browser/histogram_controller.h" | 5 #include "content/browser/histogram_controller.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/process_handle.h" | 9 #include "base/process/process_handle.h" |
| 10 #include "content/browser/histogram_subscriber.h" | 10 #include "content/browser/histogram_subscriber.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 | 23 |
| 24 HistogramController::HistogramController() : subscriber_(NULL) { | 24 HistogramController::HistogramController() : subscriber_(NULL) { |
| 25 } | 25 } |
| 26 | 26 |
| 27 HistogramController::~HistogramController() { | 27 HistogramController::~HistogramController() { |
| 28 } | 28 } |
| 29 | 29 |
| 30 void HistogramController::OnPendingProcesses(int sequence_number, | 30 void HistogramController::OnPendingProcesses(int sequence_number, |
| 31 int pending_processes, | 31 int pending_processes, |
| 32 bool end) { | 32 bool end) { |
| 33 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 33 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 34 if (subscriber_) | 34 if (subscriber_) |
| 35 subscriber_->OnPendingProcesses(sequence_number, pending_processes, end); | 35 subscriber_->OnPendingProcesses(sequence_number, pending_processes, end); |
| 36 } | 36 } |
| 37 | 37 |
| 38 void HistogramController::OnHistogramDataCollected( | 38 void HistogramController::OnHistogramDataCollected( |
| 39 int sequence_number, | 39 int sequence_number, |
| 40 const std::vector<std::string>& pickled_histograms) { | 40 const std::vector<std::string>& pickled_histograms) { |
| 41 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 41 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| 42 BrowserThread::PostTask( | 42 BrowserThread::PostTask( |
| 43 BrowserThread::UI, FROM_HERE, | 43 BrowserThread::UI, FROM_HERE, |
| 44 base::Bind(&HistogramController::OnHistogramDataCollected, | 44 base::Bind(&HistogramController::OnHistogramDataCollected, |
| 45 base::Unretained(this), | 45 base::Unretained(this), |
| 46 sequence_number, | 46 sequence_number, |
| 47 pickled_histograms)); | 47 pickled_histograms)); |
| 48 return; | 48 return; |
| 49 } | 49 } |
| 50 | 50 |
| 51 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 51 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 52 if (subscriber_) { | 52 if (subscriber_) { |
| 53 subscriber_->OnHistogramDataCollected(sequence_number, | 53 subscriber_->OnHistogramDataCollected(sequence_number, |
| 54 pickled_histograms); | 54 pickled_histograms); |
| 55 } | 55 } |
| 56 } | 56 } |
| 57 | 57 |
| 58 void HistogramController::Register(HistogramSubscriber* subscriber) { | 58 void HistogramController::Register(HistogramSubscriber* subscriber) { |
| 59 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 59 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 60 DCHECK(!subscriber_); | 60 DCHECK(!subscriber_); |
| 61 subscriber_ = subscriber; | 61 subscriber_ = subscriber; |
| 62 } | 62 } |
| 63 | 63 |
| 64 void HistogramController::Unregister( | 64 void HistogramController::Unregister( |
| 65 const HistogramSubscriber* subscriber) { | 65 const HistogramSubscriber* subscriber) { |
| 66 DCHECK_EQ(subscriber_, subscriber); | 66 DCHECK_EQ(subscriber_, subscriber); |
| 67 subscriber_ = NULL; | 67 subscriber_ = NULL; |
| 68 } | 68 } |
| 69 | 69 |
| 70 void HistogramController::GetHistogramDataFromChildProcesses( | 70 void HistogramController::GetHistogramDataFromChildProcesses( |
| 71 int sequence_number) { | 71 int sequence_number) { |
| 72 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 72 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 73 | 73 |
| 74 int pending_processes = 0; | 74 int pending_processes = 0; |
| 75 for (BrowserChildProcessHostIterator iter; !iter.Done(); ++iter) { | 75 for (BrowserChildProcessHostIterator iter; !iter.Done(); ++iter) { |
| 76 const ChildProcessData& data = iter.GetData(); | 76 const ChildProcessData& data = iter.GetData(); |
| 77 int type = data.process_type; | 77 int type = data.process_type; |
| 78 if (type != PROCESS_TYPE_PLUGIN && | 78 if (type != PROCESS_TYPE_PLUGIN && |
| 79 type != PROCESS_TYPE_GPU && | 79 type != PROCESS_TYPE_GPU && |
| 80 type != PROCESS_TYPE_PPAPI_PLUGIN && | 80 type != PROCESS_TYPE_PPAPI_PLUGIN && |
| 81 type != PROCESS_TYPE_PPAPI_BROKER) { | 81 type != PROCESS_TYPE_PPAPI_BROKER) { |
| 82 continue; | 82 continue; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 99 FROM_HERE, | 99 FROM_HERE, |
| 100 base::Bind( | 100 base::Bind( |
| 101 &HistogramController::OnPendingProcesses, | 101 &HistogramController::OnPendingProcesses, |
| 102 base::Unretained(this), | 102 base::Unretained(this), |
| 103 sequence_number, | 103 sequence_number, |
| 104 pending_processes, | 104 pending_processes, |
| 105 true)); | 105 true)); |
| 106 } | 106 } |
| 107 | 107 |
| 108 void HistogramController::GetHistogramData(int sequence_number) { | 108 void HistogramController::GetHistogramData(int sequence_number) { |
| 109 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 109 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 110 | 110 |
| 111 int pending_processes = 0; | 111 int pending_processes = 0; |
| 112 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); | 112 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); |
| 113 !it.IsAtEnd(); it.Advance()) { | 113 !it.IsAtEnd(); it.Advance()) { |
| 114 ++pending_processes; | 114 ++pending_processes; |
| 115 if (!it.GetCurrentValue()->Send( | 115 if (!it.GetCurrentValue()->Send( |
| 116 new ChildProcessMsg_GetChildHistogramData(sequence_number))) { | 116 new ChildProcessMsg_GetChildHistogramData(sequence_number))) { |
| 117 --pending_processes; | 117 --pending_processes; |
| 118 } | 118 } |
| 119 } | 119 } |
| 120 OnPendingProcesses(sequence_number, pending_processes, false); | 120 OnPendingProcesses(sequence_number, pending_processes, false); |
| 121 | 121 |
| 122 BrowserThread::PostTask( | 122 BrowserThread::PostTask( |
| 123 BrowserThread::IO, | 123 BrowserThread::IO, |
| 124 FROM_HERE, | 124 FROM_HERE, |
| 125 base::Bind(&HistogramController::GetHistogramDataFromChildProcesses, | 125 base::Bind(&HistogramController::GetHistogramDataFromChildProcesses, |
| 126 base::Unretained(this), | 126 base::Unretained(this), |
| 127 sequence_number)); | 127 sequence_number)); |
| 128 } | 128 } |
| 129 | 129 |
| 130 } // namespace content | 130 } // namespace content |
| OLD | NEW |