Chromium Code Reviews| Index: cc/raster_worker_pool.cc |
| diff --git a/cc/raster_worker_pool.cc b/cc/raster_worker_pool.cc |
| index 13113b5f1bfde8bf7289a9d32bad34de8d86ad99..bc227bb0540cbc68b57abd6e12d9adad2b169120 100644 |
| --- a/cc/raster_worker_pool.cc |
| +++ b/cc/raster_worker_pool.cc |
| @@ -21,6 +21,10 @@ class RasterWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
| DCHECK(picture_pile_); |
| } |
| + virtual void WillRunOnThread(base::Thread* thread) OVERRIDE { |
| + picture_pile_ = picture_pile_->GetCloneForDrawingOnThread(thread); |
| + } |
| + |
| virtual void Run(RenderingStats* rendering_stats) OVERRIDE { |
| task_.Run(picture_pile_.get(), rendering_stats); |
| base::subtle::Release_Store(&completed_, 1); |
| @@ -42,18 +46,18 @@ RasterWorkerPool::~RasterWorkerPool() { |
| } |
| void RasterWorkerPool::PostRasterTaskAndReply(PicturePileImpl* picture_pile, |
| + bool is_cheap, |
| const RasterCallback& task, |
| const base::Closure& reply) { |
| - Worker* worker = GetWorkerForNextTask(); |
| - |
| - scoped_refptr<PicturePileImpl> picture_pile_clone = |
| - picture_pile->GetCloneForDrawingOnThread(worker); |
| - |
| - worker->PostTask( |
| - make_scoped_ptr(new RasterWorkerPoolTaskImpl( |
| - picture_pile_clone.get(), |
| - task, |
| - reply)).PassAs<internal::WorkerPoolTask>()); |
| + scoped_ptr<internal::WorkerPoolTask> worker_task( |
| + new RasterWorkerPoolTaskImpl(picture_pile, task, reply)); |
| + |
| + if (is_cheap && CanPostCheapTask()) { |
| + PostCheapTask(worker_task.Pass()); |
| + } else { |
| + Worker* worker = GetWorkerForNextTask(); |
|
reveman
2013/02/19 18:05:23
Posting directly to a worker makes less sense now
Sami
2013/02/19 22:24:38
Good idea, done.
|
| + worker->PostTask(worker_task.Pass()); |
| + } |
| } |
| } // namespace cc |