Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: chrome/browser/metrics/tracking_synchronizer.cc

Issue 8515027: Define the public version of the browser side RenderProcessHost interface. This interface is not ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/metrics/metrics_service.cc ('k') | chrome/browser/notifications/balloon_host.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/json/json_reader.h" 8 #include "base/json/json_reader.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/threading/thread.h" 12 #include "base/threading/thread.h"
13 #include "base/tracked_objects.h" 13 #include "base/tracked_objects.h"
14 #include "chrome/browser/ui/webui/tracing_ui.h" 14 #include "chrome/browser/ui/webui/tracing_ui.h"
15 #include "chrome/common/chrome_constants.h" 15 #include "chrome/common/chrome_constants.h"
16 #include "chrome/common/render_messages.h" 16 #include "chrome/common/render_messages.h"
17 #include "content/browser/renderer_host/render_process_host.h"
18 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/render_process_host.h"
19 19
20 using base::TimeTicks; 20 using base::TimeTicks;
21 using content::BrowserThread; 21 using content::BrowserThread;
22 22
23 namespace chrome_browser_metrics { 23 namespace chrome_browser_metrics {
24 24
25 // Negative numbers are never used as sequence numbers. We explicitly pick a 25 // Negative numbers are never used as sequence numbers. We explicitly pick a
26 // negative number that is "so negative" that even when we add one (as is done 26 // negative number that is "so negative" that even when we add one (as is done
27 // when we generated the next sequence number) that it will still be negative. 27 // when we generated the next sequence number) that it will still be negative.
28 // We have code that handles wrapping around on an overflow into negative 28 // We have code that handles wrapping around on an overflow into negative
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 sequence_number), 77 sequence_number),
78 60000); 78 60000);
79 } 79 }
80 80
81 // static 81 // static
82 void TrackingSynchronizer::SetTrackingStatus(bool enable) { 82 void TrackingSynchronizer::SetTrackingStatus(bool enable) {
83 // To iterate over all processes, or to send messages to the hosts, we need 83 // To iterate over all processes, or to send messages to the hosts, we need
84 // to be on the UI thread. 84 // to be on the UI thread.
85 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 85 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
86 86
87 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); 87 for (content::RenderProcessHost::iterator it(
88 content::RenderProcessHost::AllHostsIterator());
88 !it.IsAtEnd(); it.Advance()) { 89 !it.IsAtEnd(); it.Advance()) {
89 RenderProcessHost* render_process_host = it.GetCurrentValue(); 90 content::RenderProcessHost* render_process_host = it.GetCurrentValue();
90 DCHECK(render_process_host); 91 DCHECK(render_process_host);
91 // Ignore processes that don't have a connection, such as crashed tabs. 92 // Ignore processes that don't have a connection, such as crashed tabs.
92 if (!render_process_host->HasConnection()) 93 if (!render_process_host->HasConnection())
93 continue; 94 continue;
94 95
95 render_process_host->Send(new ChromeViewMsg_SetTrackingStatus(enable)); 96 render_process_host->Send(new ChromeViewMsg_SetTrackingStatus(enable));
96 } 97 }
97 } 98 }
98 99
99 // static 100 // static
100 void TrackingSynchronizer::IsTrackingEnabled(int process_id) { 101 void TrackingSynchronizer::IsTrackingEnabled(int process_id) {
101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
102 // To find the process, or to send messages to the hosts, we need to be on the 103 // To find the process, or to send messages to the hosts, we need to be on the
103 // UI thread. 104 // UI thread.
104 BrowserThread::PostTask( 105 BrowserThread::PostTask(
105 BrowserThread::UI, FROM_HERE, 106 BrowserThread::UI, FROM_HERE,
106 base::Bind( 107 base::Bind(
107 &TrackingSynchronizer::SetTrackingStatusInProcess, process_id)); 108 &TrackingSynchronizer::SetTrackingStatusInProcess, process_id));
108 } 109 }
109 110
110 // static 111 // static
111 void TrackingSynchronizer::SetTrackingStatusInProcess(int process_id) { 112 void TrackingSynchronizer::SetTrackingStatusInProcess(int process_id) {
112 // To find the process, or to send messages to the hosts, we need to be on the 113 // To find the process, or to send messages to the hosts, we need to be on the
113 // UI thread. 114 // UI thread.
114 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 115 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
115 116
116 bool enable = tracked_objects::ThreadData::tracking_status(); 117 bool enable = tracked_objects::ThreadData::tracking_status();
117 118
118 RenderProcessHost* process = RenderProcessHost::FromID(process_id); 119 content::RenderProcessHost* process =
120 content::RenderProcessHost::FromID(process_id);
119 // Ignore processes that don't have a connection, such as crashed tabs. 121 // Ignore processes that don't have a connection, such as crashed tabs.
120 if (!process || !process->HasConnection()) 122 if (!process || !process->HasConnection())
121 return; 123 return;
122 process->Send(new ChromeViewMsg_SetTrackingStatus(enable)); 124 process->Send(new ChromeViewMsg_SetTrackingStatus(enable));
123 } 125 }
124 126
125 // static 127 // static
126 void TrackingSynchronizer::DeserializeTrackingList( 128 void TrackingSynchronizer::DeserializeTrackingList(
127 int sequence_number, 129 int sequence_number,
128 const std::string& tracking_data, 130 const std::string& tracking_data,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 168
167 int sequence_number = GetNextAvailableSequenceNumber(); 169 int sequence_number = GetNextAvailableSequenceNumber();
168 170
169 // Initialize processes_pending with one because we are going to send 171 // Initialize processes_pending with one because we are going to send
170 // browser's ThreadData. 172 // browser's ThreadData.
171 RequestContext* request = new RequestContext( 173 RequestContext* request = new RequestContext(
172 callback_object, sequence_number, 1, TimeTicks::Now()); 174 callback_object, sequence_number, 1, TimeTicks::Now());
173 outstanding_requests_[sequence_number] = request; 175 outstanding_requests_[sequence_number] = request;
174 176
175 DCHECK_GT(request->processes_pending_, 0); 177 DCHECK_GT(request->processes_pending_, 0);
176 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); 178 for (content::RenderProcessHost::iterator it(
179 content::RenderProcessHost::AllHostsIterator());
177 !it.IsAtEnd(); it.Advance()) { 180 !it.IsAtEnd(); it.Advance()) {
178 RenderProcessHost* render_process_host = it.GetCurrentValue(); 181 content::RenderProcessHost* render_process_host = it.GetCurrentValue();
179 DCHECK(render_process_host); 182 DCHECK(render_process_host);
180 // Ignore processes that don't have a connection, such as crashed tabs. 183 // Ignore processes that don't have a connection, such as crashed tabs.
181 if (!render_process_host->HasConnection()) 184 if (!render_process_host->HasConnection())
182 continue; 185 continue;
183 186
184 ++request->processes_pending_; 187 ++request->processes_pending_;
185 if (!render_process_host->Send( 188 if (!render_process_host->Send(
186 new ChromeViewMsg_GetRendererTrackedData(sequence_number))) { 189 new ChromeViewMsg_GetRendererTrackedData(sequence_number))) {
187 DecrementPendingProcesses(sequence_number); 190 DecrementPendingProcesses(sequence_number);
188 } 191 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 // Watch out for wrapping to a negative number. 265 // Watch out for wrapping to a negative number.
263 if (last_used_sequence_number_ < 0) 266 if (last_used_sequence_number_ < 0)
264 last_used_sequence_number_ = 1; 267 last_used_sequence_number_ = 1;
265 return last_used_sequence_number_; 268 return last_used_sequence_number_;
266 } 269 }
267 270
268 // static 271 // static
269 TrackingSynchronizer* TrackingSynchronizer::tracking_synchronizer_ = NULL; 272 TrackingSynchronizer* TrackingSynchronizer::tracking_synchronizer_ = NULL;
270 273
271 } // namespace chrome_browser_metrics 274 } // namespace chrome_browser_metrics
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_service.cc ('k') | chrome/browser/notifications/balloon_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698