| Index: cc/worker_pool.cc | 
| diff --git a/cc/worker_pool.cc b/cc/worker_pool.cc | 
| index 684e15e454319e6c9da7cc445fec048a802adca5..5797ab473c30aa4169f7136544aef5e3fe79e870 100644 | 
| --- a/cc/worker_pool.cc | 
| +++ b/cc/worker_pool.cc | 
| @@ -26,8 +26,8 @@ class WorkerPoolTaskImpl : public internal::WorkerPoolTask { | 
| : internal::WorkerPoolTask(reply), | 
| task_(task) {} | 
|  | 
| -  virtual void Run() OVERRIDE { | 
| -    task_.Run(&rendering_stats_); | 
| +  virtual void Run(RenderingStats* rendering_stats) OVERRIDE { | 
| +    task_.Run(rendering_stats); | 
| } | 
|  | 
| private: | 
| @@ -57,10 +57,14 @@ void WorkerPoolTask::Completed() { | 
|  | 
| }  // namespace internal | 
|  | 
| -WorkerPool::Worker::Worker(WorkerPool* worker_pool, const std::string name) | 
| +WorkerPool::Worker::Worker( | 
| +    WorkerPool* worker_pool, | 
| +    const std::string name, | 
| +    scoped_ptr<RenderingStats> rendering_stats) | 
| : base::Thread(name.c_str()), | 
| worker_pool_(worker_pool), | 
| -      weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 
| +      weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 
| +      rendering_stats_(rendering_stats.Pass()) { | 
| Start(); | 
| DCHECK(IsRunning()); | 
| } | 
| @@ -88,7 +92,9 @@ void WorkerPool::Worker::PostTask(scoped_ptr<internal::WorkerPoolTask> task) { | 
|  | 
| message_loop_proxy()->PostTaskAndReply( | 
| FROM_HERE, | 
| -      base::Bind(&Worker::RunTask, base::Unretained(task.get())), | 
| +      base::Bind(&Worker::RunTask, | 
| +                 base::Unretained(task.get()), | 
| +                 base::Unretained(rendering_stats_.get())), | 
| base::Bind(&Worker::OnTaskCompleted, weak_ptr_factory_.GetWeakPtr())); | 
|  | 
| pending_tasks_.push_back(task.Pass()); | 
| @@ -105,39 +111,32 @@ void WorkerPool::Worker::Init() { | 
| } | 
|  | 
| // static | 
| -void WorkerPool::Worker::RunTask(internal::WorkerPoolTask* task) { | 
| -  task->Run(); | 
| +void WorkerPool::Worker::RunTask( | 
| +    internal::WorkerPoolTask* task, RenderingStats* rendering_stats) { | 
| +  task->Run(rendering_stats); | 
| } | 
|  | 
| void WorkerPool::Worker::OnTaskCompleted() { | 
| CHECK(!pending_tasks_.empty()); | 
|  | 
| scoped_ptr<internal::WorkerPoolTask> task = pending_tasks_.take_front(); | 
| - | 
| task->Completed(); | 
|  | 
| -  rendering_stats_.totalRasterizeTime += | 
| -      task->rendering_stats().totalRasterizeTime; | 
| -  rendering_stats_.totalPixelsRasterized += | 
| -      task->rendering_stats().totalPixelsRasterized; | 
| -  rendering_stats_.totalDeferredImageDecodeTime += | 
| -      task->rendering_stats().totalDeferredImageDecodeTime; | 
| -  rendering_stats_.totalDeferredImageDecodeCount += | 
| -      task->rendering_stats().totalDeferredImageDecodeCount; | 
| - | 
| worker_pool_->DidNumPendingTasksChange(); | 
| } | 
|  | 
| -WorkerPool::WorkerPool(size_t num_threads) | 
| +WorkerPool::WorkerPool(size_t num_threads, bool record_rendering_stats) | 
| : workers_need_sorting_(false), | 
| shutdown_(false) { | 
| const std::string thread_name_prefix = kWorkerThreadNamePrefix; | 
| while (workers_.size() < num_threads) { | 
| int thread_number = workers_.size() + 1; | 
| -    workers_.push_back( | 
| -        new Worker(this, | 
| -                   thread_name_prefix + | 
| -                   StringPrintf("Worker%d", thread_number).c_str())); | 
| +    scoped_ptr<RenderingStats> rendering_stats = record_rendering_stats ? | 
| +        make_scoped_ptr(new RenderingStats) : scoped_ptr<RenderingStats>(); | 
| +    workers_.push_back(new Worker( | 
| +        this, | 
| +        thread_name_prefix + StringPrintf("Worker%d", thread_number).c_str(), | 
| +        rendering_stats.Pass())); | 
| } | 
| } | 
|  | 
| @@ -181,14 +180,15 @@ void WorkerPool::GetRenderingStats(RenderingStats* stats) { | 
| for (WorkerVector::iterator it = workers_.begin(); | 
| it != workers_.end(); ++it) { | 
| Worker* worker = *it; | 
| +    CHECK(worker->rendering_stats()); | 
| stats->totalRasterizeTime += | 
| -        worker->rendering_stats().totalRasterizeTime; | 
| +        worker->rendering_stats()->totalRasterizeTime; | 
| stats->totalPixelsRasterized += | 
| -        worker->rendering_stats().totalPixelsRasterized; | 
| +        worker->rendering_stats()->totalPixelsRasterized; | 
| stats->totalDeferredImageDecodeCount += | 
| -        worker->rendering_stats().totalDeferredImageDecodeCount; | 
| +        worker->rendering_stats()->totalDeferredImageDecodeCount; | 
| stats->totalDeferredImageDecodeTime += | 
| -        worker->rendering_stats().totalDeferredImageDecodeTime; | 
| +        worker->rendering_stats()->totalDeferredImageDecodeTime; | 
| } | 
| } | 
|  | 
|  |