Index: cc/resources/raster_worker_pool.cc |
diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc |
index a078fb00bb7e9600e7408a10bd37c92b23a5d9fb..a8f0dd3599560ea36bb7fe57e77b771620508d86 100644 |
--- a/cc/resources/raster_worker_pool.cc |
+++ b/cc/resources/raster_worker_pool.cc |
@@ -1,4 +1,4 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -10,25 +10,10 @@ namespace cc { |
namespace { |
-class RasterWorkerPoolContainerTaskImpl : public internal::WorkerPoolTask { |
+class WorkerPoolTaskImpl : public internal::WorkerPoolTask { |
public: |
- RasterWorkerPoolContainerTaskImpl( |
- internal::WorkerPoolTask::TaskVector* dependencies) |
- : internal::WorkerPoolTask(dependencies) { |
- } |
- |
- // Overridden from internal::WorkerPoolTask: |
- virtual void RunOnThread(unsigned thread_index) OVERRIDE {} |
- virtual void DispatchCompletionCallback() OVERRIDE {} |
- |
- private: |
- virtual ~RasterWorkerPoolContainerTaskImpl() {} |
-}; |
- |
-class RasterWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
- public: |
- RasterWorkerPoolTaskImpl(const base::Closure& callback, |
- const RasterWorkerPool::Task::Reply& reply) |
+ WorkerPoolTaskImpl(const base::Closure& callback, |
+ const base::Closure& reply) |
: callback_(callback), |
reply_(reply) { |
} |
@@ -38,44 +23,45 @@ class RasterWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
callback_.Run(); |
} |
virtual void DispatchCompletionCallback() OVERRIDE { |
- reply_.Run(!HasFinishedRunning()); |
+ reply_.Run(); |
} |
private: |
- virtual ~RasterWorkerPoolTaskImpl() {} |
+ virtual ~WorkerPoolTaskImpl() {} |
const base::Closure callback_; |
- const RasterWorkerPool::Task::Reply reply_; |
+ const base::Closure reply_; |
}; |
-class RasterWorkerPoolPictureTaskImpl : public internal::WorkerPoolTask { |
+class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
public: |
- RasterWorkerPoolPictureTaskImpl( |
+ RasterWorkerPoolTaskImpl( |
PicturePileImpl* picture_pile, |
- const RasterWorkerPool::PictureTask::Callback& callback, |
- const RasterWorkerPool::Task::Reply& reply, |
+ const Resource* resource, |
+ const RasterWorkerPool::RasterTask::Callback& callback, |
+ const RasterWorkerPool::RasterTask::Reply& reply, |
internal::WorkerPoolTask::TaskVector* dependencies) |
- : internal::WorkerPoolTask(dependencies), |
+ : internal::RasterWorkerPoolTask(resource, dependencies), |
picture_pile_(picture_pile), |
callback_(callback), |
reply_(reply) { |
- DCHECK(picture_pile_); |
} |
- // Overridden from internal::WorkerPoolTask: |
- virtual void RunOnThread(unsigned thread_index) OVERRIDE { |
- callback_.Run(picture_pile_->GetCloneForDrawingOnThread(thread_index)); |
+ // Overridden from internal::RasterWorkerPoolTask: |
+ virtual bool RunOnThread(uint8_t* buffer, unsigned thread_index) OVERRIDE { |
+ return callback_.Run( |
+ buffer, picture_pile_->GetCloneForDrawingOnThread(thread_index)); |
} |
virtual void DispatchCompletionCallback() OVERRIDE { |
reply_.Run(!HasFinishedRunning()); |
} |
private: |
- virtual ~RasterWorkerPoolPictureTaskImpl() {} |
+ virtual ~RasterWorkerPoolTaskImpl() {} |
- scoped_refptr<PicturePileImpl> picture_pile_; |
- const RasterWorkerPool::PictureTask::Callback callback_; |
- const RasterWorkerPool::Task::Reply reply_; |
+ PicturePileImpl* picture_pile_; |
+ const RasterWorkerPool::RasterTask::Callback callback_; |
+ const RasterWorkerPool::RasterTask::Reply reply_; |
}; |
const char* kWorkerThreadNamePrefix = "CompositorRaster"; |
@@ -84,13 +70,47 @@ const int kCheckForCompletedTasksDelayMs = 6; |
} // namespace |
-RasterWorkerPool::Task::Queue::Queue() { |
+namespace internal { |
+ |
+RasterWorkerPoolTask::RasterWorkerPoolTask( |
+ const Resource* resource, |
+ WorkerPoolTask::TaskVector* dependencies) |
+ : did_run_(false), |
+ did_complete_(false), |
+ resource_(resource) { |
+ dependencies_.swap(*dependencies); |
+} |
+ |
+RasterWorkerPoolTask::~RasterWorkerPoolTask() { |
+} |
+ |
+void RasterWorkerPoolTask::DidRun() { |
+ DCHECK(!did_run_); |
+ did_run_ = true; |
+} |
+ |
+bool RasterWorkerPoolTask::HasFinishedRunning() const { |
+ return did_run_; |
+} |
+ |
+void RasterWorkerPoolTask::DidComplete() { |
+ DCHECK(!did_complete_); |
+ did_complete_ = true; |
+} |
+ |
+bool RasterWorkerPoolTask::HasCompleted() const { |
+ return did_complete_; |
} |
-RasterWorkerPool::Task::Queue::~Queue() { |
+} // namespace internal |
+ |
+RasterWorkerPool::Task::Set::Set() { |
+} |
+ |
+RasterWorkerPool::Task::Set::~Set() { |
} |
-void RasterWorkerPool::Task::Queue::Append(const Task& task) { |
+void RasterWorkerPool::Task::Set::Insert(const Task& task) { |
DCHECK(!task.is_null()); |
tasks_.push_back(task.internal_); |
} |
@@ -99,54 +119,83 @@ RasterWorkerPool::Task::Task() { |
} |
RasterWorkerPool::Task::Task(const base::Closure& callback, |
- const Reply& reply) |
- : internal_(new RasterWorkerPoolTaskImpl(callback, reply)) { |
+ const base::Closure& reply) |
+ : internal_(new WorkerPoolTaskImpl(callback, reply)) { |
} |
-RasterWorkerPool::Task::Task(Queue* dependencies) |
- : internal_(new RasterWorkerPoolContainerTaskImpl(&dependencies->tasks_)) { |
+RasterWorkerPool::Task::~Task() { |
} |
-RasterWorkerPool::Task::Task(scoped_refptr<internal::WorkerPoolTask> internal) |
- : internal_(internal) { |
+void RasterWorkerPool::Task::Reset() { |
+ internal_ = NULL; |
} |
-RasterWorkerPool::Task::~Task() { |
+RasterWorkerPool::RasterTask::Queue::Queue() { |
} |
-void RasterWorkerPool::Task::Reset() { |
+RasterWorkerPool::RasterTask::Queue::~Queue() { |
+} |
+ |
+void RasterWorkerPool::RasterTask::Queue::Append(const RasterTask& task) { |
+ DCHECK(!task.is_null()); |
+ tasks_.push_back(task.internal_); |
+} |
+ |
+RasterWorkerPool::RasterTask::RasterTask() { |
+} |
+ |
+RasterWorkerPool::RasterTask::RasterTask(PicturePileImpl* picture_pile, |
+ const Resource* resource, |
+ const Callback& callback, |
+ const Reply& reply, |
+ Task::Set* dependencies) |
+ : internal_(new RasterWorkerPoolTaskImpl(picture_pile, |
+ resource, |
+ callback, |
+ reply, |
+ &dependencies->tasks_)) { |
+} |
+ |
+void RasterWorkerPool::RasterTask::Reset() { |
internal_ = NULL; |
} |
-RasterWorkerPool::PictureTask::PictureTask(PicturePileImpl* picture_pile, |
- const Callback& callback, |
- const Reply& reply, |
- Task::Queue* dependencies) |
- : RasterWorkerPool::Task( |
- new RasterWorkerPoolPictureTaskImpl(picture_pile, |
- callback, |
- reply, |
- &dependencies->tasks_)) { |
+RasterWorkerPool::RasterTask::~RasterTask() { |
} |
-RasterWorkerPool::RasterWorkerPool(size_t num_threads) : WorkerPool( |
- num_threads, |
- base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs), |
- kWorkerThreadNamePrefix) { |
+RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider, |
+ size_t num_threads) |
+ : WorkerPool( |
+ num_threads, |
+ base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs), |
+ kWorkerThreadNamePrefix), |
+ resource_provider_(resource_provider), |
+ client_(NULL) { |
} |
RasterWorkerPool::~RasterWorkerPool() { |
} |
-void RasterWorkerPool::Shutdown() { |
- // Cancel all previously scheduled tasks. |
- WorkerPool::ScheduleTasks(NULL); |
+void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { |
+ client_ = client; |
+} |
+void RasterWorkerPool::Shutdown() { |
+ raster_tasks_.clear(); |
WorkerPool::Shutdown(); |
} |
-void RasterWorkerPool::ScheduleTasks(Task* task) { |
- WorkerPool::ScheduleTasks(task ? task->internal_ : NULL); |
+void RasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) { |
+ NOTREACHED(); |
+} |
+ |
+bool RasterWorkerPool::ForceUploadToComplete( |
+ ResourceProvider::ResourceId resource_id) { |
+ return false; |
+} |
+ |
+void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) { |
+ raster_tasks_.swap(queue->tasks_); |
} |
} // namespace cc |