| Index: chrome/browser/metrics/histogram_synchronizer.cc
|
| diff --git a/chrome/browser/metrics/histogram_synchronizer.cc b/chrome/browser/metrics/histogram_synchronizer.cc
|
| index 07266c1f5c42a062d65fa9bb75927c7088908b3a..6e4706fe1aff45ee21bfad886da777061c6ce772 100644
|
| --- a/chrome/browser/metrics/histogram_synchronizer.cc
|
| +++ b/chrome/browser/metrics/histogram_synchronizer.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/metrics/histogram_synchronizer.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/threading/thread.h"
|
| @@ -27,7 +28,6 @@ static const int kNeverUsableSequenceNumber = -2;
|
| HistogramSynchronizer::HistogramSynchronizer()
|
| : lock_(),
|
| received_all_renderer_histograms_(&lock_),
|
| - callback_task_(NULL),
|
| callback_thread_(NULL),
|
| last_used_sequence_number_(kNeverUsableSequenceNumber),
|
| async_sequence_number_(kNeverUsableSequenceNumber),
|
| @@ -40,7 +40,7 @@ HistogramSynchronizer::HistogramSynchronizer()
|
|
|
| HistogramSynchronizer::~HistogramSynchronizer() {
|
| // Just in case we have any pending tasks, clear them out.
|
| - SetCallbackTaskAndThread(NULL, NULL);
|
| + SetCallbackTaskAndThread(NULL, base::Closure());
|
| histogram_synchronizer_ = NULL;
|
| }
|
|
|
| @@ -77,21 +77,21 @@ void HistogramSynchronizer::FetchRendererHistogramsSynchronously(
|
| // static
|
| void HistogramSynchronizer::FetchRendererHistogramsAsynchronously(
|
| MessageLoop* callback_thread,
|
| - Task* callback_task,
|
| + const base::Closure& callback,
|
| int wait_time) {
|
| DCHECK(callback_thread != NULL);
|
| - DCHECK(callback_task != NULL);
|
| + DCHECK(!callback.is_null());
|
|
|
| HistogramSynchronizer* current_synchronizer = CurrentSynchronizer();
|
|
|
| if (current_synchronizer == NULL) {
|
| // System teardown is happening.
|
| - callback_thread->PostTask(FROM_HERE, callback_task);
|
| + callback_thread->PostTask(FROM_HERE, callback);
|
| return;
|
| }
|
|
|
| current_synchronizer->SetCallbackTaskAndThread(callback_thread,
|
| - callback_task);
|
| + callback);
|
|
|
| int sequence_number =
|
| current_synchronizer->NotifyAllRenderers(ASYNC_HISTOGRAMS);
|
| @@ -101,9 +101,9 @@ void HistogramSynchronizer::FetchRendererHistogramsAsynchronously(
|
| // making the callback.
|
| BrowserThread::PostDelayedTask(
|
| BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - current_synchronizer,
|
| + base::Bind(
|
| &HistogramSynchronizer::ForceHistogramSynchronizationDoneCallback,
|
| + current_synchronizer,
|
| sequence_number),
|
| wait_time);
|
| }
|
| @@ -175,16 +175,16 @@ void HistogramSynchronizer::DecrementPendingRenderers(int sequence_number) {
|
|
|
| void HistogramSynchronizer::SetCallbackTaskAndThread(
|
| MessageLoop* callback_thread,
|
| - Task* callback_task) {
|
| - Task* old_task = NULL;
|
| + const base::Closure& callback) {
|
| + base::Closure old_callback;
|
| MessageLoop* old_thread = NULL;
|
| TimeTicks old_start_time;
|
| int unresponsive_renderers;
|
| const TimeTicks now = TimeTicks::Now();
|
| {
|
| base::AutoLock auto_lock(lock_);
|
| - old_task = callback_task_;
|
| - callback_task_ = callback_task;
|
| + old_callback = callback_;
|
| + callback_ = callback;
|
| old_thread = callback_thread_;
|
| callback_thread_ = callback_thread;
|
| unresponsive_renderers = async_renderers_pending_;
|
| @@ -194,13 +194,13 @@ void HistogramSynchronizer::SetCallbackTaskAndThread(
|
| async_sequence_number_ = kNeverUsableSequenceNumber;
|
| }
|
| // Just in case there was a task pending....
|
| - InternalPostTask(old_thread, old_task, unresponsive_renderers,
|
| + InternalPostTask(old_thread, old_callback, unresponsive_renderers,
|
| old_start_time);
|
| }
|
|
|
| void HistogramSynchronizer::ForceHistogramSynchronizationDoneCallback(
|
| int sequence_number) {
|
| - Task* task = NULL;
|
| + base::Closure callback;
|
| MessageLoop* thread = NULL;
|
| TimeTicks started;
|
| int unresponsive_renderers;
|
| @@ -208,20 +208,21 @@ void HistogramSynchronizer::ForceHistogramSynchronizationDoneCallback(
|
| base::AutoLock lock(lock_);
|
| if (sequence_number != async_sequence_number_)
|
| return;
|
| - task = callback_task_;
|
| + callback = callback_;
|
| thread = callback_thread_;
|
| - callback_task_ = NULL;
|
| + callback_.Reset();
|
| callback_thread_ = NULL;
|
| started = async_callback_start_time_;
|
| unresponsive_renderers = async_renderers_pending_;
|
| }
|
| - InternalPostTask(thread, task, unresponsive_renderers, started);
|
| + InternalPostTask(thread, callback, unresponsive_renderers, started);
|
| }
|
|
|
| -void HistogramSynchronizer::InternalPostTask(MessageLoop* thread, Task* task,
|
| +void HistogramSynchronizer::InternalPostTask(MessageLoop* thread,
|
| + const base::Closure& callback,
|
| int unresponsive_renderers,
|
| const base::TimeTicks& started) {
|
| - if (!task || !thread)
|
| + if (callback.is_null() || !thread)
|
| return;
|
| UMA_HISTOGRAM_COUNTS("Histogram.RendersNotRespondingAsynchronous",
|
| unresponsive_renderers);
|
| @@ -230,7 +231,7 @@ void HistogramSynchronizer::InternalPostTask(MessageLoop* thread, Task* task,
|
| TimeTicks::Now() - started);
|
| }
|
|
|
| - thread->PostTask(FROM_HERE, task);
|
| + thread->PostTask(FROM_HERE, callback);
|
| }
|
|
|
| int HistogramSynchronizer::GetNextAvailableSequenceNumber(
|
|
|