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 |