| Index: cc/resources/raster_worker_pool.cc
|
| diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc
|
| index dba3fc2ba02d60d2d7b17715f0f5a131adf0446c..a078fb00bb7e9600e7408a10bd37c92b23a5d9fb 100644
|
| --- a/cc/resources/raster_worker_pool.cc
|
| +++ b/cc/resources/raster_worker_pool.cc
|
| @@ -10,24 +10,72 @@ namespace cc {
|
|
|
| namespace {
|
|
|
| +class RasterWorkerPoolContainerTaskImpl : 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(PicturePileImpl* picture_pile,
|
| - const RasterWorkerPool::RasterCallback& task,
|
| - const base::Closure& reply)
|
| - : internal::WorkerPoolTask(reply),
|
| + RasterWorkerPoolTaskImpl(const base::Closure& callback,
|
| + const RasterWorkerPool::Task::Reply& reply)
|
| + : callback_(callback),
|
| + reply_(reply) {
|
| + }
|
| +
|
| + // Overridden from internal::WorkerPoolTask:
|
| + virtual void RunOnThread(unsigned thread_index) OVERRIDE {
|
| + callback_.Run();
|
| + }
|
| + virtual void DispatchCompletionCallback() OVERRIDE {
|
| + reply_.Run(!HasFinishedRunning());
|
| + }
|
| +
|
| + private:
|
| + virtual ~RasterWorkerPoolTaskImpl() {}
|
| +
|
| + const base::Closure callback_;
|
| + const RasterWorkerPool::Task::Reply reply_;
|
| +};
|
| +
|
| +class RasterWorkerPoolPictureTaskImpl : public internal::WorkerPoolTask {
|
| + public:
|
| + RasterWorkerPoolPictureTaskImpl(
|
| + PicturePileImpl* picture_pile,
|
| + const RasterWorkerPool::PictureTask::Callback& callback,
|
| + const RasterWorkerPool::Task::Reply& reply,
|
| + internal::WorkerPoolTask::TaskVector* dependencies)
|
| + : internal::WorkerPoolTask(dependencies),
|
| picture_pile_(picture_pile),
|
| - task_(task) {
|
| + callback_(callback),
|
| + reply_(reply) {
|
| DCHECK(picture_pile_);
|
| }
|
|
|
| + // Overridden from internal::WorkerPoolTask:
|
| virtual void RunOnThread(unsigned thread_index) OVERRIDE {
|
| - task_.Run(picture_pile_->GetCloneForDrawingOnThread(thread_index));
|
| + callback_.Run(picture_pile_->GetCloneForDrawingOnThread(thread_index));
|
| + }
|
| + virtual void DispatchCompletionCallback() OVERRIDE {
|
| + reply_.Run(!HasFinishedRunning());
|
| }
|
|
|
| private:
|
| + virtual ~RasterWorkerPoolPictureTaskImpl() {}
|
| +
|
| scoped_refptr<PicturePileImpl> picture_pile_;
|
| - RasterWorkerPool::RasterCallback task_;
|
| + const RasterWorkerPool::PictureTask::Callback callback_;
|
| + const RasterWorkerPool::Task::Reply reply_;
|
| };
|
|
|
| const char* kWorkerThreadNamePrefix = "CompositorRaster";
|
| @@ -36,23 +84,69 @@ const int kCheckForCompletedTasksDelayMs = 6;
|
|
|
| } // namespace
|
|
|
| -RasterWorkerPool::RasterWorkerPool(size_t num_threads)
|
| - : WorkerPool(
|
| - num_threads,
|
| - base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs),
|
| - kWorkerThreadNamePrefix) {
|
| +RasterWorkerPool::Task::Queue::Queue() {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Queue::~Queue() {
|
| +}
|
| +
|
| +void RasterWorkerPool::Task::Queue::Append(const Task& task) {
|
| + DCHECK(!task.is_null());
|
| + tasks_.push_back(task.internal_);
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Task() {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Task(const base::Closure& callback,
|
| + const Reply& reply)
|
| + : internal_(new RasterWorkerPoolTaskImpl(callback, reply)) {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Task(Queue* dependencies)
|
| + : internal_(new RasterWorkerPoolContainerTaskImpl(&dependencies->tasks_)) {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Task(scoped_refptr<internal::WorkerPoolTask> internal)
|
| + : internal_(internal) {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::~Task() {
|
| +}
|
| +
|
| +void RasterWorkerPool::Task::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::RasterWorkerPool(size_t num_threads) : WorkerPool(
|
| + num_threads,
|
| + base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs),
|
| + kWorkerThreadNamePrefix) {
|
| }
|
|
|
| RasterWorkerPool::~RasterWorkerPool() {
|
| }
|
|
|
| -void RasterWorkerPool::PostRasterTaskAndReply(PicturePileImpl* picture_pile,
|
| - const RasterCallback& task,
|
| - const base::Closure& reply) {
|
| - PostTask(make_scoped_ptr(new RasterWorkerPoolTaskImpl(
|
| - picture_pile,
|
| - task,
|
| - reply)).PassAs<internal::WorkerPoolTask>());
|
| +void RasterWorkerPool::Shutdown() {
|
| + // Cancel all previously scheduled tasks.
|
| + WorkerPool::ScheduleTasks(NULL);
|
| +
|
| + WorkerPool::Shutdown();
|
| +}
|
| +
|
| +void RasterWorkerPool::ScheduleTasks(Task* task) {
|
| + WorkerPool::ScheduleTasks(task ? task->internal_ : NULL);
|
| }
|
|
|
| } // namespace cc
|
|
|