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

Side by Side Diff: content/browser/histogram_synchronizer.cc

Issue 14335017: content: Use base::MessageLoop. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 7 months 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
OLDNEW
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_synchronizer.h" 5 #include "content/browser/histogram_synchronizer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 HistogramSynchronizer* current_synchronizer = 194 HistogramSynchronizer* current_synchronizer =
195 HistogramSynchronizer::GetInstance(); 195 HistogramSynchronizer::GetInstance();
196 if (current_synchronizer == NULL) 196 if (current_synchronizer == NULL)
197 return; 197 return;
198 198
199 current_synchronizer->RegisterAndNotifyAllProcesses( 199 current_synchronizer->RegisterAndNotifyAllProcesses(
200 HistogramSynchronizer::UNKNOWN, 200 HistogramSynchronizer::UNKNOWN,
201 base::TimeDelta::FromMinutes(1)); 201 base::TimeDelta::FromMinutes(1));
202 } 202 }
203 203
204 void FetchHistogramsAsynchronously(MessageLoop* callback_thread, 204 void FetchHistogramsAsynchronously(base::MessageLoop* callback_thread,
205 const base::Closure& callback, 205 const base::Closure& callback,
206 base::TimeDelta wait_time) { 206 base::TimeDelta wait_time) {
207 HistogramSynchronizer::FetchHistogramsAsynchronously( 207 HistogramSynchronizer::FetchHistogramsAsynchronously(
208 callback_thread, callback, wait_time); 208 callback_thread, callback, wait_time);
209 } 209 }
210 210
211 // static 211 // static
212 void HistogramSynchronizer::FetchHistogramsAsynchronously( 212 void HistogramSynchronizer::FetchHistogramsAsynchronously(
213 MessageLoop* callback_thread, 213 base::MessageLoop* callback_thread,
214 const base::Closure& callback, 214 const base::Closure& callback,
215 base::TimeDelta wait_time) { 215 base::TimeDelta wait_time) {
216 DCHECK(callback_thread != NULL); 216 DCHECK(callback_thread != NULL);
217 DCHECK(!callback.is_null()); 217 DCHECK(!callback.is_null());
218 218
219 HistogramSynchronizer* current_synchronizer = 219 HistogramSynchronizer* current_synchronizer =
220 HistogramSynchronizer::GetInstance(); 220 HistogramSynchronizer::GetInstance();
221 current_synchronizer->SetCallbackTaskAndThread( 221 current_synchronizer->SetCallbackTaskAndThread(
222 callback_thread, callback); 222 callback_thread, callback);
223 223
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 if (!request) 281 if (!request)
282 return; 282 return;
283 283
284 // Delete request if we have heard back from all child processes. 284 // Delete request if we have heard back from all child processes.
285 request->DecrementProcessesPending(); 285 request->DecrementProcessesPending();
286 request->DeleteIfAllDone(); 286 request->DeleteIfAllDone();
287 } 287 }
288 288
289 void HistogramSynchronizer::SetCallbackTaskAndThread( 289 void HistogramSynchronizer::SetCallbackTaskAndThread(
290 MessageLoop* callback_thread, 290 base::MessageLoop* callback_thread,
291 const base::Closure& callback) { 291 const base::Closure& callback) {
292 base::Closure old_callback; 292 base::Closure old_callback;
293 MessageLoop* old_thread = NULL; 293 base::MessageLoop* old_thread = NULL;
294 { 294 {
295 base::AutoLock auto_lock(lock_); 295 base::AutoLock auto_lock(lock_);
296 old_callback = callback_; 296 old_callback = callback_;
297 callback_ = callback; 297 callback_ = callback;
298 old_thread = callback_thread_; 298 old_thread = callback_thread_;
299 callback_thread_ = callback_thread; 299 callback_thread_ = callback_thread;
300 // Prevent premature calling of our new callbacks. 300 // Prevent premature calling of our new callbacks.
301 async_sequence_number_ = kNeverUsableSequenceNumber; 301 async_sequence_number_ = kNeverUsableSequenceNumber;
302 } 302 }
303 // Just in case there was a task pending.... 303 // Just in case there was a task pending....
304 InternalPostTask(old_thread, old_callback); 304 InternalPostTask(old_thread, old_callback);
305 } 305 }
306 306
307 void HistogramSynchronizer::ForceHistogramSynchronizationDoneCallback( 307 void HistogramSynchronizer::ForceHistogramSynchronizationDoneCallback(
308 int sequence_number) { 308 int sequence_number) {
309 base::Closure callback; 309 base::Closure callback;
310 MessageLoop* thread = NULL; 310 base::MessageLoop* thread = NULL;
311 { 311 {
312 base::AutoLock lock(lock_); 312 base::AutoLock lock(lock_);
313 if (sequence_number != async_sequence_number_) 313 if (sequence_number != async_sequence_number_)
314 return; 314 return;
315 callback = callback_; 315 callback = callback_;
316 thread = callback_thread_; 316 thread = callback_thread_;
317 callback_.Reset(); 317 callback_.Reset();
318 callback_thread_ = NULL; 318 callback_thread_ = NULL;
319 } 319 }
320 InternalPostTask(thread, callback); 320 InternalPostTask(thread, callback);
321 } 321 }
322 322
323 void HistogramSynchronizer::InternalPostTask(MessageLoop* thread, 323 void HistogramSynchronizer::InternalPostTask(base::MessageLoop* thread,
324 const base::Closure& callback) { 324 const base::Closure& callback) {
325 if (callback.is_null() || !thread) 325 if (callback.is_null() || !thread)
326 return; 326 return;
327 thread->PostTask(FROM_HERE, callback); 327 thread->PostTask(FROM_HERE, callback);
328 } 328 }
329 329
330 int HistogramSynchronizer::GetNextAvailableSequenceNumber( 330 int HistogramSynchronizer::GetNextAvailableSequenceNumber(
331 ProcessHistogramRequester requester) { 331 ProcessHistogramRequester requester) {
332 base::AutoLock auto_lock(lock_); 332 base::AutoLock auto_lock(lock_);
333 ++last_used_sequence_number_; 333 ++last_used_sequence_number_;
334 // Watch out for wrapping to a negative number. 334 // Watch out for wrapping to a negative number.
335 if (last_used_sequence_number_ < 0) { 335 if (last_used_sequence_number_ < 0) {
336 // Bypass the reserved number, which is used when a renderer spontaneously 336 // Bypass the reserved number, which is used when a renderer spontaneously
337 // decides to send some histogram data. 337 // decides to send some histogram data.
338 last_used_sequence_number_ = 338 last_used_sequence_number_ =
339 kHistogramSynchronizerReservedSequenceNumber + 1; 339 kHistogramSynchronizerReservedSequenceNumber + 1;
340 } 340 }
341 DCHECK_NE(last_used_sequence_number_, 341 DCHECK_NE(last_used_sequence_number_,
342 kHistogramSynchronizerReservedSequenceNumber); 342 kHistogramSynchronizerReservedSequenceNumber);
343 if (requester == ASYNC_HISTOGRAMS) 343 if (requester == ASYNC_HISTOGRAMS)
344 async_sequence_number_ = last_used_sequence_number_; 344 async_sequence_number_ = last_used_sequence_number_;
345 return last_used_sequence_number_; 345 return last_used_sequence_number_;
346 } 346 }
347 347
348 } // namespace content 348 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gpu/shader_disk_cache_unittest.cc ('k') | content/browser/host_zoom_map_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698